机器学习之朴素贝叶斯算法+应用实例

  1. ** 基本原理:**

朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法,朴素贝叶斯分类器有着坚实的数学基础与稳定的分类效率,而且所需估计的参数很少,对缺失数据不太敏感。理论上,朴素贝叶斯分类器模型与其他分类方法相比具有最小的误差率。
朴素贝叶斯中的朴素是认为各个特征或者属性条件之间相互独立,这种假设在实际中有时并不成立,因此分类并不稳定,贝叶斯代表根据贝叶斯定理构建分类模型

贝叶斯算法:
P(A|B)=P(B|A)*P(A)/P(B)
P(B) 为先验概率 P(B|A)为相对于B的条件概率 P(B)为B生成的概率

  1. python中 scikit-learn库的使用
    在Scikit-learn库中,根据特征的先验概率模型分为GaussianNB(先验为高斯分布)、MultinomialNB(先验为多项式分布)与BernoulliNB(先验为伯努利分布)等3个朴素贝叶斯分类算法类。
    如果样本特征分布大部分是连续值,使用GaussianNB较好;
    如果样本特征分布大部分是多元离散值,使用MultinomialNB较为合适;
    如果样本特征是二元离散值或者很稀疏的多元离散值,应该使用BernoulliNB。

  2. 以GaussianNB为例构建朴素贝叶斯模型
    导入 GaussianNB字库:
    from sklearn.naive_bayes import GaussianNB
    构建朴素贝叶斯分类器对象:
    nb = GaussianNB()
    nb.fit(x,y):根据样本x与类别标识y对数据进行拟合。
    nb. predict(x):输出测试集x的预测类别。
    nb. predict_proba(x):输出测试集x在各个类别上预测概率。

  3. 应用实例:根据天气情况预测是否适合打网球的概率

from sklearn.naive_bayes import GaussianNB 
import numpy as np

# 天气晴为1,多云为2,雨为3
# 气温热为1 适中为2 冷为3
# 有风为1 无风为0
# [天气,气温,是否有风]
X = np.array([[1,1,1],[2,1,0],[3,2,0],[3,3,0],[3,3,1],
              [2,3,1],[1,2,0],[1,3,0],[3,2,0],[1,2,1],[2,2,1],[2,1,0],[3,2,1],[1,1,0]])
# 适合打网球为1 不适合为0 
Y = np.array([1,1,0,0,0
              ,0,1,0,0,1,1,1,0,1])


model = GaussianNB() # 构建模型
model.fit(X,Y) # 拟合数据

x_text=np.array([[1,2,0],[1,1,0]])
ptedict = model.predict(x_text) # 预测测试数据否适合打网球
print(ptedict) #输出为[1 1]

proba= model.predict_proba([[1,2,0]]) #适合打网球的概率
print(proba)   #[[0.08798276 0.91201724]] 不适合打网球的概率为0.08798276 适合打网球的概率为0.91201724

你可能感兴趣的:(python,机器学习,机器学习,算法,分类)