朴素贝叶斯算法
朴素贝叶斯方法是在贝叶斯算法的基础上进行了相应的简化,即假定给定目标值时属性之间相互条件独立
朴素贝叶斯算法公式
朴素贝叶斯之拉普拉斯平滑
在很多次计算中,可能会出现概率为0因此这是不合理的 所以引入拉普拉斯平滑
P(C|F1F2F3) = P(F1F2F3|C)P(C)/P(F1F2F3)
相当于比较 P(F1F2F3|C)P(C)即可,还需添加拉普拉斯平滑系数
=((F1+a)/(C+am)) ((F2+a)/(C+am)) ((F3+a)/(C+am)) P(C)
朴素贝叶斯算法的优缺点
利用朴素贝叶斯对fetch_20newsgroups数据集进行预测 代码如下:
import pandas as pd
from sklearn.datasets import fetch_20newsgroups
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
def naviebayes():
"""朴素贝叶斯算法"""
news = fetch_20newsgroups(subset='all')
# 进行数据分割
x_train, x_test, y_train, y_test = train_test_split(news.data, news.target, test_size=0.25)
# 对数据集进行特征抽取
tf = TfidfVectorizer()
# 以训练集当中词的列表进行每篇文章重要性统计
x_train = tf.fit_transform(x_train)
print(tf.get_feature_names())
x_test = tf.transform(x_test)
# 进行朴素贝叶斯算法的预测
mlt = MultinomialNB(alpha=1.0)
print(x_train)
mlt.fit(x_train, y_train)
y_predect = mlt.predict(x_test)
print("预测的文章类别:", y_predect)
# 得出准确率
print("准确率为:", mlt.score(x_test, y_test))
if __name__ == '__main__':
naviebayes()