Skip to content

Commit 7654919

Browse files
authored
Merge pull request #135 from chenyyx/master
添加训练函数原版
2 parents 1ce81a8 + 8c32c26 commit 7654919

1 file changed

Lines changed: 38 additions & 0 deletions

File tree

docs/4.朴素贝叶斯.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,44 @@ def setOfWords2Vec(vocabList, inputSet):
220220
朴素贝叶斯分类器训练函数
221221

222222
```python
223+
def _trainNB0(trainMatrix, trainCategory):
224+
"""
225+
训练数据原版
226+
:param trainMatrix: 文件单词矩阵 [[1,0,1,1,1....],[],[]...]
227+
:param trainCategory: 文件对应的类别[0,1,1,0....],列表长度等于单词矩阵数,其中的1代表对应的文件是侮辱性文件,0代表不是侮辱性矩阵
228+
:return:
229+
"""
230+
# 文件数
231+
numTrainDocs = len(trainMatrix)
232+
# 单词数
233+
numWords = len(trainMatrix[0])
234+
# 侮辱性文件的出现概率,即trainCategory中所有的1的个数,
235+
# 代表的就是多少个侮辱性文件,与文件的总数相除就得到了侮辱性文件的出现概率
236+
pAbusive = sum(trainCategory) / float(numTrainDocs)
237+
# 构造单词出现次数列表
238+
p0Num = zeros(numWords) # [0,0,0,.....]
239+
p1Num = zeros(numWords) # [0,0,0,.....]
240+
241+
# 整个数据集单词出现总数
242+
p0Denom = 0.0
243+
p1Denom = 0.0
244+
for i in range(numTrainDocs):
245+
# 遍历所有的文件,如果是侮辱性文件,就计算此侮辱性文件中出现的侮辱性单词的个数
246+
if trainCategory[i] == 1:
247+
p1Num += trainMatrix[i] #[0,1,1,....]->[0,1,1,...]
248+
p1Denom += sum(trainMatrix[i])
249+
else:
250+
# 如果不是侮辱性文件,则计算非侮辱性文件中出现的侮辱性单词的个数
251+
p0Num += trainMatrix[i]
252+
p0Denom += sum(trainMatrix[i])
253+
# 类别1,即侮辱性文档的[P(F1|C1),P(F2|C1),P(F3|C1),P(F4|C1),P(F5|C1)....]列表
254+
# 即 在1类别下,每个单词出现次数的占比
255+
p1Vect = p1Num / p1Denom# [1,2,3,5]/90->[1/90,...]
256+
# 类别0,即正常文档的[P(F1|C0),P(F2|C0),P(F3|C0),P(F4|C0),P(F5|C0)....]列表
257+
# 即 在0类别下,每个单词出现次数的占比
258+
p0Vect = p0Num / p0Denom
259+
return p0Vect, p1Vect, pAbusive
260+
223261
def trainNB0(trainMatrix, trainCategory):
224262
"""
225263
训练数据优化版本

0 commit comments

Comments
 (0)