机器学习笔记--朴素贝叶斯

1、贝叶斯方法

  1. 几个概念

(1)先验概率:根据以往经验和分析得到的概率。我们用 P ( Y ) P(Y) P(Y) 来代表在没有训练数据前假设 Y Y Y 拥有的初始概率。

(2)后验概率:根据已经发生的事件来分析得到的概率。以 P ( Y ∣ X ) P(Y|X) P(YX) 表假设 X X X 成立的情下观察到 Y Y Y 数据的概率,因为它反映了在看到训练数据 X X X Y Y Y 成立的置信度。

(3)联合概率:联合概率是指在多元的概率分布中多个随机变量分别满足各自条件的概率。 X X X Y Y Y 的联合概率表示为 P ( X Y ) P(XY) P(XY)

  1. 贝叶斯公式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W3Df5glS-1691546488729)(https://note.youdao.com/yws/res/2963/F0D4132C40F94189B48C75A1C379588F)]

2、贝叶斯原理

1.朴素贝叶斯法是典型的生成学习方法。生成方法由训练数据学习联合概率分布 P ( X , Y ) P(X,Y) P(X,Y),然后求得后验概率分布 P ( Y ∣ X ) P(Y|X) P(YX) 。具体来说,利用训练数据学习 P ( X ∣ Y ) P(X|Y) P(XY) P ( Y ) P(Y) P(Y) 的估计,得到联合概率分布:

P ( X , Y ) = P ( Y ) P ( X ∣ Y ) P(X,Y)=P(Y)P(X|Y) P(X,Y)P(Y)P(XY)

概率估计方法可以是极大似然估计或贝叶斯估计。

2.朴素贝叶斯法的基本假设是条件独立性

P ( X = x ∣ Y = c k ) = P ( X ( 1 ) = x ( 1 ) , ⋯   , X ( n ) = x ( n ) ∣ Y = c k ) = ∏ j = 1 n P ( X ( j ) = x ( j ) ∣ Y = c k ) \begin{aligned} P(X&=x | Y=c_{k} )=P\left(X^{(1)}=x^{(1)}, \cdots, X^{(n)}=x^{(n)} | Y=c_{k}\right) \\ &=\prod_{j=1}^{n} P\left(X^{(j)}=x^{(j)} | Y=c_{k}\right) \end{aligned} P(X=xY=ck)=P(X(1)=x(1),,X(n)=x(n)Y=ck)=j=1nP(X(j)=x(j)Y=ck)

这是一个较强的假设。由于这一假设,模型包含的条件概率的数量大为减少,朴素贝叶斯法的学习与预测大为简化。因而朴素贝叶斯法高效,且易于实现。其缺点是分类的性能不一定很高。

3.朴素贝叶斯法利用贝叶斯定理与学到的联合概率模型进行分类预测。
P ( Y ∣ X ) = P ( X , Y ) P ( X ) = P ( Y ) P ( X ∣ Y ) ∑ Y P ( Y ) P ( X ∣ Y ) P(Y | X)=\frac{P(X, Y)}{P(X)}=\frac{P(Y) P(X | Y)}{\sum_{Y} P(Y) P(X | Y)} P(YX)=P(X)P(X,Y)=YP(Y)P(XY)P(Y)P(XY)

将输入 x x x 分到后验概率最大的类 y y y

y = arg ⁡ max ⁡ c k P ( Y = c k ) ∏ j = 1 n P ( X j = x ( j ) ∣ Y = c k ) y=\arg \max _{c_{k}} P\left(Y=c_{k}\right) \prod_{j=1}^{n} P\left(X_{j}=x^{(j)} | Y=c_{k}\right) y=argckmaxP(Y=ck)j=1nP(Xj=x(j)Y=ck)

后验概率最大等价于0-1损失函数时的期望风险最小化。

  1. 常用模型模型:
  • 高斯模型
  • 多项式模型
  • 伯努利模型
  1. 注意:
  • 离散情况时,某一概率可能为 0 ,这时需要高斯平滑处理。
  • 离散情况时,分母为常数,可以不代入计算,直接计算比较分子。

3、实例:鸢尾花数据集实现贝叶斯分类

# @Time : 2021/12/8 10:22
# @Author : xiao cong
# @Function : 鸢尾花数据集实现朴素贝叶斯分类

import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split  # 划分训练集和测试集
from sklearn.naive_bayes import GaussianNB


def create_data():
    iris = load_iris()
    df = pd.DataFrame(iris.data, columns=['sepal length', 'sepal width', 'petal length', 'petal width'])
    df["label"] = iris.target
    data = np.array(df.iloc[:100, :])
    return data[:, :-1], data[:, -1]


X, y = create_data()
X_train, X_test,y_train, y_test = train_test_split(X, y, test_size=0.3)           # 0.3 的数据集被划分为测试集


# 直接调用模型
clf = GaussianNB()
clf.fit(X_train, y_train)

print(clf.score(X_test, y_test))
print(clf.predict([[4.4,  3.2,  1.3,  0.2]]))
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值