西瓜书_chapter7_贝叶斯分类器

7.1 贝叶斯决策论

对于分类任务,贝叶斯决策论是在所有相关概率都已知的理想情形下,考虑如何基于概率和误判损失来选择最优的类别标记。
假设有N种可能的类别标记,即 Y = { c 1 , c 2 , . . . , c N } Y=\{c_1,c_2,...,c_N\} Y={ c1,c2,...,cN} λ i j \lambda_{ij} λij是将一个真实标记为 c j c_j cj的样本误分类为 c i c_i ci所产生的损失,那么我们可以基于后验概率来刻画把 x x x分类为 c i c_i ci损失期望
R ( c i ∣ x ) = ∑ j = 1 N λ i j P ( c j ∣ x ) R(c_i|x)=\sum_{j=1}^N\lambda_{ij}P(c_j|x) R(cix)=j=1NλijP(cjx)
我们的任务是寻找一个判定准则 h h h,来最小化风险
R ( h ) = E x [ R ( h ( x ) ∣ x ) ] . R(h)=\mathbb{E}_x[R(h(x)|x)]. R(h)=Ex[R(h(x)x)].
贝叶斯判定准则:为了最小化总体风险,只需要在每个样本上选择能使条件风险 R ( c ∣ x ) R(c|x) R(cx)最小的类别标记,即
h ∗ ( x ) = arg ⁡ min ⁡ c ∈ y R ( c ∣ x ) h^*(x)=\mathop{\arg\min}\limits_{c\in y} R(c|x) h(x)=cyargminR(cx)
此时,我们把 h ∗ h^* h称为贝叶斯最优分类器,与之对应的,我们称 R ( h ∗ ) R(h^*) R(h)为贝叶斯风险, 1 − R ( h ∗ ) 1-R(h^*) 1R(h)反映了分类器能达到的最好性能。
如果我们额目标是最小化分类错误率,那么误判损失 λ i j \lambda_{ij} λij可写为
λ = 1 − I ( i , j ) \lambda=1-\mathbb{I}(i,j) λ=1I(i,j)
那么这个时候的条件风险就可以表示为
R ( c ∣ x ) = 1 − p ( c ∣ x ) R(c|x)=1-p(c|x) R(cx)=1p(cx)
最优分类器就等价于
h ∗ ( x ) = arg ⁡ max ⁡ c ∈ y P ( c ∣ x ) h^*(x)=\mathop{\arg\max}\limits_{c\in y} P(c|x) h(x)=cyargmaxP(cx)
这里给出生成式模型判别式模型的概念。
所谓生成式模型,指的是先对 P ( c , x ) P(c,x) P(c,x)进行建模,然后再得到 P ( c ∣ x ) P(c|x) P(cx);而判别式模型则是直接对 P ( c ∣ x ) P(c|x) P(cx)进行建模,如我们前边介绍的决策树、SVM等。
对于生成式模型,由贝叶斯公式
P ( c ∣ x ) = P ( c ) P ( x ∣ c ) P ( x ) = P ( c , x ) P ( x ) P(c|x)=\frac{P(c)P(x|c)}{P(x)}=\frac{P(c,x)}{P(x)} P(cx)=P(x)P(c)P(xc)=P(x)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Python中,你可以使用scikit-learn库来实现贝叶斯分类。具体来说,scikit-learn提供了两种常用的贝叶斯分类:高斯朴素贝叶斯(Gaussian Naive Bayes)和多项式朴素贝叶斯(Multinomial Naive Bayes)。 下面是一个使用高斯朴素贝叶斯分类进行分类的示例代码: ```python from sklearn.naive_bayes import GaussianNB from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # 准备数据 # X为特征向量,y为对应的类别标签 X = [[1, 2], [3, 4], [1, 3], [2, 4], [4, 6]] y = [0, 0, 1, 1, 1] # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 创建分类对象 clf = GaussianNB() # 在训练集上训练分类 clf.fit(X_train, y_train) # 在测试集上进行预测 y_pred = clf.predict(X_test) # 计算准确率 accuracy = accuracy_score(y_test, y_pred) print("Accuracy:", accuracy) ``` 这段代码中,我们首先导入了所需的库。然后,我们准备了一些示例数据,包括特征向量X和对应的类别标签y。接下来,我们使用`train_test_split`函数将数据集划分为训练集和测试集。然后,我们创建了一个`GaussianNB`对象作为分类,并在训练集上调用`fit`方法进行训练。最后,我们使用训练好的分类对测试集进行预测,并计算准确率。 如果你需要使用多项式朴素贝叶斯分类,可以将代码中的`GaussianNB`替换为`MultinomialNB`即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值