赞
踩
前言:参考《机器学习》,简单介绍朴素贝叶斯分类器
机器学习专栏:机器学习专栏
贝叶斯定理(Bayes’ theorem)是概率论中的一个定理,描述在已知一些条件下,某事件的发生概率。
其中,
现给定数据集 D = ( ( x ( 1 ) , y ( i ) ) , ( x ( 2 ) , y ( 2 ) ) , . . . , ( x ( m ) , y ( m ) ) ) D={((x^{(1)},y^{(i)}),(x^{(2)},y^{(2)}),...,(x^{(m)},y^{(m)}))} D=((x(1),y(i)),(x(2),y(2)),...,(x(m),y(m))),假设有K种可能的类别标记, C = { c 1 , c 2 , . . . , c K } C=\{c_1,c_2,...,c_K\} C={c1,c2,...,cK},则 , y ( i ) ∈ { c 1 , c 2 , . . . , c k } ,y^{(i)}\in\{c_1,c_2,...,c_k\} ,y(i)∈{c1,c2,...,ck}。
贝叶斯分类的实质就是:给定一个样本
x
(
i
)
x^{(i)}
x(i),其属于类别k的概率为:
P
(
c
k
∣
x
(
i
)
)
P(c_k|x^{(i)})
P(ck∣x(i)),贝叶斯分类的分类结果就是条件概率
P
(
c
∣
x
(
i
)
)
P(c|x^{(i)})
P(c∣x(i))(或者称为似然)最大的那个类别,即:
a
r
g
m
a
x
c
k
∈
C
P
(
c
k
∣
x
(
i
)
)
\mathop{arg\;max}\limits_{c_k\in C}\;P(c_k|x^{(i)})
ck∈CargmaxP(ck∣x(i))
我们将我们前面介绍的贝叶斯公式换成符合数据集D的形式:
P
(
c
∣
x
)
=
P
(
x
∣
c
)
⋅
P
(
c
)
P
(
x
)
P(c|x)=\frac {P(x|c)·P(c)}{P(x)}
P(c∣x)=P(x)P(x∣c)⋅P(c)
给定数据集的情况下,我们利用大数定律就可以确定
P
(
c
)
P(c)
P(c),对于确定的样本
x
x
x(
x
=
[
x
1
,
x
2
,
.
.
.
,
x
n
]
x=[x_1,x_2,...,x_n]
x=[x1,x2,...,xn])n为属性个数,对所有类别来说
P
(
x
)
P(x)
P(x)也是确定的。
假设各个属性相互独立(这就是“朴素”),则:
P
(
x
∣
c
)
=
∏
j
=
1
n
P
(
x
j
∣
c
)
P(x|c)=\prod_{j=1}^{n}P(x_j|c)
P(x∣c)=j=1∏nP(xj∣c)
基于上面所述的贝叶斯判定准则,可以得出朴素贝叶斯分类器的表达式为:
h
n
b
(
x
)
=
a
r
g
m
a
x
c
∈
C
P
(
c
)
∏
j
=
1
n
P
(
x
j
∣
c
)
h_{nb}(x)=\mathop{arg\;max}\limits_{c\in C}\;P(c)\prod_{j=1}^{n}P(x_j|c)
hnb(x)=c∈CargmaxP(c)j=1∏nP(xj∣c)
明显可以看出朴素贝叶斯分类器更适用于离散属性,所以我们也可以考虑连续离散化处理的方法。
# -*- coding:utf-8 -*- """ @author: 1 @file: bayes.py @time: 2019/11/30 1:25 """ from sklearn.naive_bayes import GaussianNB import pandas as pd from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score df = pd.read_csv(r'D:\workspace\python\machine learning\data\iris.csv') X = df.iloc[:, 0:3] Y = df.iloc[:, 4] x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.2) # 属性假设为高斯分布 gnb = GaussianNB() model = gnb.fit(x_train, y_train) y_pred = model.predict(x_test) print('accuracy_score:', accuracy_score(y_test, y_pred))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。