整合一下学习NB的思路与代码,仅代表个人思想。
算法思想
我们先来看一下这名字的来由。朴素贝叶斯,“贝叶斯”即基于贝叶斯定理,“朴素”即作了特征条件独立假设,这两个是它最突出的特点。朴素贝叶斯是一种概率模型,同时也是参数化模型,经常用于监督学习的分类应用中,例如垃圾邮件分类。对于训练集,首先学习输入输出的联合概率分布模型,然后基于此模型,对给出的输入x,利用贝叶斯定理求出后验概率最大的类别y作为输出。
公式推导
先来看看朴素贝叶斯分类器长什么样子:
y
=
a
r
g
m
a
x
c
k
P
(
Y
=
c
k
)
∏
j
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
y = argmax_{c_k}P(Y=c_k)\prod_{j}P(X^{(j)}=x^{(j)}|Y=c_k)
y=argmaxckP(Y=ck)j∏P(X(j)=x(j)∣Y=ck)
看不懂很正常,下面结合例子来一步步推出这个公式。
1.问题陈述
设输入空间X为n维向量x的集合,X = {x1,x2,x3…};
每个x由n个特征来描述,xi = {xi(1),xi(2),…,xi(n)};每个特征 x(j) 有 Sj 个取值。
输出空间Y为类标记集合,有k个取值,Y = {c1,c2,…,ck}。
输入训练数据集T = {(x1,y1),(x2,y2),…,(xn,yn)},我们要做的就是用训练集T学习一个模型,然后用该模型计算后验概率分布
P
(
Y
=
c
k
∣
X
=
x
)
P(Y=c_k|X=x)
P(Y=ck∣X=x),将后验概率最大的类y作为x的类输出。
结合一个例子来讲:
天气x(1) | 刮风x(2) | 温度x(3) | 是否出去玩ck |
---|---|---|---|
下雨 | 刮 | 低 | 不去 |
晴 | 不刮 | 高 | 不去 |
下雨 | 不刮 | 中 | 去 |
晴 | 刮 | 中 | 去 |
用朴素贝叶斯分类器求当输入x = (下雨,不刮,低温)时,是否会出去玩。
在该例子中,输入空间X为3维向量x的集合,X = {x1,x2,x3,x4};
每个x由3个特征来描述,x1 = {x1(1)下雨,x1(2)刮,x1(3)低};x2 = {x2(1)晴,x2(2)不刮,x2(3)高}。
特征x(1)有S1=(下雨,晴)2个取值;特征x(2)有S2=(刮,不刮)2个取值;特征x(3)有S3=(低,中,高)3个取值。
输出空间Y有2个取值,Y = {c1去,c2不去}。
输入训练数据集T = {(x1,y1),(x2,y2),(x3,y3),(x4,y4)}
2.先验概率分布
先验概率分布是得到类ck的概率,在这里用极大似然估计法来估计:
P
(
Y
=
c
k
)
=
∑
i
=
1
N
I
(
y
i
=
c
k
)
N
,
k
=
1
,
2
,
.
.
.
,
K
(
2.1
)
P(Y=c_k)=\frac{\sum_{i=1}^{N}I(y_i=c_k)}{N},k=1,2,...,K \tag{\color{red}{2.1}}
P(Y=ck)=N∑i=1NI(yi=ck),k=1,2,...,K(2.1)
其中N为样本总个数,当指示函数
I
(
y
i
=
c
k
)
I(y_i=c_k)
I(yi=ck)括号内的条件成立时,
I
(
y
i
=
c
k
)
=
1
I(y_i=c_k)=1
I(yi=ck)=1,否则为0。
得到类c1=不去玩的概率 P ( Y = c 1 ) = 1 2 P(Y=c_1)=\frac{1}{2} P(Y=c1)=21
得到类c2=去玩的概率 P ( Y = c 2 ) = 1 2 P(Y=c_2)=\frac{1}{2} P(Y=c2)=21
因为在四个样本中有两个不去和两个去,这种靠数个数来计算概率的方法就是极大似然估计。当样本数量足够多时,极大似然估计很好用,样本数量少时就会有失准确性。
3.条件概率分布
假设各个特征之间都是相互独立的(这是一个较强的假设,朴素贝叶斯的“朴素”就是因为这个假设,此假设牺牲了一定的准确率,却让计算变得很简单),那么条件概率分布为Y=ck时,X=x的概率:
P
(
X
=
x
∣
Y
=
c
k
)
=
P
(
X
(
1
)
=
x
(
1
)
,
X
(
2
)
=
x
(
2
)
,
.
.
.
,
X
(
n
)
=
x
(
n
)
∣
Y
=
c
k
)
=
P
(
X
(
1
)
=
x
(
1
)
∣
Y
=
c
k
)
∗
P
(
X
(
2
)
=
x
(
2
)
∣
Y
=
c
k
)
∗
.
.
.
∗
P
(
X
(
n
)
=
x
(
n
)
∣
Y
=
c
k
)
=
∏
j
=
1
n
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
(
3.1
)
\begin{aligned} P(X=x|Y=c_k) &=P(X^{(1)}=x^{(1)},X^{(2)}=x^{(2)},...,X^{(n)}=x^{(n)}|Y=c_k)\\ &=P(X^{(1)}=x^{(1)}|Y=c_k)*P(X^{(2)}=x^{(2)}|Y=c_k)*...*P(X^{(n)}=x^{(n)}|Y=c_k)\\ &=\prod_{j=1}^{n}P(X^{(j)}=x^{(j)}|Y=c_k) \end{aligned} \tag{\color{red}{3.1}}
P(X=x∣Y=ck)=P(X(1)=x(1),X(2)=x(2),...,X(n)=x(n)∣Y=ck)=P(X(1)=x(1)∣Y=ck)∗P(X(2)=x(2)∣Y=ck)∗...∗P(X(n)=x(n)∣Y=ck)=j=1∏nP(X(j)=x(j)∣Y=ck)(3.1)
在这里也用极大似然估计法来估计条件概率
P
(
X
(
1
)
=
x
(
1
)
∣
Y
=
c
k
)
P(X^{(1)}=x^{(1)}|Y=c_k)
P(X(1)=x(1)∣Y=ck):
P
(
X
(
1
)
=
x
(
1
)
∣
Y
=
c
k
)
=
∑
i
=
1
N
I
(
X
i
(
1
)
=
x
(
1
)
,
y
i
=
c
k
)
∑
i
=
1
N
I
(
y
i
=
c
k
)
(
3.2
)
P(X^{(1)}=x^{(1)}|Y=c_k)=\frac{\sum_{i=1}^{N}I(X_i^{(1)}=x^{(1)},y_i=c_k)}{\sum_{i=1}^{N}I(y_i=c_k)} \tag{\color{red}{3.2}}
P(X(1)=x(1)∣Y=ck)=∑i=1NI(yi=ck)∑i=1NI(Xi(1)=x(1),yi=ck)(3.2)
其中N为样本总个数,当指示函数
I
(
y
i
=
c
k
)
I(y_i=c_k)
I(yi=ck)括号内的条件成立时,
I
(
y
i
=
c
k
)
=
1
I(y_i=c_k)=1
I(yi=ck)=1,否则为0;当
I
(
X
i
(
1
)
=
x
(
1
)
,
y
i
=
c
k
)
I(X_i^{(1)}=x^{(1)},y_i=c_k)
I(Xi(1)=x(1),yi=ck)括号内的两个条件都成立时为1,否则为0;最后累加起来就相当于在数个数。
当假设各个特征之间相互独立时,相当于假设天气,温度和刮风之间互不影响(其实在正常生活中,天气的好坏会影响温度的,也就是说在现实问题中毫无关系的特征几乎不存在)。
由 ( 3.2 ) \color{red}{(3.2)} (3.2)得x(1)=下雨时,y=去的概率:
P ( x ( 1 ) = 下 雨 ∣ Y = 去 ) = ∑ i = 1 4 I ( x ( 1 ) = 下 雨 , y i = 去 ) = 1 ∑ i = 1 4 I ( y i = 去 ) = 2 P(x^{(1)}=下雨|Y=去)=\frac{\sum_{i=1}^{4}I(x^{(1)}=下雨,y_i=去)=1}{\sum_{i=1}^{4}I(y_i=去)=2} P(x(1)=下雨∣Y=去)=∑i=14I(yi=去)=2∑i=14I(x(1)=下雨,yi=去)=1
那么当Y=c1去时,由 ( 3.1 ) \color{red}{(3.1)} (3.1)得x = (下雨,不刮,低温)概率为:
P ( x = ( 下 雨 , 不 刮 , 低 温 ) ∣ Y = 去 ) = P ( x ( 1 ) = 下 雨 , x ( 2 ) = 不 刮 , x ( 3 ) = 低 温 ∣ Y = 去 ) = P ( x ( 1 ) = 下 雨 ∣ Y = 去 ) ∗ P ( x ( 2 ) = 不 刮 ∣ Y = 去 ) ∗ P ( x ( 3 ) = 低 温 ∣ Y = 去 ) = 1 2 ∗ 1 2 ∗ 0 = 0 ( 3.3 ) \begin{aligned} P(x = (下雨,不刮,低温)|Y=去) &=P(x^{(1)}=下雨,x^{(2)}=不刮,x^{(3)}=低温|Y=去)\\ &=P(x^{(1)}=下雨|Y=去)*P(x^{(2)}=不刮|Y=去)*P(x^{(3)}=低温|Y=去)\\ &=\frac{1}{2}*\frac{1}{2}*0\\ &=0 \end{aligned} \tag{\color{red}{3.3}} P(x=(下雨,不刮,低温)∣Y=去)=P(x(1)=下雨,x(2)=不刮,x(3)=低温∣Y=去)=P(x(1)=下雨∣Y=去)∗P(x(2)=不刮∣Y=去)∗P(x(3)=低温∣Y=去)=21∗21∗0=0(3.3)
当Y=c2不去时,x = (下雨,不刮,低温)概率为:
P ( x = ( 下 雨 , 不 刮 , 低 温 ) ∣ Y = 不 去 ) = P ( x ( 1 ) = 下 雨 , x ( 2 ) = 不 刮 , x ( 3 ) = 低 温 ∣ Y = 不 去 ) = P ( x ( 1 ) = 下 雨 ∣ Y = 不 去 ) ∗ P ( x ( 2 ) = 不 刮 ∣ Y = 不 去 ) ∗ P ( x ( 3 ) = 低 温 ∣ Y = 不 去 ) = 1 2 ∗ 1 2 ∗ 1 2 = 1 8 ( 3.4 ) \begin{aligned} P(x = (下雨,不刮,低温)|Y=不去) &=P(x^{(1)}=下雨,x^{(2)}=不刮,x^{(3)}=低温|Y=不去)\\ &=P(x^{(1)}=下雨|Y=不去)*P(x^{(2)}=不刮|Y=不去)*P(x^{(3)}=低温|Y=不去)\\ &=\frac{1}{2}*\frac{1}{2}*\frac{1}{2}\\ &=\frac{1}{8} \end{aligned} \tag{\color{red}{3.4}} P(x=(下雨,不刮,低温)∣Y=不去)=P(x(1)=下雨,x(2)=不刮,x(3)=低温∣Y=不去)=P(x(1)=下雨∣Y=不去)∗P(x(2)=不刮∣Y=不去)∗P(x(3)=低温∣Y=不去)=21∗21∗21=81(3.4)
4.输入为x的概率
接下来还需要计算输入为x = {x(1),x(2),…,x(n)} 的概率。
输入为x的概率
P
(
X
=
x
)
P(X=x)
P(X=x)就是x为类c1的概率,x为类c2的概率…x为类ck的概率相加起来:
P
(
X
=
x
)
=
P
(
Y
=
c
1
)
∗
P
(
X
=
x
∣
Y
=
c
1
)
+
P
(
Y
=
c
2
)
∗
P
(
X
=
x
∣
Y
=
c
2
)
+
.
.
.
+
P
(
Y
=
c
k
)
∗
P
(
X
=
x
∣
Y
=
c
k
)
=
∑
k
=
1
K
P
(
Y
=
c
k
)
∗
P
(
X
=
x
∣
Y
=
c
k
)
\begin{aligned} P(X=x) &=P(Y=c_1)*P(X=x|Y=c_1)+P(Y=c_2)*P(X=x|Y=c_2)+...+P(Y=c_k)*P(X=x|Y=c_k)\\ &=\sum_{k=1}^{K}{P(Y=c_k)*P(X=x|Y=c_k)} \end{aligned}
P(X=x)=P(Y=c1)∗P(X=x∣Y=c1)+P(Y=c2)∗P(X=x∣Y=c2)+...+P(Y=ck)∗P(X=x∣Y=ck)=k=1∑KP(Y=ck)∗P(X=x∣Y=ck)
计算x=(下雨,不刮,低温)的概率,由步骤2得 P ( Y = c 1 ) = P ( Y = c 2 ) = 1 2 P(Y=c_1)=P(Y=c_2)=\frac{1}{2} P(Y=c1)=P(Y=c2)=21;
由式 ( 3.3 ) \color{red}{(3.3)} (3.3) ( 3.4 ) \color{red}{(3.4)} (3.4)得: P ( x = ( 下 雨 , 不 刮 , 低 温 ) ∣ Y = 去 ) = 0 P(x = (下雨,不刮,低温)|Y=去)=0 P(x=(下雨,不刮,低温)∣Y=去)=0;
P ( x = ( 下 雨 , 不 刮 , 低 温 ) ∣ Y = 不 去 ) = 1 8 P(x = (下雨,不刮,低温)|Y=不去)=\frac{1}{8} P(x=(下雨,不刮,低温)∣Y=不去)=81;
故得输入为x = (下雨,不刮,低温)的概率为:
P ( x = ( 下 雨 , 不 刮 , 低 温 ) ) = P ( Y = 去 ) ∗ P ( x = ( 下 雨 , 不 刮 , 低 温 ) ∣ Y = 去 ) + P ( Y = 不 去 ) ∗ P ( x = ( 下 雨 , 不 刮 , 低 温 ) ∣ Y = 不 去 ) = 1 2 ∗ 1 8 + 1 2 ∗ 0 = 1 16 \begin{aligned} P(x = (下雨,不刮,低温)) &=P(Y=去)*P(x = (下雨,不刮,低温)|Y=去)+P(Y=不去)*P(x = (下雨,不刮,低温)|Y=不去)\\ &=\frac{1}{2}*\frac{1}{8}+\frac{1}{2}*0\\ &=\frac{1}{16} \end{aligned} P(x=(下雨,不刮,低温))=P(Y=去)∗P(x=(下雨,不刮,低温)∣Y=去)+P(Y=不去)∗P(x=(下雨,不刮,低温)∣Y=不去)=21∗81+21∗0=161
5.用贝叶斯定理求后验概率
贝叶斯定理:
P
(
A
∣
B
)
=
P
(
B
∣
A
)
∗
P
(
A
)
P
(
B
)
P(A|B)=\frac{P(B|A)*P(A)}{P(B)}
P(A∣B)=P(B)P(B∣A)∗P(A)
在这里,Y=ck就是A,X=x就是B,那么就得到了计算后验概率的公式:
P
(
Y
=
c
k
∣
X
=
x
)
=
P
(
X
=
x
∣
Y
=
c
k
)
∗
P
(
Y
=
c
k
)
P
(
X
=
x
)
(
5.1
)
P(Y=c_k|X=x)=\frac{P(X=x|Y=c_k)*P(Y=c_k)}{P(X=x)} \tag{\color{red}{5.1}}
P(Y=ck∣X=x)=P(X=x)P(X=x∣Y=ck)∗P(Y=ck)(5.1)
我们已经在步骤2,3中计算出了分子,步骤4中计算出了分母,所以将步骤2,3,4中的结果代入式 ( 5.1 ) \color{red}{(5.1)} (5.1)得:
输入x = (下雨,不刮,低温)时,输出Y=去的后验概率为:
P ( Y = 去 ∣ x = ( 下 雨 , 不 刮 , 低 温 ) ) = P ( x = ( 下 雨 , 不 刮 , 低 温 ) ∣ Y = 去 ) ∗ P ( Y = 去 ) P ( x = ( 下 雨 , 不 刮 , 低 温 ) ) = 0 ∗ 1 2 1 16 = 0 ( 5.2 ) \begin{aligned} P(Y=去|x = (下雨,不刮,低温)) &=\frac{P(x = (下雨,不刮,低温)|Y=去)*P(Y=去)}{P(x = (下雨,不刮,低温))}\\ &=\frac{0*\frac{1}{2}}{\frac{1}{16}}\\ &=0 \end{aligned} \tag{\color{red}{5.2}} P(Y=去∣x=(下雨,不刮,低温))=P(x=(下雨,不刮,低温))P(x=(下雨,不刮,低温)∣Y=去)∗P(Y=去)=1610∗21=0(5.2)
输入x = (下雨,不刮,低温)时,输出Y=不去的后验概率为:
P ( Y = 不 去 ∣ x = ( 下 雨 , 不 刮 , 低 温 ) ) = P ( x = ( 下 雨 , 不 刮 , 低 温 ) ∣ Y = 不 去 ) ∗ P ( Y = 不 去 ) P ( x = ( 下 雨 , 不 刮 , 低 温 ) ) = 1 8 ∗ 1 2 1 16 = 1 ( 5.3 ) \begin{aligned} P(Y=不去|x = (下雨,不刮,低温)) &=\frac{P(x = (下雨,不刮,低温)|Y=不去)*P(Y=不去)}{P(x = (下雨,不刮,低温))}\\ &=\frac{\frac{1}{8}*\frac{1}{2}}{\frac{1}{16}}\\ &=1 \end{aligned} \tag{\color{red}{5.3}} P(Y=不去∣x=(下雨,不刮,低温))=P(x=(下雨,不刮,低温))P(x=(下雨,不刮,低温)∣Y=不去)∗P(Y=不去)=16181∗21=1(5.3)
7.得到答案
朴素贝叶斯分类器将最大的后验概率对应的类ck作为x的类输出,由式
(
5.1
)
\color{red}{(5.1)}
(5.1)得:
y
=
a
r
g
m
a
x
c
k
P
(
Y
=
c
k
∣
X
=
x
)
y = argmax_{c_k}P(Y=c_k|X=x)
y=argmaxckP(Y=ck∣X=x)
我们已经由式 ( 5.2 ) \color{red}{(5.2)} (5.2) ( 5.3 ) \color{red}{(5.3)} (5.3)得到了x对应的每个类的后验概率,只需最后一步比较大小,将最大的找出来,就得到了答案。
y = a r g m a x c k P ( Y = c k ∣ X = x ) = a r g m a x c k { P ( Y = 去 ∣ x = ( 下 雨 , 不 刮 , 低 温 ) ) , P ( Y = 不 去 ∣ x = ( 下 雨 , 不 刮 , 低 温 ) ) } = a r g m a x c k { 0 , 1 } = c 2 不 去 \begin{aligned} y &= argmax_{c_k}P(Y=c_k|X=x)\\ &=argmax_{c_k}\{P(Y=去|x = (下雨,不刮,低温)),P(Y=不去|x = (下雨,不刮,低温))\}\\ &=argmax_{c_k}\{0,1\}\\ &=c_2不去 \end{aligned} y=argmaxckP(Y=ck∣X=x)=argmaxck{P(Y=去∣x=(下雨,不刮,低温)),P(Y=不去∣x=(下雨,不刮,低温))}=argmaxck{0,1}=c2不去
所以当输入x = (下雨,不刮,低温)时,不会出去玩。
8.简化计算
在计算后验概率的公式
(
5.1
)
\color{red}{(5.1)}
(5.1)中可以发现,对于不同类的对应后验概率的计算中,分母都是一样的,而我们最终只比较后验概率的大小,所以只需比较分子的大小就可以了,去掉分母并不影响最后的结果,所以最终的朴素贝叶斯分类器公式为:
y
=
a
r
g
m
a
x
c
k
P
(
X
=
x
∣
Y
=
c
k
)
∗
P
(
Y
=
c
k
)
=
a
r
g
m
a
x
c
k
P
(
Y
=
c
k
)
∏
j
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
\begin{aligned} y &=argmax_{c_k}P(X=x|Y=c_k)*P(Y=c_k)\\ &=argmax_{c_k}P(Y=c_k)\prod_{j}P(X^{(j)}=x^{(j)}|Y=c_k) \end{aligned}
y=argmaxckP(X=x∣Y=ck)∗P(Y=ck)=argmaxckP(Y=ck)j∏P(X(j)=x(j)∣Y=ck)
9.Laplace平滑
首先在步骤1中我们已经说过,每个x由n个特征来描述,x1 = {x1(1),x1(2),…,x1(n)};每个特征x(j)有Sj个取值。那么所有可能取得的x个数就为 ∏ j = 1 n S j \prod_{j=1}^{n}S_j ∏j=1nSj。比如在该例中S1=2;S2=2;S3=3。所以所有可能取得的x个数就为2×2×3=12。也就是说, 每个输入x的可能性都是 1 12 \frac{1}{12} 121。
但在步骤4中我们求得输入为x = (下雨,不刮,低温)的概率却为 1 16 \frac{1}{16} 161,这是为什么呢?
因为在计算过程中,一直使用的是极大似然估计,而极大似然估计可能会出现所要估计的概率值为0的情况,比如在上例中,低温的两个样本都不去玩,导致 P ( x ( 3 ) = 低 温 ∣ Y = 去 ) P(x^{(3)}=低温|Y=去) P(x(3)=低温∣Y=去)的概率为0,进而导致后续计算 P ( Y = 去 ∣ x = ( 下 雨 , 不 刮 , 低 温 ) ) P(Y=去|x = (下雨,不刮,低温)) P(Y=去∣x=(下雨,不刮,低温))也是0。这时就会影响到后验概率的计算结果,使分类产生偏差,因为或许在更多的样本中会出现低温时也出去玩的情况。
解决这个问题的方法就是采用贝叶斯估计。
具体地,在分子分母上加一项正数 λ > 0 \lambda>0 λ>0。一般情况下,常取 λ = 1 \lambda=1 λ=1,这时称为拉普拉斯平滑。
采用贝叶斯估计而非极大似然估计(式
(
3.2
)
\color{red}{(3.2)}
(3.2))的条件概率如下:
P
λ
(
X
(
1
)
=
x
(
1
)
∣
Y
=
c
k
)
=
∑
i
=
1
N
I
(
X
i
(
1
)
=
x
(
1
)
,
y
i
=
c
k
)
+
λ
∑
i
=
1
N
I
(
y
i
=
c
k
)
+
S
j
∗
λ
P_\lambda(X^{(1)}=x^{(1)}|Y=c_k)=\frac{\sum_{i=1}^{N}I(X_i^{(1)}=x^{(1)},y_i=c_k)+\lambda}{\sum_{i=1}^{N}I(y_i=c_k)+S_j*\lambda}
Pλ(X(1)=x(1)∣Y=ck)=∑i=1NI(yi=ck)+Sj∗λ∑i=1NI(Xi(1)=x(1),yi=ck)+λ
取 λ = 1 \lambda=1 λ=1,由上式得x(1)=下雨时,y=去的概率:
P λ ( x ( 1 ) = 下 雨 ∣ Y = 去 ) = ∑ i = 1 4 I ( x ( 1 ) = 下 雨 , y i = 去 ) + 1 ∑ i = 1 4 I ( y i = 去 ) + 2 ∗ 1 = 1 2 P_\lambda(x^{(1)}=下雨|Y=去)=\frac{\sum_{i=1}^{4}I(x^{(1)}=下雨,y_i=去)+1}{\sum_{i=1}^{4}I(y_i=去)+2*1}=\frac{1}{2} Pλ(x(1)=下雨∣Y=去)=∑i=14I(yi=去)+2∗1∑i=14I(x(1)=下雨,yi=去)+1=21
可以看到,当条件概率不为0时,贝叶斯估计的结果与极大似然估计是一致的,但当条件概率恰好为0时,贝叶斯估计的作用就体现了出来,消除了0造成的误差。
用NB分类iris(python实现)
pycharm+python3.7.4,完整代码如下:
# file-settings-python interpreter导包
# 导入科学计算工具
import numpy as np
# 导入鸢尾花数据集
from sklearn.datasets import load_iris
# 导入朴素贝叶斯
from sklearn import naive_bayes
# 加载鸢尾花数据集
iris = load_iris()
# 提取数据
trainX = iris.data
# 提取标签
trainY = iris.target
# 建立高斯分布的朴素贝叶斯模型
clf=naive_bayes.GaussianNB() #高斯分布,没有参数
# 建立多项式分布的朴素贝叶斯模型
# clf=naive_bayes.MultinomialNB() #多项式分布
# 训练模型
clf.fit(trainX,trainY)
# 输出准确率
print("准确率:" + str(clf.score(trainX,trainY)))
实验结果:
准确率:0.96