伯努利贝叶斯分类算法

贝叶斯分类的核心概念:

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

下面介绍伯努利贝叶斯算法

伯努利贝叶斯分类算法:
在日常生活及工作中,有非常多的特征变量是符合伯努利分布的,例如扔硬币,其得到男性结果不是正面就是反面;又如性别,不是男性就是女性。

伯努利分布(Bernoulli Distribution):
归努利分布又称为二项分布,它是一种离散分布,有两种互斥的结果,分布规律如下:

P = { 1 − p , n = 0 p , n = 1 P = \begin{cases} 1-p, & n=0\\ p, & n = 1 \end{cases} P={1p,p,n=0n=1
n = 1 表示成功,出现的概率为p。
n = 0 表示失败,出现的概率为1-p。

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

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

示例数据:
伯努利贝叶斯分类算法_第1张图片

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()

转化数据为:
伯努利贝叶斯分类算法_第2张图片
因为独热编码后,样本的特征数量会变得异常庞大,所以一般采用简单的数据集。

伯努利贝叶斯算法实现:
示例数据:
伯努利贝叶斯分类算法_第3张图片
这里,第三列,第四列一直到最后一列都是特征,第二列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_得到

执行代码:
在这里插入图片描述
可以看到,模型预测能力非常不错。

你可能感兴趣的:(python,机器学习,数据挖掘)