朴素贝叶斯法(Naive Bayes model 简称 NBM )是基于「贝叶斯定理」与「特征条件独立假设」的分类方法。
「贝叶斯定理」:也叫贝叶斯公式,用来描述两个「条件概率」之间的关系。比如你看到一个人总是做好事,那这个人多半会是一个好人。
「特征条件独立假设」:为了解决「参数」成指数增长过多的问题,朴素贝叶斯在贝叶斯定理的基础上,假设特征的条件都是「相互独立」的。
1、朴素贝叶斯API
「多项式」模型的朴素贝叶斯分类器,用于具有「离散」特征的分类,比如文本分类的单词计数,需要整数特征计数。
sklearn.naive_bayes.MultinomialNB()
参数
- alpha :(可选,浮点型)平滑参数,默认值为 1.0
- force_alpha :(可选,布尔类型)默认值 False,如果为False且alpha小于1e-10,就将alpha设置为1e-10;如果为True,aplha保持不变;这是为了防止alpha太接近0而导致数值误差
- fit_prior :(可选,布尔类型)是否学习先验概率,默认值 True,如果为False,就使用统一先验。
函数
- MultinomialNB.fit( x_train,y_train ):接收训练集特征 和 训练集目标
- MultinomialNB.predict( x_test ):接收测试集特征,返回数据的类标签
- MultinomialNB.score(x_test, y_test):接收测试集特征 和 测试集目标,返回准确率。
- MultinomialNB.get_params():获取接收的参数(alpha、fit_prior这种参数)
- MultinomialNB.set_params():设置参数
- MultinomialNB.partial_fit():增量测试,用于数据量太大不能一次装入内存的情况,
2、朴素贝叶斯算法实际应用
2.1、获取数据集
这里我们使用sklearn自带的「鸢尾花」数据集。
from sklearn import datasets
# 1、获取数据集
iris = datasets.load_iris()
print(iris.data)
输出:
[[5.1 3.5 1.4 0.2]
[4.9 3. 1.4 0.2]
......
[5.9 3. 5.1 1.8]]
2.2、划分数据集
接下来,我们对数据集进行「划分」,传入特征值和目标值,按照默认比例划分(25%测试集、75%训练集)
from sklearn import datasets
from sklearn import model_selection
# 1、获取数据集
iris = datasets.load_iris()
# 2、划分数据集
x_train, x_test, y_train, y_test = model_selection.train_test_split(iris.data, iris.target)
print('训练集特征值:', len(x_train))
print('测试集特征值:', len(x_test))
print('训练集目标值:', len(y_train))
print('测试集目标值:', len(y_test))
输出:
训练集特征值: 112
测试集特征值: 38
训练集目标值: 112
测试集目标值: 38
从结果可以看到,训练集划分了112组、测试集划分了38组,符合预期。
2.3、特征归一化
接下来,我们对特征值进行「归一化」处理,需要注意的是,训练集和测试集的处理必须完全相同。
from sklearn import datasets
from sklearn import model_selection
from sklearn import preprocessing
# 1、获取数据集
iris = datasets.load_iris()
# 2、划分数据集
x_train, x_test, y_train, y_test = model_selection.train_test_split(iris.data, iris.target)
# 3、特征归一化
mm = preprocessing.MinMaxScaler()
x_train = mm.fit_transform(x_train)
x_test = mm.fit_transform(x_test)
print(x_train)
print(x_test)
输出:
[[0.8 0.5 0.87719298 0.70833333]
[0.42857143 0.5 0.66666667 0.70833333]
......
从结果我们可以看到,特征值发生了相应的变化。
2.4、贝叶斯算法处理并评估
接下来,实例化贝叶斯的类对象,把训练集的特征值目标值传进去,进行训练。
from sklearn import datasets
from sklearn import model_selection
from sklearn import preprocessing
from sklearn import naive_bayes
# 1、获取数据集
iris = datasets.load_iris()
# 2、划分数据集
x_train, x_test, y_train, y_test = model_selection.train_test_split(iris.data, iris.target)
# 3、特征归一化
mm = preprocessing.MinMaxScaler()
x_train = mm.fit_transform(x_train)
x_test = mm.fit_transform(x_test)
# 4、贝叶斯算法处理
estimator = naive_bayes.MultinomialNB()
estimator.fit(x_train, y_train)
# 5、模型评估
y_predict = estimator.predict(x_test)