AIR

机器学习基础(4)

朴素贝叶斯(Native Bayesion)

朴素贝叶斯的特点

1.优点:在数据较少的情况下任然有效,可以处理多类别问题。

2.缺点:对于输入数据的准备方式较为敏感。

3.适用数据类型:标称型数据类型。

条件概率的计算

1.条件概率计算公式(其中A,B均表示事件特征):
$$
p(A|B)=p(AB)/p(B)
$$
2.贝叶斯准则:
$$
p(c|x)=\frac{p(x|c)p(c)}{p(x)}
$$
使用条件:已知p(x|c),要求p(c|x)

贝叶斯决策论

朴素贝叶斯是贝叶斯决策论的一部分。

假设我们用p1(x,y)表示数据点(x, y)属于类别1的概率,用p2(x, y)来表示类别2的概率,那么就可以有:

1.当p1(x, y) > p2(x, y),表示类别1。

2.当p1(x, y) < p2(x, y),表示类别2。

选择高概率事件来选择对应类别,这就是贝叶斯决策论的核心思想。

分类

通过上述对贝叶斯决策论的介绍,对应到贝叶斯准则中就可以得到:

1.当p(c1|x, y) > p(c2|x, y),那么属于类别c1。

2.当p(c1|x, y) < p(c2|x, y),那么属于类别c2。

朴素贝叶斯的一般过程

1.收集数据:任何适用方法。

2.准备数据:数值型或布尔型的数据。

3.分析数据:有大量特征时,绘制特征作用不大,使用直方图效果更好。

4.训练算法:计算不同的独立特征的条件概率。

5.测试算法:计算错误率。

6.使用算法:可以在任意的分类场景中使用朴素贝叶斯分类器。

使用python实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
def loadDataSet():
postingList = [['my','dog','has','flea',\
'problem','help','please'],
['maybe','not','take','him',\
'to','dog','park','stupid'],
['my','dalmation','is','so','cute',\
'I','love','him'],
['stop','posting','stupid','worthiless','garbage'],
['mr','licks','ate','my','steak','how',\
'to','stop','him'],
['quit', 'buying', 'worthless', 'dog', 'food', 'stupid']]
#1代表侮辱性文字,0为正常言论
classVec = [0, 1, 0, 1, 0, 1]
return postingList , classVec

def createVocabList(dataSet):
#创建一个集合
vocabSet = set([])
for document in dataSet:
#创建两个集合的并集
vocabSet = vocabSet | set(document)
return list(vocabSet)

def setOfWords2Vec(vocabSet, inputSet):
#创建一个其中元素都为0的向量
returnVec = [0] * len(vocabSet)
for word in inputSet:
if word in vocabSet:
returnVec[vocabSet.index(word)] = 1
else:
print("the word: %s is not in my Vocabulary!" % word)
return returnVec

在python.shell中检查结果:

朴素贝叶斯分类器训练函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def trainNB0(trainMatrix, trainCategory):
numTrainDocs = len(trainMatrix)
numWords = len(trainMatrix[0])
pAbusive = sum(trainCategory)/float(numTrainDocs)
#初始化概率
p0Num = zeros(numWords); plNum = zeros(numWords)
p0Denom=0.0;p1Denom=0.0
for i in range(numTrainDocs):
#向量相加
if trainCategory[i]==1:
plNum += trainMatrix[i]
p1Denom+=sum(trainMatrix[i])
else:
p0Num += trainMatrix[i]
p0Denom += sum(trainMatrix[i])
#对每个元素做除法
p1Vect = plNum/p1Denom
p0Vect = p0Num/p0Denom
return p0Vect,p1Vect,pAbusive

检查:


 Comments


Blog content follows the Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) License

Use Material X as theme , total visits times .
载入天数...载入时分秒...