机器学习实战(代码部分)-- 朴素贝叶斯之文本分类(Ⅱ 从词向量计算概率)

mac2025-02-16  19

4-2 朴素贝叶斯分类器训练函数

输入参数: 文档矩阵trainMatrix 每篇文档构成的向量trainCategory 返回值: 两个向量和一个概率 算法思路: (1)计算出训练文档的数目numTrainDocs(文档矩阵的行数),每篇文档的词条数numWords(文档矩阵一行的数据个数)。 (2)计算侮辱性数据的比例。思想:侮辱性中类别数据为1,非侮辱性为0。通过数据中所有值的和除以数据的数目即可得到侮辱性数据的比例(用浮点型计算)。 (3)初始化概率:构造两个和词条数长度相同的零矩阵,分别计算文档属于侮辱性/非侮辱性文档的概率。思想:若数据属于侮辱性文档,则将这组文档矩阵加到属于侮辱性文档的初始化矩阵中,然后计算每个数据属于侮辱性文档的概率值。

代码:

# 训练模型:计算各特征在不同的类别下的条件概率 def trainNB0(trainMatrix, trainCategory): numTrainDocs = len(trainMatrix) # 计算训练的文档数目 numWords = len(trainMatrix[0]) # 计算每篇文档的词条数 pAbusive = sum(trainCategory) / float(numTrainDocs) # 文档属于侮辱类的概率 p0Num = np.zeros(numWords) p1Num = np.zeros(numWords) # 创建numpy.zeros数组,词条出现数初始化为0 p0Denom = 0.0 p1Denom = 0.0 # 分母初始化为0 for i in range(numTrainDocs): if trainCategory[i] == 1: # 统计属于侮辱类的条件概率所需的数据,即P(w0|1),P(w1|1),P(w2|1)··· p1Num += trainMatrix[i] p1Denom += sum(trainMatrix[i]) else: # 统计属于非侮辱类的条件概率所需的数据,即P(w0|0),P(w1|0),P(w2|0)··· p0Num += trainMatrix[i] p0Denom += sum(trainMatrix[i]) p1Vect = p1Num / p1Denom # 如[1, 3, 4, 2, 0] / 2 = [0.5, 1.5, 2.0, 1.0, 0.0] p0Vect = p0Num / p0Denom return p0Vect, p1Vect, pAbusive # 返回属于侮辱类的条件概率数组,属于非侮辱类的条件概率数组,文档属于侮辱类的概率

 

最新回复(0)