Python手动编写朴素贝叶斯分类器
理论基础
贝叶斯定理和特征条件独立性假设
1:贝叶斯定理
假设
A
,
B
1
,
B
2
,
…
,
B
n
A,B_1,B_2,\dots,B_n
A,B1,B2,…,Bn是随机变量,则:
P
(
B
i
∣
A
)
=
P
(
A
∣
B
i
)
P
(
B
i
)
∑
i
=
1
n
P
(
A
∣
B
i
)
P
(
B
i
)
\begin{aligned} P(B_i|A)=\frac{P(A|B_i)P(B_i)}{\sum_{i=1}^{n}P(A|B_i)P(B_i)} \end{aligned}
P(Bi∣A)=∑i=1nP(A∣Bi)P(Bi)P(A∣Bi)P(Bi)
2:特征条件独立性假设
P { X = x ∣ Y = c k } = P { X ( 1 ) = x 1 , X ( 2 ) = x 2 , … , 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\{X^{(1)}=x_1,X^{(2)}=x_2,\dots,X^{(n)}=x_n|Y=c_k\}\\ &=\prod_{j=1}^{n}P\{X^{(j)}=x_j|Y=c_k\}\\ \end{aligned} P{X=x∣Y=ck}=P{X(1)=x1,X(2)=x2,…,X(n)=xn∣Y=ck}=j=1∏nP{X(j)=xj∣Y=ck}
贝叶斯分类器基本方法
设输入空间
X
⊆
R
n
\mathcal{X} \subseteq \mathcal{R}^n
X⊆Rn为n维向量组成的集合,输出空间为标记类别集合
y
∈
Y
=
{
c
1
,
c
2
,
…
,
c
K
}
y\in \mathcal{Y}=\{c_1,c_2,\dots,c_K\}
y∈Y={c1,c2,…,cK}。
P
(
X
,
Y
)
P(X,Y)
P(X,Y)是
X
X
X和
Y
Y
Y的联合概率分布。 训练数据集:
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
x
2
)
,
…
,
(
x
N
,
y
N
)
}
T=\{(x_1,y_1),(x_2,x_2),\dots,(x_N,y_N)\}
T={(x1,y1),(x2,x2),…,(xN,yN)}
由 P ( X , Y ) P(X,Y) P(X,Y)独立同分布生成。
步骤1
朴素贝叶斯方法先通过训练集学得先验概率分布及条件概率分布。
先验概率分布:
P
(
Y
=
c
k
)
k
=
1
,
2
,
…
,
K
P(Y=c_k)\qquad k=1,2,\dots,K
P(Y=ck)k=1,2,…,K
条件概率分布:
P
(
X
=
x
∣
Y
=
c
k
)
=
P
{
X
(
1
)
=
x
1
,
X
(
2
)
=
x
2
,
…
,
X
(
n
)
=
x
n
∣
Y
=
c
k
}
P(X=x|Y=c_k)=P\{X^{(1)}=x_1,X^{(2)}=x_2,\dots,X^{(n)}=x_n|Y=c_k\}
P(X=x∣Y=ck)=P{X(1)=x1,X(2)=x2,…,X(n)=xn∣Y=ck}
步骤2
利用特征条件独立假设和联合概率分布计算
x
x
x的后验分布:
P
(
Y
=
c
k
∣
x
)
=
P
(
X
=
x
∣
Y
=
c
k
)
P
(
Y
=
c
k
)
∑
k
P
(
X
=
x
∣
Y
=
c
k
)
P
(
Y
=
c
k
)
=
P
(
Y
=
c
k
)
∏
j
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
∑
k
P
(
Y
=
c
k
)
∏
j
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
\begin{aligned} P(Y=c_k|x)&=\frac{P(X=x|Y=c_k)P(Y=c_k)}{\sum_{k}P(X=x|Y=c_k)P(Y=c_k)}\\ &=\frac{P(Y=c_k)\prod_{j}P(X^{(j)}=x^{(j)}|Y=c_k)}{\sum_{k}P(Y=c_k)\prod_{j}P(X^{(j)}=x^{(j)}|Y=c_k)}\\ \end{aligned}
P(Y=ck∣x)=∑kP(X=x∣Y=ck)P(Y=ck)P(X=x∣Y=ck)P(Y=ck)=∑kP(Y=ck)∏jP(X(j)=x(j)∣Y=ck)P(Y=ck)∏jP(X(j)=x(j)∣Y=ck)
步骤3
后验概率最大化:
y
=
a
r
g
m
a
x
c
k
P
(
Y
=
c
k
)
∏
j
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
∑
k
P
(
Y
=
c
k
)
∏
j
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
y=\mathop{argmax}_{c_k}\frac{P(Y=c_k)\prod_{j}P(X^{(j)}=x^{(j)}|Y=c_k)}{\sum_{k}P(Y=c_k)\prod_{j}P(X^{(j)}=x^{(j)}|Y=c_k)}
y=argmaxck∑kP(Y=ck)∏jP(X(j)=x(j)∣Y=ck)P(Y=ck)∏jP(X(j)=x(j)∣Y=ck)
求极值点由于分母都一样,则目标函数转化为:
y
=
a
r
g
m
a
x
c
k
P
(
Y
=
c
k
)
∏
j
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
y=\mathop{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:先验概率的极大似然估计:
P ( Y = c k ) = ∑ i = 1 N I ( y i = c k ) N P(Y=c_k)=\frac{\sum_{i=1}^{N}I(y_i=c_k)}{N} P(Y=ck)=N∑i=1NI(yi=ck)
设第j个特征 x ( j ) x^{(j)} x(j)可能取值的集合为 { a j 1 , a j 2 , … , a j S j } \{a_{j1},a_{j2},\dots,a_{jS_{j}}\} {aj1,aj2,…,ajSj}
2:条件概率的极大似然估计:
P
(
X
(
j
)
=
a
j
l
∣
Y
=
c
k
)
=
∑
i
=
1
N
I
(
x
i
(
j
)
=
a
j
l
,
y
i
=
c
k
)
∑
i
=
1
N
I
(
y
i
=
c
k
)
P(X^{(j)}=a_{jl}|Y=c_k)=\frac{\sum_{i=1}^{N} I(x_i^{(j)}=a_{jl},y_i=c_k) }{\sum_{i=1}^{N} I(y_i=c_k) }
P(X(j)=ajl∣Y=ck)=∑i=1NI(yi=ck)∑i=1NI(xi(j)=ajl,yi=ck)
j
=
1
,
2
,
…
,
n
l
=
1
,
2
,
…
S
j
k
=
1
,
2
,
…
,
K
j=1,2,\dots,n \quad l=1,2,\dots S_j \quad k=1,2,\dots,K
j=1,2,…,nl=1,2,…Sjk=1,2,…,K
对于给定的实例
x
=
(
x
(
1
)
,
x
(
2
)
,
…
,
x
(
n
)
)
T
x=(x^{(1)},x^{(2)},\dots,x^{(n)})^T
x=(x(1),x(2),…,x(n))T,计算
P
(
Y
=
c
k
)
∏
j
=
1
n
P
(
x
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
k
=
1
,
2
,
…
,
K
P(Y=c_k)\prod_{j=1}^{n}P(x^{(j)}=x^{(j)}|Y=c_k) \quad k=1,2,\dots,K
P(Y=ck)j=1∏nP(x(j)=x(j)∣Y=ck)k=1,2,…,K
3:确定实例 x x x的类:
y = a r g m a x c k P ( Y = c k ) ∏ j = 1 n P ( x ( j ) = x ( j ) ∣ Y = c k ) y=\mathop{argmax}_{c_k} P(Y=c_k)\prod_{j=1}^{n}P(x^{(j)}=x^{(j)}|Y=c_k) y=argmaxckP(Y=ck)j=1∏nP(x(j)=x(j)∣Y=ck)
代码展示
使用来自UCI machine learning repository的wine分类数据。
或点击网盘链接:https://pan.baidu.com/s/1Ol8k6J3eBbs7AhfLM-BU7A直接下载。
网盘提取码:qfgq
[注] : 请将csv文件与可执行py文件放入同一文件夹。
# -*- coding: utf-8 -*-
#==========================================导言区================================================#
import pandas as pd
import numpy as np
from time import sleep
from tqdm import tqdm
import warnings
#==========================================数据集分类器================================================#
'''
本函数传出的是一个元组数据
请使用A[0]索引训练集,A[1]索引测试集
使用方法:
TrainTestSplit(数据框,测试集占数据集比例)
'''
def TrainTestSplit(data,scale): #TTS(df,测试集占数据集比例)
#随机生成测试集和训练集
s=int(scale*len(data))
index=np.random.randint(len(data),size=(s,1)) #根据数据集长度生成随机数作为index
indexnum=int(len(index))
train_set=[]
drop_index=[]
for i in range(0,indexnum): #遍历选取
a=index[i][0]
train=list(data.iloc[a])
train_set.append(train)
drop_index.append(a) #记录需要删除的列
test_set=data.drop(drop_index)
train_set=pd.DataFrame(train_set)
test_set=test_set.reset_index(drop=True)
train_set=train_set.reset_index(drop=True)
return train_set,test_set
#==========================================以下为朴素贝叶斯自定义函数================================================#
'''
本函数主要实现朴素贝叶斯分类
对数据集的要求为:
(1)第一列数据为分类数据
(2)数据结构为数据框结构
(3)需要准备的数据为
/test_set-->测试集
/train_set-->训练集
/classify-->分类集
使用方法:
PiorP(训练集,分类集)
CP(输入数据,训练集,分类集)
argmax(输入数据,训练集,分类集)
NaiveBayesClassify(测试集,训练集,分类集)
'''
#先验概率
def PirorP(train_set,classify, laplace = True):
K=len(classify)
N=len(train_set)
P=[]
y=train_set.iloc[:,0] #数据集的第一列是分类数据
index=0
for k in range(K): #遍历K
index=len(train_set[train_set[0]==float(classify[k])])
if laplace == False:
p=index/N
else :
p=(index+1)/(N+K)
P.append(p)
index=0 #标记清零
P=np.array(P)
return(P)
#条件概率(每次传入一行)
def ConditionalP(input_x,train_set,classify,s_j,laplace = True):
J=input_x.shape[1] #J是特征值x的维数
cp=[]
for k in range(len(classify)):
e=[]
for j in range(J-1):
a=len(train_set[train_set[j+1]==float(input_x[j+1])][train_set[0]==float(classify[k])])
b=len(train_set[train_set[0]==float(classify[2])])
if laplace == False:
c_p=(a/b)
else:
c_p=(a+1)/(b+s_j)
e.append(c_p)
e=np.array(e)
p_k=np.prod(e)
cp.append(p_k)
cp=np.array(cp)
return(cp)
#argmax函数
def Argmax(input_x,train_set,classify,s_j,laplace = True):
a=PirorP(train_set,classify, laplace = laplace)
b=ConditionalP(input_x,train_set,classify,s_j,laplace = laplace)
likelihood=a*b
c_k=np.argmax(likelihood)+1
return(c_k)
#贝叶斯
def NaiveBayesClassify(test_set,train_set,classify, laplace = True):
'''
默认引入Laplace平滑项,当Laplace设置为False时,取消引入Laplace
'''
B=[]
s_j=len(test_set)
for i in tqdm(range(len(test_set)),ncols=70):
input_x=pd.DataFrame(list(test_set.iloc[i])).T
a=Argmax(input_x,train_set,classify,s_j,laplace = laplace)
B.append(a)
B=pd.DataFrame(B)
Bayes_classify=pd.concat([B,test_set],axis=1)
Bayes_classify.rename(columns={0:"贝叶斯分类结果"},inplace=True)
#计算正确率
a=Bayes_classify
index=pd.DataFrame(a.iloc[:,0]-a.iloc[:,1])
print('分类正确率为:',len(index[index.iloc[:,0]==0])/len(a))
#输出结果
print(Bayes_classify)
#==========================================以下为数据输入及运行================================================#
#数据导入
data=open('wine2.csv',encoding="utf-8")
data=pd.read_csv(data)
#数据分类
a=TrainTestSplit(data,0.3)
train_set=a[0]
test_set=a[1]
#数据分类指标
classify=([1,2,3])
#调用朴素贝叶斯分类函数
warnings.filterwarnings('ignore') #忽略恼人的warning输出
print('==================训练集==================')
print(train_set)
print('==================测试集==================')
print(test_set)
print('==================引入laplace平滑前==================')
NaiveBayesClassify(test_set,train_set,classify,False)
print('==================引入laplace平滑后==================')
NaiveBayesClassify(test_set,train_set,classify)
input('press any key to close')
运行结果
==================训练集==================
0 1 2 3 4 5 6 7 8 9 10 11 12 13
0 2.0 12.08 1.83 2.32 18.5 81.0 1.60 1.50 0.52 1.64 2.40 1.08 2.27 480.0
1 1.0 13.76 1.53 2.70 19.5 132.0 2.95 2.74 0.50 1.35 5.40 1.25 3.00 1235.0
2 1.0 13.20 1.78 2.14 11.2 100.0 2.65 2.76 0.26 1.28 4.38 1.05 3.40 1050.0
3 2.0 12.21 1.19 1.75 16.8 151.0 1.85 1.28 0.14 2.50 2.85 1.28 3.07 718.0
4 2.0 12.64 1.36 2.02 16.8 100.0 2.02 1.41 0.53 0.62 5.75 0.98 1.59 450.0
5 3.0 12.87 4.61 2.48 21.5 86.0 1.70 0.65 0.47 0.86 7.65 0.54 1.86 625.0
6 1.0 13.28 1.64 2.84 15.5 110.0 2.60 2.68 0.34 1.36 4.60 1.09 2.78 880.0
7 1.0 14.37 1.95 2.50 16.8 113.0 3.85 3.49 0.24 2.18 7.80 0.86 3.45 1480.0
8 3.0 13.17 5.19 2.32 22.0 93.0 1.74 0.63 0.61 1.55 7.90 0.60 1.48 725.0
9 1.0 14.19 1.59 2.48 16.5 108.0 3.30 3.93 0.32 1.86 8.70 1.23 2.82 1680.0
10 1.0 13.77 1.90 2.68 17.1 115.0 3.00 2.79 0.39 1.68 6.30 1.13 2.93 1375.0
11 2.0 12.17 1.45 2.53 19.0 104.0 1.89 1.75 0.45 1.03 2.95 1.45 2.23 355.0
12 3.0 12.20 3.03 2.32 19.0 96.0 1.25 0.49 0.40 0.73 5.50 0.66 1.83 510.0
13 1.0 12.93 3.80 2.65 18.6 102.0 2.41 2.41 0.25 1.98 4.50 1.03 3.52 770.0
14 1.0 13.51 1.80 2.65 19.0 110.0 2.35 2.53 0.29 1.54 4.20 1.10 2.87 1095.0
15 1.0 13.30 1.72 2.14 17.0 94.0 2.40 2.19 0.27 1.35 3.95 1.02 2.77 1285.0
16 2.0 12.37 1.63 2.30 24.5 88.0 2.22 2.45 0.40 1.90 2.12 0.89 2.78 342.0
17 3.0 13.17 2.59 2.37 20.0 120.0 1.65 0.68 0.53 1.46 9.30 0.60 1.62 840.0
18 1.0 12.93 3.80 2.65 18.6 102.0 2.41 2.41 0.25 1.98 4.50 1.03 3.52 770.0
19 2.0 13.34 0.94 2.36 17.0 110.0 2.53 1.30 0.55 0.42 3.17 1.02 1.93 750.0
20 3.0 13.40 3.91 2.48 23.0 102.0 1.80 0.75 0.43 1.41 7.30 0.70 1.56 750.0
21 1.0 13.86 1.35 2.27 16.0 98.0 2.98 3.15 0.22 1.85 7.22 1.01 3.55 1045.0
22 3.0 12.51 1.24 2.25 17.5 85.0 2.00 0.58 0.60 1.25 5.45 0.75 1.51 650.0
23 3.0 12.88 2.99 2.40 20.0 104.0 1.30 1.22 0.24 0.83 5.40 0.74 1.42 530.0
24 2.0 12.70 3.87 2.40 23.0 101.0 2.83 2.55 0.43 1.95 2.57 1.19 3.13 463.0
25 3.0 13.49 3.59 2.19 19.5 88.0 1.62 0.48 0.58 0.88 5.70 0.81 1.82 580.0
26 1.0 13.58 1.66 2.36 19.1 106.0 2.86 3.19 0.22 1.95 6.90 1.09 2.88 1515.0
27 2.0 12.07 2.16 2.17 21.0 85.0 2.60 2.65 0.37 1.35 2.76 0.86 3.28 378.0
28 1.0 13.28 1.64 2.84 15.5 110.0 2.60 2.68 0.34 1.36 4.60 1.09 2.78 880.0
29 1.0 13.90 1.68 2.12 16.0 101.0 3.10 3.39 0.21 2.14 6.10 0.91 3.33 985.0
30 3.0 13.17 5.19 2.32 22.0 93.0 1.74 0.63 0.61 1.55 7.90 0.60 1.48 725.0
31 1.0 13.05 1.65 2.55 18.0 98.0 2.45 2.43 0.29 1.44 4.25 1.12 2.51 1105.0
32 2.0 11.79 2.13 2.78 28.5 92.0 2.13 2.24 0.58 1.76 3.00 0.97 2.44 466.0
33 2.0 12.21 1.19 1.75 16.8 151.0 1.85 1.28 0.14 2.50 2.85 1.28 3.07 718.0
34 1.0 14.06 1.63 2.28 16.0 126.0 3.00 3.17 0.24 2.10 5.65 1.09 3.71 780.0
35 3.0 13.45 3.70 2.60 23.0 111.0 1.70 0.92 0.43 1.46 10.68 0.85 1.56 695.0
36 2.0 12.07 2.16 2.17 21.0 85.0 2.60 2.65 0.37 1.35 2.76 0.86 3.28 378.0
37 2.0 12.16 1.61 2.31 22.8 90.0 1.78 1.69 0.43 1.56 2.45 1.33 2.26 495.0
38 1.0 14.23 1.71 2.43 15.6 127.0 2.80 3.06 0.28 2.29 5.64 1.04 3.92 1065.0
39 2.0 11.84 2.89 2.23 18.0 112.0 1.72 1.32 0.43 0.95 2.65 0.96 2.52 500.0
40 2.0 12.42 2.55 2.27 22.0 90.0 1.68 1.84 0.66 1.42 2.70 0.86 3.30 315.0
41 1.0 13.87 1.90 2.80 19.4 107.0 2.95 2.97 0.37 1.76 4.50 1.25 3.40 915.0
42 2.0 13.11 1.01 1.70 15.0 78.0 2.98 3.18 0.26 2.28 5.30 1.12 3.18 502.0
43 3.0 12.45 3.03 2.64 27.0 97.0 1.90 0.58 0.63 1.14 7.50 0.67 1.73 880.0
44 1.0 13.88 1.89 2.59 15.0 101.0 3.25 3.56 0.17 1.70 5.43 0.88 3.56 1095.0
45 1.0 13.07 1.50 2.10 15.5 98.0 2.40 2.64 0.28 1.37 3.70 1.18 2.69 1020.0
46 2.0 12.60 1.34 1.90 18.5 88.0 1.45 1.36 0.29 1.35 2.45 1.04 2.77 562.0
47 2.0 12.99 1.67 2.60 30.0 139.0 3.30 2.89 0.21 1.96 3.35 1.31 3.50 985.0
48 1.0 13.51 1.80 2.65 19.0 110.0 2.35 2.53 0.29 1.54 4.20 1.10 2.87 1095.0
49 2.0 12.21 1.19 1.75 16.8 151.0 1.85 1.28 0.14 2.50 2.85 1.28 3.07 718.0
50 2.0 11.45 2.40 2.42 20.0 96.0 2.90 2.79 0.32 1.83 3.25 0.80 3.39 625.0
51 2.0 12.00 1.51 2.42 22.0 86.0 1.45 1.25 0.50 1.63 3.60 1.05 2.65 450.0
52 3.0 13.27 4.28 2.26 20.0 120.0 1.59 0.69 0.43 1.35 10.20 0.59 1.56 835.0
==================测试集==================
class x_1 x_2 x_3 x_4 x_5 x_6 x_7 x_8 x_9 x_10 x_11 x_12 x_13
0 1 13.16 2.36 2.67 18.6 101 2.80 3.24 0.30 2.81 5.680000 1.03 3.17 1185
1 1 13.24 2.59 2.87 21.0 118 2.80 2.69 0.39 1.82 4.320000 1.04 2.93 735
2 1 14.20 1.76 2.45 15.2 112 3.27 3.39 0.34 1.97 6.750000 1.05 2.85 1450
3 1 14.39 1.87 2.45 14.6 96 2.50 2.52 0.30 1.98 5.250000 1.02 3.58 1290
4 1 14.06 2.15 2.61 17.6 121 2.60 2.51 0.31 1.25 5.050000 1.06 3.58 1295
.. ... ... ... ... ... ... ... ... ... ... ... ... ... ...
127 3 13.40 4.60 2.86 25.0 112 1.98 0.96 0.27 1.11 8.500000 0.67 1.92 630
128 3 12.77 2.39 2.28 19.5 86 1.39 0.51 0.48 0.64 9.899999 0.57 1.63 470
129 3 14.16 2.51 2.48 20.0 91 1.68 0.70 0.44 1.24 9.700000 0.62 1.71 660
130 3 13.71 5.65 2.45 20.5 95 1.68 0.61 0.52 1.06 7.700000 0.64 1.74 740
131 3 14.13 4.10 2.74 24.5 96 2.05 0.76 0.56 1.35 9.200000 0.61 1.60 560
[132 rows x 14 columns]
==================引入laplace平滑前==================
100%|███████████████████████████████| 132/132 [00:09<00:00, 14.26it/s]
分类正确率为: 0.3106060606060606
贝叶斯分类结果 class x_1 x_2 x_3 x_4 x_5 x_6 x_7 x_8 x_9 x_10 x_11 x_12 x_13
0 1 1 13.16 2.36 2.67 18.6 101 2.80 3.24 0.30 2.81 5.680000 1.03 3.17 1185
1 1 1 13.24 2.59 2.87 21.0 118 2.80 2.69 0.39 1.82 4.320000 1.04 2.93 735
2 1 1 14.20 1.76 2.45 15.2 112 3.27 3.39 0.34 1.97 6.750000 1.05 2.85 1450
3 1 1 14.39 1.87 2.45 14.6 96 2.50 2.52 0.30 1.98 5.250000 1.02 3.58 1290
4 1 1 14.06 2.15 2.61 17.6 121 2.60 2.51 0.31 1.25 5.050000 1.06 3.58 1295
.. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
127 1 3 13.40 4.60 2.86 25.0 112 1.98 0.96 0.27 1.11 8.500000 0.67 1.92 630
128 1 3 12.77 2.39 2.28 19.5 86 1.39 0.51 0.48 0.64 9.899999 0.57 1.63 470
129 1 3 14.16 2.51 2.48 20.0 91 1.68 0.70 0.44 1.24 9.700000 0.62 1.71 660
130 1 3 13.71 5.65 2.45 20.5 95 1.68 0.61 0.52 1.06 7.700000 0.64 1.74 740
131 1 3 14.13 4.10 2.74 24.5 96 2.05 0.76 0.56 1.35 9.200000 0.61 1.60 560
[132 rows x 15 columns]
==================引入laplace平滑后==================
100%|███████████████████████████████| 132/132 [00:08<00:00, 14.97it/s]
分类正确率为: 0.5227272727272727
贝叶斯分类结果 class x_1 x_2 x_3 x_4 x_5 x_6 x_7 x_8 x_9 x_10 x_11 x_12 x_13
0 1 1 13.16 2.36 2.67 18.6 101 2.80 3.24 0.30 2.81 5.680000 1.03 3.17 1185
1 1 1 13.24 2.59 2.87 21.0 118 2.80 2.69 0.39 1.82 4.320000 1.04 2.93 735
2 1 1 14.20 1.76 2.45 15.2 112 3.27 3.39 0.34 1.97 6.750000 1.05 2.85 1450
3 1 1 14.39 1.87 2.45 14.6 96 2.50 2.52 0.30 1.98 5.250000 1.02 3.58 1290
4 1 1 14.06 2.15 2.61 17.6 121 2.60 2.51 0.31 1.25 5.050000 1.06 3.58 1295
.. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
127 3 3 13.40 4.60 2.86 25.0 112 1.98 0.96 0.27 1.11 8.500000 0.67 1.92 630
128 1 3 12.77 2.39 2.28 19.5 86 1.39 0.51 0.48 0.64 9.899999 0.57 1.63 470
129 3 3 14.16 2.51 2.48 20.0 91 1.68 0.70 0.44 1.24 9.700000 0.62 1.71 660
130 2 3 13.71 5.65 2.45 20.5 95 1.68 0.61 0.52 1.06 7.700000 0.64 1.74 740
131 2 3 14.13 4.10 2.74 24.5 96 2.05 0.76 0.56 1.35 9.200000 0.61 1.60 560
[132 rows x 15 columns]
press any key to close
可见:通过使用30%的数据进行训练,在引入Laplace平滑前分类正确率在30%–40%左右,而在引入Laplace平滑后,分类正确率大约在50%–60%左右。这是由于特征数据未在训练数据中出现而导致的分类失败。故模型还有继续改进空间。