【ML笔记】贝叶斯算法

网友投稿 244 2022-11-01


【ML笔记】贝叶斯算法

一般地,贝叶斯算法可用于新闻分类,文本分类以及邮件分类

贝叶斯统计学方法 = 总体信息 + 样本信息 + 先验信息

总体信息:当前总体样本符合某种分布。比如抛硬币,二项分布。学生某一科的成绩符合正态分布样本信息:通过抽样得到的部分样本的某种分布。先验信息:抽样之前,有关推断问题中位置参数的一些信息,通常来源于经验或历史资料(比如让一个音乐家猜某歌曲的作者和让一个小学生猜某歌曲的作者,音乐家具有先验信息)

古典学派和贝叶斯学派的矛盾:是否承认先验知识

贝叶斯定理:

对公式的分析: 后验概率 = 先验概率 * 调整因子

如果调整因子>1,意味着’先验概率’被增强,事件A的发生的可能性变大;如果调整因子=1,意味着B事件无助于判断事件A的可能性;如果调整因子<1,意味着"先验概率"被削弱,事件A的可能性变小

在邮件分类的应用中:

P(A):是垃圾邮件的概率P(B):带有某特征的邮件的概率P(A|B):已知一封邮件具有某特征,该邮件为垃圾邮件的概率

朴素贝叶斯:

X1,X2,…,Xn之间相互独立,则

我们大脑中也是有贝叶斯算法的:

在Line1中,由于我们的大脑认识A、C,存在先验信息,因此我们会把Line1的图案当作字母“B”。而Line2中,由于两侧是12、14,我们的大脑会帮我们把图案理解为数字“13”。由于有了“样本信息”和“先验信息”,我们会将相同的图案理解为不同的含义。

利用朴素贝叶斯进行文档分类

from sklearn.datasets import fetch_20newsgroupsfrom sklearn.model_selection import train_test_splitfrom sklearn.feature_extraction.text import TfidfVectorizerfrom sklearn.naive_bayes import MultinomialNBdef navieBayes(): """ 朴素贝叶斯进行文本分类 :return: None """ news = fetch_20newsgroups(subset='all') # 进行数据分割,分成训练集和测试集 x_train, x_test, y_train, y_test = train_test_split(news.data, news.target, test_size=0.25) # 对数据集进行特征抽取 tfidf = TfidfVectorizer() # 抽取训练集的特征,x_train由文本变成特征矩阵 x_train = tfidf.fit_transform(x_train) print(tfidf.get_feature_names()) print('训练集统计结果为:', x_train.toarray()) # x_train由文本变成特征矩阵 x_test = tfidf.transform(x_test) # 实例化朴素贝叶斯对象,alpha表示拉普拉斯平滑系数,确保概率不为0 mlt = MultinomialNB(alpha=1.0) # 将训练集的特征值和目标值传入API进行计算,计算每个词在特定类别文章中出现的次数 mlt.fit(x_train, y_train) # 给测试数据,得到文章分类的预测结果 y_predict = mlt.predict(x_test) print('预测的文章类别为:', y_predict) # 得出准确率 print('准确率为:',mlt.score(x_test, y_test))if __name__ == '__main__': navieBayes()

朴素贝叶斯的优缺点

优点:

朴素贝叶斯发源于古典数学理论,有稳定的分类效率对缺失数据不敏感,算法较简单,常用于文本分类分类准确度高,速度快

缺点:

由于使用了样本属性独立性的假设,所以如果样本属性有关联试效果不好


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java字符串的压缩与解压缩的两种方法
下一篇:XPath学习
相关文章

 发表评论

暂时没有评论,来抢沙发吧~