常见的十大机器学习算法:
机器学习算法(一)—决策树
机器学习算法(二)—支持向量机SVM
机器学习算法(三)—K近邻
机器学习算法(四)—集成算法
机器学习算法(五)—聚类
机器学习算法(六)—逻辑回归
机器学习算法(七)—Apriori 关联分析
机器学习算法(八)—朴素贝叶斯
九种降维方法汇总
一、前序
正向概率:假设袋子里面有N个白球,M个黑球,你伸手进去摸一把摸出黑球的概率是多大
逆向概率:如果我们事先并不知道袋子里面黑白球的比例,而是闭着眼睛摸出一个(或好几个)球,观察这些取出来的球的颜色之后,那么我们可以就此对袋子里面的黑白球的比例作出什么样的推测。贝叶斯方法就是解决“逆向概率”问题。
举例:学校男生60%,女生40%。男生总是穿长裤,女生则一半穿长裤一半穿裙子。
正向概率:随机选取一个学生,他(她)穿长裤的概率和穿裙子的概率是多大?
逆向概率:迎面走来一个穿长裤的学生,只看得见他(她)穿的是否长裤而无法确定他(她)的性别,推断出他(她)是女生的概率是多大吗?
问:穿长裤的人里面有多少女生。
设:学校里面人的总数是N
穿长裤的(男生):N*P(Boy)P(Pants|Boy);P(Pants|Boy)是条件概率,即在 Boy 这个条件下穿长裤的概率,这里是 100%,因为所有男生都穿长裤。
穿长裤的(女生):NP(Girl)P(Pants|Girl)
穿长裤总数:NP(Boy)P(Pants|Boy)+NP(Girl)*P(Pants|Girl)
解:P(Girl|Pants)= N* P(Girl)*P(Pants|Girl)/穿长裤总数
P(Girl|Pants)= N * P(Girl) * P(Pants|Girl) /[N * P(Boy)* P(Pants|Boy)+ N* P(Girl)* P(Pants|Girl)]
P(Girl|Pants)= P(Girl)* P(Pants|Girl)/[P(Boy)* P(Pants|Boy)+ P(Girl)* P(Pants|Girl)]
推出贝叶斯公式:P(A|B)=P(B|A)P(A)/P(B)
二、朴素贝叶斯法
概率加法规则
p(X):一个随机变量X的概率分布(边缘分布)
p(X,Y):两个随机变量的联合概率分布,随机变量Y的概率求和为1,演变可以使两者相等。
概率乘积规则
2.1 朴素贝叶斯分类
条件独立性假设
朴素贝叶斯模型基于特征条件独立性假设。也就是说,给定类别 y,各个特征之间是条件独立的。这使得联合概率可以分解为每个特征的条件概率的乘积:
x表示特征,Ck表示类别(朴素贝叶斯可以多分类)。
条件独立性假设含义:当分类类别被确定,用于分类的特征之间是条件独立的。
2.2 朴素贝叶斯参数估计
2.2.1 极大似然估计
求解 y=f(x) 的最大值,分两步,第一步求解上述公式中P(Y=Ck),第二步求解P(X=x(i)|Y=Ck)。
1、先验概率P(Y=Ck)的极大似然估计
- 离散属性
- 连续属性
2、设第 j 个特征的取值为{aji,aj2,aj3…ajs},条件概率的极大似然估计
2.2.2 贝叶斯估计
解决分母类别指标为0的现象。
1、条件概率的贝叶斯估计
2、先验概率的贝叶斯估计
三、案例
西瓜数据集
注意:若某个属性值在训练集中没有与某个类同时出现过,则直接进行概率估计,进行判别将出现问题,例如:敲声=清脆的测试集中有p(敲声=清脆|好瓜=是)=0/8=0,连乘式将计算概率值为0,因此,无论该样本其他属性是什么,哪怕在其他属性上明显是好瓜,分类的结果都将好瓜=否,显然不合理。因此常使用“拉普拉斯修正”。具体见2.2.2第一部分。
四、python代码
#朴素贝叶斯分类
from sklearn.naive_bayes import GaussianNB
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
iris=load_iris()
X,y=iris.data,iris.target
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2)
clf=GaussianNB().fit(X_train,y_train)
y_pred=clf.predict(X_test)
print("Gaussian Naive Bayes model accuracy(in %):",round(clf.score(X_test,y_test)*100,2))