朴素贝叶斯算法(Naive Bayesian algorithm) 是应用最为广泛的分类算法之一。
贝叶斯定理是关于随机事件A和B的条件概率(或边缘概率)的一则定理。其中P(A|B)是在B发生的情况下A发生的可能性。
贝叶斯公式(发表于1763年):
贝叶斯分类器的分类原理是通过某对象的先验概率,利用贝叶斯公式计算出其在所有类别上的后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类。
打个通俗点的比方,我们知道非洲有很多黑人,即已知非洲人为黑人的先验概率比较高,如果我们在街上碰到个黑人,我们判断他可能来自哪里,比如我们认为他来自非洲的可能性比较大,即选取最大后验概率的类(来自非洲)作为我们的判断。
贝叶斯分类原理要求各个特征属性之间是独立的,不能互相影响,但在实际生活中,事物的各个特征属性往往是有联系的。朴素贝叶斯假定各个特征属性是独立的来进行分类研究,这就是“朴素”两字的含义。
朴素贝叶斯在scikit-learn中的实现类是GaussianNB
下面我们用鸢尾花数据集做一下朴素贝叶斯分类训练吧
#导入所需库
import numpy as np
from sklearn.naive_bayes import BernoulliNB, GaussianNB
from pandas import read_csv
#导入鸢尾花集数据
filename = 'data/iris/iris.data.csv'
names = ['separ-length','separ-width','petal-length','petal-width','class']
dataset = read_csv(filename, names=names)
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
#分离数据集
array = dataset.values
X = array[:,0:4]
Y = array[:,4]
validation_size = 0.2
X_train,X_validation,Y_train,Y_validation = \
train_test_split(X, Y, test_size=validation_size)
#定义模型
model = GaussianNB()
model.fit(X_train, Y_train)
#训练模型
model.fit(X, Y)
#输出预测结果
print(X[55:56])
print(model.predict(X[55:56]))#必须以区间取值的方式,[4:5] 其实就是取 4 这个值
打印结果如下:
PS C:\coding\machinelearning>朴素贝叶斯-鸢尾花分类.py
[[5.7 2.8 4.5 1.3]]
['Iris-versicolor']
PS C:\coding\machinelearning>