莺尾花数据集–贝叶斯分类
Step1: 库函数导入
import warnings
warnings. filterwarnings ( 'ignore' )
import numpy as np
#加载鸢尾花数据集
from sklearn import datasets
# 导入高斯朴素贝叶斯分类器
from sklearn. naive_bayes import GaussianNB
from sklearn. model_selection import train_test_split
Step2: 数据导入&分析
参数:
return_X_y : 布尔值,默认为False,如果是True的话,返回(data, target)代替Bunch对象.
返回值:
Bunch对象.类似于字典的对象.其中的属性有:‘data’, the data to learn, ‘target’, the regression targets, and ‘DESCR’, the full description of the dataset.
或者是(data, target) :当return_X_y设为True的时候.
X , y = datasets. load_iris ( return_X_y= True)
X_train, X_test, y_train, y_test = train_test_split ( X , y, test_size= 0.2 , random_state= 0 )
Step3: 模型训练
# 使用高斯朴素贝叶斯进行计算
clf = GaussianNB ( var_smoothing= 1e-8 )
clf. fit ( X_train, y_train)
GaussianNB(var_smoothing=1e-08)
Step4: 模型预测
#评估
y_pred = clf. predict ( X_test)
acc = np. sum ( y_test == y_pred) / X_test. shape[ 0 ]
print ( "Test Acc:%.3f" % acc)
Test Acc:0.967
#预测
y_proba = clf. predict_proba ( X_test[ : 1 ] )
print ( clf. predict ( X_test[ : 1 ] ) )
print ( "预计的概率值:" , y_proba)
[2]
预计的概率值: [[1.63542393e-232 2.18880483e-006 9.99997811e-001]]
Step5: 原理简析
高斯朴素贝叶斯假设每个特征都服从高斯分布,我们把一个随机变量X服从数学期望为μ,方差为σ^2的数据分布称为高斯分布。
对于每个特征我们一般使用平均值来估计μ和使用所有特征的方差估计σ^2。
从上述例子中的预测结果中,我们可以看到类别2对应的后验概率值最大,所以我们认为类目2是最优的结果。
模拟离散数据集–贝叶斯分类
Step1: 库函数导入
import random
import numpy as np
from sklearn. naive_bayes import CategoricalNB
from sklearn. model_selection import train_test_split
Step2: 数据导入&分析
# 模拟数据
rng = np. random. RandomState ( 1 )
# 随机生成600 个100 维的数据,每一维的特征都是[ 0 , 4 ] 之前的整数
X = rng. randint ( 5 , size= ( 600 , 100 ) )
y = np. array ( [ 1 , 2 , 3 , 4 , 5 , 6 ] * 100 )
data = np. c_[ X , y]
# X 和y进行整体打散
random. shuffle ( data)
X = data[ : , : - 1 ]
y = data[ : , - 1 ]
X_train, X_test, y_train, y_test = train_test_split ( X , y, test_size= 0.2 , random_state= 0 )
Step3: 模型训练&预测
clf = CategoricalNB ( alpha= 1 )
clf. fit ( X_train, y_train)
acc = clf. score ( X_test, y_test)
print ( "Test Acc : %.3f" % acc)
Test Acc : 0.658
# 随机数据测试,分析预测结果,贝叶斯会选择概率最大的预测结果
# 比如这里的预测结果是6 ,6 对应的概率最大,由于我们是随机数据
# 读者运行的时候,可能会出现不一样的结果。
x = rng. randint ( 5 , size= ( 1 , 100 ) )
print ( clf. predict_proba ( x) )
print ( clf. predict ( x) )
[[8.18868410e-04 6.83934583e-04 6.75208373e-03 2.16419028e-02
3.11220647e-02 9.38981146e-01]]
[6]