在朴素贝叶斯分析中,通过垃圾邮件分类和情感分析的实例,熟悉了贝叶斯分类算法的基本原理。同时熟悉了条件概率和贝叶斯公式。
在进行垃圾邮件分类时,首先创建由垃圾邮件和正常邮件构成的单词库。为了避免出现条件概率为零的情况,也就是某些单词没出现在训练数据中,但会出现在预测数据中。此时可采用平滑的技术,借助单词库对未出现在训练数据中的单词计算条件概率。
这样在进行具体的实例操作时,将针对单词库中的每个单词,分别在正常和垃圾邮件的情况下计算词库中每个单词出现的条件概率。
然后根据已知的正常和垃圾邮件,计算出正常邮件和垃圾邮件的先验概率。进而对于新收到的一封新邮件,根据贝叶斯定义分别计算出该邮件为正常邮件和垃圾邮件的概率。如果新邮件中的某些单词没有出现在训练数据的单词库中,计算新邮件为正常或垃圾邮件的概率时将忽略掉这些单词。从而完成数据的训练,做出邮件的分类决策。
在进行具体垃圾邮件的分类编码中:首先导入邮件的训练数据,并重命名训练数据集的列。然后把邮件类别Label和和每类邮件的Text分别数字化,并统计邮件中正常和垃圾邮件的数目。当正常和垃圾邮件的比例差别较大时,需进行处理。分别统计出训练数据中长度最小的文本,并可视化训练数据集的邮件长度数据分布。
然后把邮件的Text内容转换为向量的形式。在进行文本分析时,首先删除停用词即文本含义不起作用的词汇。然后构建出训练数据的X和Y向量。
把训练数据划分为训练数据和测试数据,并分别导入sklearn.naive_bayes模块的 MultinomialNB函数、sklearn.metrics模块的accuracy_score函数,利用朴素贝叶斯进行训练。
clf = MultinomialNB(alpha=1.0, fit_prior=True)
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
print("accuracy on test data: ", accuracy_score(y_test, y_pred))
还可通过打印混淆矩阵,直观的显示出分类的效果,从而调整分类较差的类别。
在文本分类中,首先学习了单词和文本的表示方法。有了词典后,可以采用0和1的boolean方式进行表示,只关注单词是否出现。也可采用count表示法,关注单词在词典中出现几次。
Tf-idf表示法:某个单词在当前文档中的词频以及重要性系数,掌握了如何计算某个单词的Tf-idf值。首先根据训练数据创建词库,针对每个句子计算Tf-idf向量。
在情感分析中对比了各种机器学习算法的优劣,分类的精度,初步了解了算法的适用范围。
当特征值为实数型的时候,假定特征值服从高斯分布表示对应的条件概率。朴素贝叶斯算法是在计算联合概率时假定各个条件相互独立。
判别模型和生成模型:生成模型可生成一些数据。。
在计算联合概率分布时,可能会出现多个条件概率连乘的情况,可能会出现计算结果溢出的情况,因此在计算联合概率分布时采用对数的形式。