扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
python中贝叶斯模型结果为1.0。根据查询相关资料信息显示,贝叶斯模型,有两个参数,平均值和其偏差,这些参数还需要通过选择对应的分布函数来建立模型得出python中贝叶斯模型结果为1.0。
网站制作、成都网站建设服务团队是一支充满着热情的团队,执着、敏锐、追求更好,是创新互联的标准与要求,同时竭诚为客户提供服务是我们的理念。成都创新互联公司把每个网站当做一个产品来开发,精雕细琢,追求一名工匠心中的细致,我们更用心!
本教程将使您了解如何使用 Python 的 Scikit-learn 包构建和评估朴素贝叶斯分类器。
假设您是产品经理,您想将客户评论分为正面和负面类别。 或者作为贷款经理,您想确定哪些贷款申请人是安全的还是有风险的? 作为医疗保健分析师,您希望预测哪些患者可能患有糖尿病。 所有示例都存在对评论、贷款申请人和患者进行分类的相同问题。
朴素贝叶斯是最直接、最快速的分类算法,适用于大量数据。 朴素贝叶斯分类器成功地用于各种应用,例如垃圾邮件过滤、文本分类、 情感 分析和推荐系统。 它使用贝叶斯概率定理来预测未知类。
在本教程中,您将了解以下所有内容:
无论何时执行分类,第一步都是了解问题并识别潜在的特征和标签。 特征是影响标签结果的那些特征或属性。 例如,在贷款分配的情况下,银行经理确定客户的职业、收入、年龄、地点、以前的贷款 历史 、交易 历史 和信用评分。 这些特征被称为帮助模型对客户进行分类的特征。
分类有两个阶段,学习阶段和评估阶段。 在学习阶段,分类器在给定的数据集上训练其模型,在评估阶段,它测试分类器的性能。 性能是根据各种参数进行评估的,例如准确度、误差、精度和召回率。
2 什么是朴素贝叶斯分类器?
朴素贝叶斯是一种基于贝叶斯定理的统计分类技术。 它是最简单的监督学习算法之一。 朴素贝叶斯分类器是一种快速、准确和可靠的算法。 朴素贝叶斯分类器在大型数据集上具有很高的准确性和速度。
朴素贝叶斯分类器假设类中特定特征的效果独立于其他特征 。 例如,贷款申请人是否可取取决于他/她的收入、以前的贷款和交易 历史 、年龄和位置。 即使这些特征相互依赖,这些特征仍然被独立考虑 。 这个假设简化了计算,这就是为什么它被认为是“朴素”的。 这种假设称为类条件独立 。
此节涉及大量线性代数与概率的知识,对理论研究有高要求的读者可参考更专业的书籍,只关心如何应用的读者可以跳过此节。我也只关心应用,因此,咱们一起跳过此节吧。留个标题只为结构完整性。哈哈哈 希望数学老师原谅我
4 Scikit-learn 中的分类器构建
1)定义数据集
在此示例中,您可以使用具有三列的虚拟数据集:天气、温度和是否出去玩。 前两个是特征(天气、温度),另一个是标签。
2)编码特征
首先,您需要将这些字符串标签转换为数字。 例如:'Overcast', 'Rainy', 'Sunny' as 0, 1, 2。这称为标签编码。 Scikit-learn 提供了 LabelEncoder 库,用于对标签进行编码,其值在 0 到 1 之间,小于离散类的数量。
同样,您也可以对 temp 和 play 列进行编码。
现在将这两个特征(天气和温度)组合在一个变量(元组列表)中。
3)生成模型
在以下步骤中使用朴素贝叶斯分类器生成模型:
这里,1 表示玩家可以“出去玩”。
到目前为止,您已经学习了使用二进制标签的朴素贝叶斯分类。 现在您将了解朴素贝叶斯中的多类分类。 这被称为多项朴素贝叶斯分类。 例如,如果您想对有关技术、 娱乐 、政治或 体育 的新闻文章进行分类。
在模型构建部分,您可以使用葡萄酒数据集,这是一个非常著名的多类分类问题。 “这个数据集是对在意大利同一地区种植但来自三种不同品种的葡萄酒进行化学分析的结果。”
数据集包含 13 个特征(酒精、苹果酸、灰分、alcalinity_of_ash、镁、总酚、黄酮类化合物、非黄酮类酚、原花青素、颜色强度、色调、od280/od315_of_diluted_wines、脯氨酸)和葡萄酒品种类型。 该数据有3种酒类Class_0、Class_1和Class_3。 在这里,您可以建立一个模型来对葡萄酒的类型进行分类。
该数据集在 scikit-learn 库中可用。
1)加载数据
让我们首先从 scikit-learn 数据集中加载所需的 wine 数据集。
2) 探索 数据
您可以打印目标和特征名称,以确保您拥有正确的数据集,如下所示:
稍微 探索 一下您的数据总是不会错的,这样您就知道自己在处理什么。 在这里,您可以看到打印了数据集的前五行,以及整个数据集的目标变量。
3)拆分数据
首先,您将列分为因变量和自变量(或特征和标签)。 然后将这些变量拆分为训练集和测试集。
4)生成模型
拆分后,您将在训练集上生成一个随机森林模型,并对测试集特征进行预测。
5)评估模型
模型生成后,使用实际值和预测值检查准确性。
5 零概率问题
假设数据集中没有风险贷款的元组,在这种情况下,后验概率为零,模型无法做出预测。 这个问题被称为零概率,因为特定类的出现为零。
此类问题的解决方案是拉普拉斯校正(Laplacian correction)或拉普拉斯变换(Laplace Transformation)。 拉普拉斯校正是平滑技术之一。 在这里,您可以假设数据集足够大,每个类添加一行不会对估计的概率产生影响。 这将克服概率值为零的问题。
例如:假设对于有风险的类贷款,数据库中有 1000 个训练元组。 在这个数据库中,收入列有 0 个元组代表低收入,990 个元组代表中等收入,10 个元组代表高收入。 在没有拉普拉斯校正的情况下,这些事件的概率为 0、0.990(来自 990/1000)和 0.010(来自 10/1000)
现在,对给定的数据集应用拉普拉斯校正。 让我们为每个收入-价值对再添加 1 个元组。 这些事件的概率:
6 优点
在本教程中,您了解了朴素贝叶斯算法、它的工作原理、朴素贝叶斯假设、问题、实现、优点和缺点。 在此过程中,您还学习了 scikit-learn 中二元和多项类的模型构建和评估。
朴素贝叶斯是最直接和最有效的算法。 尽管机器学习在过去几年取得了重大进展,但它已经证明了它的价值。 它已成功部署在从文本分析到推荐引擎的许多应用程序中。
1、背景
《机器学习实战》当中,用python根据贝叶斯公式实现了基本的分类算法。现在来看看用sklearn,如何实现。还拿之前的例子,对帖子的分类。数据如下:
补充:题目的值左边是几个人的评论,右边是评论属于侮辱类(1)、正常类(0),需要进行文本分类,且再有新的文本过来时能自动划分至0或1。
2、分类
(1)算法的准备
通过查看sklearn的训练模型函数,fit(X, Y),发现只需要准备两个参数。一个是数据的矩阵,另一个是数据的分类数组。首先就是将以上的文本转化成矩阵。
在前一章其实已经讲解过如何将文本转化成矩阵。这里将示意的再补充下。
a.首先选取所有的单词,形成列,也可理解为属性。例如:
b.其次将遍历每个文本,填满上述列的值。文本出现过列的次,填一。没有出现过填0。比如第一句就是:my dog has flea problems help please,可表示为:
同理所有的文本都可如此表示,所以就形成了一个数字的矩阵。
(2)beyes模型的选择
在完成数据的准备以后,就可以直接调用sklearn的模型和函数完成模型的训练啦。但在beyes模型的选择的时候发现,beyes下有多个模型可选择,所以这个会让人纠结。接下来共同了解下这些模型:
a.高斯模型(GaussianNB)
高斯模型是对于每个属性的值是连续的,且服从高斯分布时可使用:
比如人的身高,比如花的高度等等。当然你也可将这些数据离散化,比如按等距划分、等频划分成离散的值,但可能效果都没有直接用高斯模型来计算的好。
用法:class sklearn.naive_bayes.GaussianNB
参数:无
b.多项式模型(MultinominalNB)
如果大部分是多元离散值,则采用多项式模型要好些。多项式模型,通常就是构造参数向量,然后通过极大似然估计来寻求参数的最有值。
这里只简单的略列一些公式,具体可查询更多资料。从这个计算过程中可得出,这里引入啦一个平滑先验值alpha,这个值在模型训练的时候也会用到。通常alpha0,可引入不在训练集的特征,尤其当alpha=1,成为拉普拉丝平滑。具体alpha取值对模型的影响可附件的图。
用法:class sklearn.naive_bayes.MultinomialNB(alpha=1.0,fit_prior=True,class_prior=None)
参数:
alpha:浮点数,就是上述说的引入平滑的值;
fit_prior:bool值,如果为Ture,则不用去学习P(y=ck),以均匀分布替代,否则则去学习P(y=ck)(不懂)
class_prior:一个数组。它指定了每个分类的先验概率P(y=c1),P(y=c2)…..,若指定了该参数
则每个分类的先验概率无需学习 (不懂)
c.伯努利模型(BernoulliNB)
如果特征值为二元离散值或是稀疏的多元离散值,则可采用伯努利模型。
公式:class sklearn.naive_bayes.BernoulliNB(alpha=1.0,binarize=0.0,fit_prior=Ture,
class_prior=None)
参数:
binarize:一个浮点数或者None,如果为浮点数则以该数值为界,特征值大于它的取1,小于的为0 。如果为None,假定原始数据已经二值化
其它参数同上。
通过以上的模型对比和分析,由于文本分析转化后是很多二项取值的稀疏矩阵,因此选取伯努利模型效果会更佳。
补充:alpha、binarize值对模型效果的影响
1、贝叶斯公式的本质: u由因到果,由果推因/u
2、贝叶斯公式:
[图片上传中...(wps6.png-5fd624-1618488341725-0)]
1、朴素贝叶斯公式
x1,x2,...xn为特征集合,y为分类结果
朴素贝叶斯假设各个特征之间相互独立
分母相同情况下,我们只要保证分子最大
训练数据集
long,not_long,sweet,not_sweet,yellow,not_yellow,species
400,100,350,150,450,50,banana
0,300,150,150,300,0,orange
100,100,150,50,50,150,other_fruit
测试数据集
long,sweet,yellow
not_long,not_sweet,not_yellow
not_long,sweet,not_yellow
not_long,sweet,yellow
not_long,sweet,yellow
not_long,not_sweet,not_yellow
long,not_sweet,not_yellow
long,not_sweet,not_yellow
long,not_sweet,not_yellow
long,not_sweet,not_yellow
long,not_sweet,yellow
not_long,not_sweet,yellow
not_long,not_sweet,yellow
long,not_sweet,not_yellow
not_long,not_sweet,yellow
结果
特征值:[not_long, not_sweet, not_yellow]
预测结果:{'banana': 0.003, 'orange': 0.0, 'other_fruit': 0.018750000000000003}
水果类别:other_fruit
特征值:[not_long, sweet, not_yellow]
预测结果:{'banana': 0.006999999999999999, 'orange': 0.0, 'other_fruit': 0.05625000000000001}
水果类别:other_fruit
特征值:[not_long, sweet, yellow]
预测结果:{'banana': 0.063, 'orange': 0.15, 'other_fruit': 0.018750000000000003}
水果类别:orange
特征值:[not_long, sweet, yellow]
预测结果:{'banana': 0.063, 'orange': 0.15, 'other_fruit': 0.018750000000000003}
水果类别:orange
特征值:[not_long, not_sweet, not_yellow]
预测结果:{'banana': 0.003, 'orange': 0.0, 'other_fruit': 0.018750000000000003}
水果类别:other_fruit
特征值:[long, not_sweet, not_yellow]
预测结果:{'banana': 0.012, 'orange': 0.0, 'other_fruit': 0.018750000000000003}
水果类别:other_fruit
特征值:[long, not_sweet, not_yellow]
预测结果:{'banana': 0.012, 'orange': 0.0, 'other_fruit': 0.018750000000000003}
水果类别:other_fruit
特征值:[long, not_sweet, not_yellow]
预测结果:{'banana': 0.012, 'orange': 0.0, 'other_fruit': 0.018750000000000003}
水果类别:other_fruit
特征值:[long, not_sweet, not_yellow]
预测结果:{'banana': 0.012, 'orange': 0.0, 'other_fruit': 0.018750000000000003}
水果类别:other_fruit
特征值:[long, not_sweet, yellow]
预测结果:{'banana': 0.108, 'orange': 0.0, 'other_fruit': 0.00625}
水果类别:banana
特征值:[not_long, not_sweet, yellow]
预测结果:{'banana': 0.027, 'orange': 0.15, 'other_fruit': 0.00625}
水果类别:orange
特征值:[not_long, not_sweet, yellow]
预测结果:{'banana': 0.027, 'orange': 0.15, 'other_fruit': 0.00625}
水果类别:orange
特征值:[long, not_sweet, not_yellow]
预测结果:{'banana': 0.012, 'orange': 0.0, 'other_fruit': 0.018750000000000003}
水果类别:other_fruit
特征值:[not_long, not_sweet, yellow]
预测结果:{'banana': 0.027, 'orange': 0.15, 'other_fruit': 0.00625}
水果类别:orange
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流