朴素贝叶斯基础【机器学习算法一朴素贝叶斯1】

it2022-05-05  127

基础知识回顾

(上述内容引自李航《统计学习方法》)

过去的7天当中,有3天下雨,4天没有下雨。用0代表灭有下雨,而1代表下雨,我们可以用一个数组来表示: y=[0,1,1,0,1,0,0] 而在这7天当中,还有另外一些信息,包括刮北风,闷热,多云,以及天气预报给出的信息,如下表: 用0代表否,1代表是,可得到如下数组。 [[0, 1, 0, 1], [1, 1, 1, 0], [0, 1, 1, 0], [0, 0, 0, 1], [0, 1, 1, 0], [0, 1, 0, 1], [1, 0, 0, 1]]

知识插曲(懂的可略过此部分)


对于一维数组或者列表,unique函数去除其中重复的元素,并按元素由大到小返回一个新的无重复元素的元组或者列表。参看如下代码,可知 sum(axis=0) 和 sum(axis=1) 用法不同,sum(axis=0)用于计算数组中各元素对应项之和,计算完之后去掉最外层[];sum(axis=1)用于计算数组中各元素内部和,去掉内层[]保留最外层[]。


朴素贝叶斯实例

运行如下代码。

import numpy as np X=np.array([[0, 1, 0, 1], [1, 1, 1, 0], [0, 1, 1, 0], [0, 0, 0, 1], [0, 1, 1, 0], [0, 1, 0, 1], [1, 0, 0, 1]]) y=np.array([0,1,1,0,1,0,0]) counts={} for label in np.unique(y): counts[label]=X[y==label].sum(axis=0) print("feature counts:\n{}".format(counts))

下面解释一下这个结果的意思,当y=0时,也就在没有下雨的4天当中,有1天刮了北风,有2天比较闷热,而没有出现多云的情况,但这4天天气预报全部播放有雨。同时,在y=1时,也就是在下雨的3天当中,有1天刮了北风,3天全都比较闷热,且3天全部出现了多云的现象,有意思的是,这3天的天气预报都没有播报有雨。 那么对于朴素贝叶斯来说,它会根据上述的计算来进行推理。它会认为,如果某一天天气预报没有播报有雨,但出现了多云的情况,它会倾向于把这一天放到"下雨"这个分类中。

#导入贝努力贝叶斯 from sklearn.naive_bayes import BernoulliNB clf=BernoulliNB() clf.fit(X,y) #预测新的一天[无北风,不闷热,多云,预报没说有雨] Next_Day = [[0, 0, 1, 0]] pre=clf.predict(Next_Day) if pre == [1]: print("要下雨啦,快收衣服啊!") else: print("放心,又是一个艳阳天")

朴素贝叶斯分类器把这一天放到会下雨的分类中。

#导入贝努力贝叶斯 from sklearn.naive_bayes import BernoulliNB clf=BernoulliNB() clf.fit(X,y) #预测新的一天[北风,闷热,不是多云,预报说有雨] Next_Day = [[1, 1, 0, 1]] pre=clf.predict(Next_Day) if pre == [1]: print("要下雨啦,快收衣服啊!") else: print("放心,又是一个艳阳天")

朴素贝叶斯分类器把这一天放到不会下雨的分类中。

使用如下语句测试预测准确率。

print(clf.predict_proba(Next_Day))

第一天[无北风,不闷热,多云,预报没说有雨],不下雨的概率和下雨的概率如下。 第二天[北风,闷热,不是多云,预报说有雨],不下雨的概率和下雨的概率如下。


最新回复(0)