@@ -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+
223261def trainNB0 (trainMatrix , trainCategory ):
224262 """
225263 训练数据优化版本
0 commit comments