伯努利贝叶斯分类算法

贝叶斯分类的核心概念:

我们对某件事情的判断首先有一个概率,这个概率称为先验概率。先验概率时根据经验总结出来的概率值,如果首先没有经验,那么可以将先验概率设置为50%,随着后面事情的发展,再调整先验概率,得到调整后的概率,这个调整后的概率称为后验概率,使用调整后的后验概率来替换先验祸率,则是对这件事情的新认知,这就是贝叶斯分类的基本思想。
贝叶斯分类是一类分类算法的总称,包括高斯贝叶斯分类算法、伯努利贝叶斯分类算法和多项式贝叶斯新分类算法。这种算法是基于贝叶斯定理的,所以统称为贝叶斯分类。

这是伯努利贝叶斯算法

伯努利贝叶斯分类算法:
在日常生活和工作中,有很多符合伯努利分布的特征变量,比如掷硬币,结果是男的要么是正面,要么是反面;另一个例子是性别,男性或女性。

伯努利分布(Bernoulli Distribution):
归一化 Nouri 分布,也称为二项分布,是具有两个互斥结果的离散分布。分配规则如下:

P%20%3D%20%5Cbegin%7Bcases%7D%201-p%2C%20%26%20n%3D0%5C%5C%20p%2C%20%26%20n%20%3D%201%20%5Cend%7Bcases%7D
n = 1 表示成功,出现的概率为p。
n = 0 表示失败,出现的概率为1-p。

当特征变量的数据类型是0或1 这种二值化特征值的时候,就适合使用伯努利贝叶斯分类算法。在日常工作中,因为 sklearn只支持连续型数据的计算,所以我们需要通过独热编码,把离散型的特征转换为二值化的特征。

独热编码(One Hot Encoding ):
one-hot encoding的过程很简单,例如有两列特征变量,性别和颜色。 One-hot encoding首先对两列数据进行去重,然后对它们进行编码,得到编码后的序列值。然后根据编码位置,指定转换规则表,最后根据转换规则表将数据转换为one-hot编码。

样本数据:
伯努利贝叶斯分类算法

import pandas as pd 
from sklearn.preprocessing import OneHotEncoder
#导入数据
data = pd.read_csv(
'D:\example_csv\LabelEncoder.csv',
encoding = 'ANSI')

onehotencoder = OneHotEncoder()
#新建独热编码器
onehotencoder.fit(data)
#训练独热编码器,得到转换规则
onehotData = onehotencoder.transform(data)
#转换数据
onehotData.toarray()

转换数据为:
伯努利贝叶斯分类算法
由于 one-hot 编码后样本的特征数量会变得非常大,所以一般使用简单的数据集。

伯努利贝叶斯算法实现:
样本数据:
伯努利贝叶斯分类算法
这里,第三列,第四列一直到最后一列都是特征,第二列Party是预测数据。

import pandas as pd 
data = pd.read_csv(
'D:\example_csv\议案投票.csv')
data = data.fillna('none')
#填充缺失值,把所有空缺列填充为字符串None

特征变量:

features = [
    'Campaign Finance Overhaul',
    'Campaign Finance Overhaul',	
    'Campaign Finance Overhaul',	
    'Campaign Finance Overhaul',	
    'Campaign Finance Overhaul',
    'Campaign Finance Overhaul',	
    'Campaign Finance Overhaul',	
    'Campaign Finance Overhaul',	
    'Campaign Finance Overhaul',	
    'Campaign Finance Overhaul',	
    'Campaign Finance Overhaul',	
    'Campaign Finance Overhaul',	
    'Campaign Finance Overhaul',	
    'Campaign Finance Overhaul',	
    'Campaign Finance Overhaul',	
    'Campaign Finance Overhaul',	
    'Campaign Finance Overhaul',	
    'Campaign Finance Overhaul',	
    'Campaign Finance Overhaul',	
    'Campaign Finance Overhaul'
]

使用sklearn:

from sklearn.preprocessing import OneHotEncoder
from sklearn.naive_bayes import BernoulliNB
from sklearn.model_selection import cross_val_score

oneHotEncoder = OneHotEncoder()
#新建独热编辑器
oneHotEncoder.fit(data[features])
#训练独热编辑器,得到转换规则
oneHotData = oneHotEncoder.transform(data[features])
#转换数据
BNBmodel = BernoulliNB()
#伯努利贝叶斯
cvs = cross_val_score(
BNBmodel,oneHotData,data['Party'],cv = 10)
#进行K折交叉验证
cvs.mean()

运行代码:
伯努利贝叶斯分类算法
在10折交叉验证中,伯努利贝叶斯模型得了0.88分,结果挺不错。

计算模型的混淆矩阵,观察模型的预测能力:

from sklearn.metrics import confusion_matrix

BNBmodel.fit(oneHotData,data['Party'])
#使用所有数据训练模型
data['predict Party'] = BNBmodel.predict(oneHotData)
#对所有数据进行预测
confusion_matrix(
data['Party'],
data['predict Party'
labels =['D','R']
)
#计算混淆矩阵,labels参数可由BNBmodel,classes_得到

执行代码:
伯努利贝叶斯分类算法
可以看到,模型预测能力非常好。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2022年3月23日 上午10:34
下一篇 2022年3月23日 上午10:49

相关推荐