笔者邀请您,先思考:
1 您怎么理解朴素贝叶斯法?
2 朴素贝叶斯法的优劣是什么?
朴素贝叶斯算法
朴素贝叶斯是一种简单但是非常强大的线性分类器,它在垃圾邮件分类,疾病诊断中都取得了很大的成功。
它只所以称为朴素,是因为它假设特征之间是相互独立的
朴素贝叶斯的数学原理
1.后验概率(Posterior Probabilities):
为了更好地了解朴素贝叶斯分类器是怎么工作的,了解贝叶斯法则是很必要的。它可以被简单地描述成下面的公式:
后验概率=(条件概率∗先验概率现象概率)/(现象概率)
举一个简单的例子说明:
P(给定天上有乌云,下雨的概率)=(P(给定天上下雨,有乌云的概率)∗P(下雨的概率))/P(有乌云的概率)
ωj表示属于哪个类别,j∈{1,2,3,…,m}
xi表示特征向量中的第i个特征,i∈{1,2,3,…,n}
朴素贝叶斯的目标就是分别求得P(ωj|给定现象)j∈{1,2,3,…,m},选出最大的概率。
朴素贝叶斯分类是将实例分到后验概率最大的类中。这等价于期望风险最小化。这就是朴素贝叶斯法所采用的原理。
条件概率公式:
实战代码
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
from sklearn import datasets
from sklearn import cross_validation
def load_data():
iris = datasets.load_iris()
return cross_validation.train_test_split(iris.data,iris.target,test_size=0.25,random_state=0)
def test_naive_bayes(*data):
# 模型初始化
X_train,X_test,Y_train,Y_test=data
clf = GaussianNB()
clf.fit(X_train, Y_train)
# 预测结果
Y_prict = clf.predict(X_test)
# 计算准确率
cnt = 0
for i in range(len(Y_test)):
if Y_prict[i] - Y_test[i] < 1e-1:
cnt += 1
# print(ans[i], ' ', y_test[i])
print("Accuracy: ", (cnt * 100.0 / len(Y_test)), "%")
print('Score:%f'%clf.score(X_test,Y_test))
if __name__=='__main__':
X_train,X_test,Y_train,Y_test=load_data()
test_naive_bayes(X_train,X_test,Y_train,Y_test)
Accuracy: 100.0 % Score:1.000000
文章推荐:
1 LDA算法及应用 2 word2vec与doc2vec模型