仅供自己复习回顾使用,若有侵权可删除
贝叶斯应该是学统计的人最初接触并贯穿整个学习的概念了
优点
- 方法直观
- 对于小样本量的数据也能起作用
- 进行训练和预测的计算成本低
- 对于各种不同的参数设置总能得到稳定的结果
第一,对于数据的每个特征,必须假定它的似然概率 P(x j | y) 的统计学分布
第二,朴素贝叶斯得名于一个假设——每个特征和它的似然概率是相互独立的
from sklearn import datasets
from sklearn.naive_bayes import GaussianNB
iris = datasets.load_iris()
features = iris.data
target = iris.target
# 创建高斯朴素贝叶斯对象
classifer = GaussianNB()
model = classifer.fit(features, target)
new_observation = [[ 4, 4, 4, 0.4]]
model.predict(new_observation)
# 给定每个分类的先验概率,创建一个高斯朴素贝叶斯对象
clf = GaussianNB(priors=[0.25, 0.25, 0.5])
# 训练模型
model = classifer.fit(features, target)
为离散数据和计数数据训练分类器
多用于文本处理
import numpy as np
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import CountVectorizer
# 创建文本
text_data = np.array(['I love Brazil. Brazil!',
'Brazil is best',
'Germany beats both'])
# 创建词袋
count = CountVectorizer()
bag_of_words = count.fit_transform(text_data)
# 创建特征矩阵
features = bag_of_words.toarray()
# 创建目标向量
target = np.array([0,0,1])
# 给定每个分类的先验概率,创建一个多项式朴素贝叶斯对象
classifer = MultinomialNB(class_prior=[0.25, 0.5])
#如果没有指定 class_prior 的值,会从数据中学习而得到先验概率
#如果想要用均匀分布计算先验概率的话,可以设置 fit_prior=False
#MultinomialNB 含有一个附加的平滑超参数 alpha, 它需要被调校。它的默认值是
#1.0,设置为 0.0 就意味着不做平滑
# 训练模型
model = classifer.fit(features, target)
# 创建一个观察值
new_observation = [[0, 0, 0, 1, 0, 1, 0]]
# 预测新观察值的分类
model.predict(new_observation)
为具有二元特征的数据训练朴素贝叶斯分类器
import numpy as np
from sklearn.naive_bayes import BernoulliNB
# 创建三个二元特征
features = np.random.randint(2, size=(100, 3))
# 创建一个二元目标向量
target = np.random.randint(2, size=(100, 1)).ravel()
# 给定每个分类的先验概率,创建一个多项式伯努利朴素贝叶斯对象
classifer = BernoulliNB(class_prior=[0.25, 0.5])
# 训练模型
model = classifer.fit(features, target)
#model_uniform_prior = BernoulliNB(class_prior=None, fit_prior=False)
校准预测概率
创建经由 k 折交叉验证调校过的预测概率
from sklearn import datasets
from sklearn.naive_bayes import GaussianNB
from sklearn.calibration import CalibratedClassifierCV
# 加载数据
iris = datasets.load_iris()
features = iris.data
target = iris.target
# 创建高斯朴素贝叶斯对象
classifer = GaussianNB()
# 创建使用 sigmoid 校准调校过的交叉验证模型
classifer_sigmoid = CalibratedClassifierCV(classifer, cv=2, method='sigmoid')
'''
Platt sigmoid 模型和保序回归,可以通过 method 参数来设置
保序回归是无参的,在样本量很小的情况下(比如,只有 100 个观察值),它往往会过拟合
'''
# 校准概率
classifer_sigmoid.fit(features, target)
# 创建新的观察值
new_observation = [[ 2.6, 2.6, 2.6, 0.4]]
# 查看校准过的概率
classifer_sigmoid.predict_proba(new_observation)
# 训练一个高斯朴素贝叶斯分类器来预测观察值的分类概率
classifer.fit(features, target).predict_proba(new_observation)
# 查看校准过的概率
classifer_sigmoid.predict_proba(new_observation)