机器学习 高斯判别分析的数学原理及Python简单可视化实现

一、生成学习算法

判别学习算法,为对整个样本集进行总体建模(即对P{y|x}建模,给定特征时输出某种结果的概率),训练得到参数后对给定的输入代入参数得到输出。
在分类问题中,有一类算法叫生成学习算法,会对不同的类别分别进行建模(即对P{x|y}建模,给定结果时显示某种特征的概率),然后把输入分别用不同类别模型进行处理,看最符合哪个。
使用生成模型进行输出分类(以0-1分类为例)时,往往还会计算P{y}的分布,然后由贝叶斯公式 P ( y = 1 ∣ x ) = P ( x ∣ y = 1 ) P ( y = 1 ) P ( x ) = P ( x ∣ y = 1 ) P ( y = 1 ) ∑ i = 0 i = 1 P ( x ∣ y = i ) P ( y = i ) = P ( x ∣ y = 1 ) P ( y = 1 ) P ( x ∣ y = 0 ) P ( y = 0 ) + P ( x ∣ y = 1 ) P ( y = 1 ) P(y=1|x)= \frac{P(x|y=1)P(y=1)}{P(x)}= \frac{P(x|y=1)P(y=1)}{\sum_{i=0}^{i=1}P(x|y=i)P(y=i)}= \frac{P(x|y=1)P(y=1)}{P(x|y=0)P(y=0)+P(x|y=1)P(y=1)} P(y=1x)=P(x)P(xy=1)P(y=1)=i=0i=1P(xy=i)P(y=i)P(xy=1)P(y=1)=P(xy=0)P(y=0)+P(xy=1)P(y=1)P(xy=1)P(y=1)
高斯判别分析就是一种生成学习算法,前提假设为:特征xi均连续,Y服从伯努利分布,P(x|y)服从正态分布(可能为高维)。在给出高斯判别分析之前,先给出高维正态概率分布。

二、协方差与高维正态分布

令X,Y为两个随机变量,它们的协方差Cov(X,Y)定义为 C o v ( X , Y ) = E [ X − E ( X ) ( Y − E ( Y ) ] Cov(X,Y)=E[X-E(X)(Y-E(Y)] Cov(X,Y)=E[XE(X)(YE(Y)],其中,E(X)为随机变量X的数学期望(数学期望的定义为 E ( X ) = ∫ − ∞ + ∞ x f X ( x ) d x E(X)=\int_{-\infty}^{+\infty}xf_X(x)dx E(X)=+xfX(x)dx)。协方差用于衡量两个随机变量的线性关系水平,相关系数 ρ \rho ρ定义为 ρ X Y = C o v ( X , Y ) D ( X ) ∗ D ( Y ) \rho_{XY}=\frac{Cov(X,Y)}{\sqrt{D(X)*D(Y)}} ρXY=D(X)D(Y) Cov(X,Y)(D(X)为随机变量X的二阶中心矩,即E{|X-E(X)|2})。 ρ X Y \rho_{XY} ρXY取值范围为[-1,1]闭区间,值为1时X,Y线性正相关(Y=aX,a>0),为-1时X,Y线性负相关(Y=aX,a<0),为0时没有任何线性关系。
给出协方差和相关系数的定义后,对于n个随机变量X1,X2…Xn,就可以得到协方差矩阵的定义 C ^ = \hat C= C^= [ C X 1 X 1 C X 1 X 2 . . . C X 1 X n C X 2 X 1 C X 2 X 2 . . . C X 2 X n . . . C X n X 1 C X n X 2 . . . C X n X n ] \left[\begin{matrix}C_{X1X1} & C_{X1X2} & ...C_{X1Xn}\\C_{X2X1} & C_{X2X2} & ... C_{X2Xn}\\...\\C_{XnX1} & C_{XnX2} & ...C_{XnXn} \end{matrix}\right] CX1X1CX2X1...CXnX1CX1X2CX2X2CXnX2...CX1Xn...CX2Xn...CXnXn,由相关系数 ρ \rho ρ的定义可以把协方差矩阵 C ^ \hat C C^写成
C ^ = \hat C= C^= [ ρ X 1 X 1 D ( X 1 ) ∗ D ( X 1 ) ρ X 1 X 2 D ( X 1 ) ∗ D ( X 2 ) . . . ρ X 1 X n D ( X 1 ) ∗ D ( X n ) ρ X 2 X 1 D ( X 2 ) ∗ D ( X 1 ) ρ X 2 X 2 D ( X 2 ) ∗ D ( X 2 ) . . . ρ X 2 X n D ( X 2 ) ∗ D ( X n ) . . . ρ X n X 1 D ( X n ) ∗ D ( X 1 ) ρ X n X 2 D ( X n ) ∗ D ( X 2 ) . . . ρ X n X n D ( X n ) ∗ D ( X n ) ] \left[ \begin{matrix}\rho_{X1X1}\sqrt{D(X1)*D(X1)} & \rho_{X1X2}\sqrt{D(X1)*D(X2)} &... \rho_{X1Xn}\sqrt{D(X1)*D(Xn)}\\\rho_{X2X1}\sqrt{D(X2)*D(X1)} & \rho_{X2X2}\sqrt{D(X2)*D(X2)} & ... \rho_{X2Xn}\sqrt{D(X2)*D(Xn)}\\ ...\\\rho_{XnX1}\sqrt{D(Xn)*D(X1)} & \rho_{XnX2}\sqrt{D(Xn)*D(X2)} & ... \rho_{XnXn}\sqrt{D(Xn)*D(Xn)}\end{matrix}\right] ρX1X1D(X1)D(X1) ρX2X1D(X2)D(X1) ...ρXnX1D(Xn)D(X1) ρX1X2D(X1)D(X2) ρX2X2D(X2)D(X2) ρXnX2D(Xn)D(X2) ...ρX1XnD(X1)D(Xn) ...ρX2XnD(X2)D(Xn) ...ρXnXnD(Xn)D(Xn)
把随机变量用向量表示为 X ^ = [ X 1 , X 2... X n ] T \hat X=[X1,X2...Xn]^T X^=[X1,X2...Xn]T,每个随机向量的数学期望 E ( X i ) = μ i E(X_i)=\mu_i E(Xi)=μi也用向量写为 μ ^ = [ μ 1 , μ 2 . . . μ n ] T \hat \mu=[\mu_1,\mu_2...\mu_n]^T μ^=[μ1,μ2...μn]T,则高维正态分布的概率密度函数可以用协方差矩阵, X ^ \hat X X^ μ ^ \hat \mu μ^写为 ϕ ( x 1 , x 2... x n ) = 1 ( 2 π ) n 2 d e t ( C ^ ) 1 2 e x p [ − 1 2 ( X ^ − μ ^ ) T C ^ − 1 ( X ^ − μ ^ ) ] \phi(x1,x2...xn)=\frac{1}{(2\pi)^\frac{n}{2} det(\hat C)^{\frac{1}{2}}} exp[-\frac{1}{2}(\hat X-\hat\mu)^T \hat C^{-1}(\hat X-\hat\mu)] ϕ(x1,x2...xn)=(2π)2ndet(C^)211exp[21(X^μ^)TC^1(X^μ^)],即X1=x1,X2=x2…Xn=xn的概率可以以此求出。
协方差有对称性, C o v ( X , Y ) = C o v ( Y , X ) Cov(X,Y)=Cov(Y,X) Cov(X,Y)=Cov(Y,X),也就是说, C o v ( X i , X j ) = C o v ( X i , X j ) Cov(Xi,Xj)=Cov(Xi,Xj) Cov(Xi,Xj)=Cov(Xi,Xj),协方差矩阵为一个对称矩阵。其中,若Xi与Xj相互独立,则 C o v ( X i , X j ) = 0 , ρ X i X j Cov(Xi,Xj)=0,\rho_{XiXj} Cov(Xi,Xj)=0,ρXiXj也等于0。也就是说,若这n个随机变量两两独立(相互独立要求更严格当然也成立),则协方差矩阵非对角元的协方差均为0,该矩阵成了对角矩阵。而对角元由数学期望和方差的定义可得, C o v ( X i , X i ) = E [ X i − E ( X i ) ( X i − E ( X i ) ] = D ( X i ) = σ i 2 Cov(Xi,Xi)=E[Xi-E(Xi)(Xi-E(Xi)]=D(Xi)=\sigma_i^2 Cov(Xi,Xi)=E[XiE(Xi)(XiE(Xi)]=D(Xi)=σi2,则协方差矩阵的行列式可以直接用 d e t ( C ^ ) = ∏ i = 1 i = n σ i 2 det(\hat C)=\prod_{i=1}^{i=n} \sigma_i^2 det(C^)=i=1i=nσi2来求得。
从几何上看,以二维高斯分布为例,当方差变大时,对角元Cov(Xi,Xi变大)高斯分布的曲面变得矮平,当方差变小时,高斯分布的曲面变得尖锐。当Cov(X1,X2)为0时,X1与X2相互独立,高斯分布在二维空间上各向同性,即沿任意y=ax都是一样的。而当Cov(X1,X2)趋向1时,高斯分布曲面趋向往y=x压缩,沿Z方向做切面会看到一个长轴在y=x上的椭圆。当Cov(X1,X2)趋向-1时,高斯分布曲面趋向往y=-x压缩,沿Z方向做切面会看到一个长轴在y=-x上的椭圆,这就是协方差矩阵对角元与非对角元几何上的直观意义。均值向量 μ ^ = [ μ 1 , μ 2 ] T \hat \mu=[\mu_1,\mu_2]^T μ^=[μ1,μ2]T则表示高斯曲面的几何对称中心,它的几何对称中心就在点 ( μ 1 , μ 2 ) (\mu_1,\mu_2) (μ1,μ2),均值发生改变,高斯分布曲面形状不变,在XY平面上发生几何平移。

三、高斯判别分析的数学过程

根据Y服从伯努利分布,即y=0或y=1,可得总体 P ( Y = 1 ) = ϕ , ϕ P(Y=1)=\phi,\phi P(Y=1)=ϕϕ为未知参数。 C ^ = [ C X 1 X 1 C X 1 X 2 . . . C X 1 X n C X 2 X 1 C X 2 X 2 . . . C X 2 X n . . . C X n X 1 C X n X 2 . . . C X n X n ] \hat C=\left[\begin{matrix}C_{X1X1} & C_{X1X2} & ...C_{X1Xn}\\C_{X2X1} & C_{X2X2} & ... C_{X2Xn}\\...\\C_{XnX1} & C_{XnX2} & ...C_{XnXn} \end{matrix}\right] C^=CX1X1CX2X1...CXnX1CX1X2CX2X2CXnX2...CX1Xn...CX2Xn...CXnXn以及 μ 0 = [ E ( X 1 ∣ Y = 0 ) , E ( X 2 ∣ Y = 0 ) . . E ( X n ∣ Y = 0 ) ] T , μ 1 = [ E ( X 1 ∣ Y = 1 ) , E ( X 2 ∣ Y = 1 ) . . E ( X n ∣ Y = 1 ) ] T \mu_0=[E(X1|Y=0),E(X2|Y=0)..E(Xn|Y=0)]^T,\mu_1=[E(X1|Y=1),E(X2|Y=1)..E(Xn|Y=1)]^T μ0=[E(X1Y=0),E(X2Y=0)..E(XnY=0)]T,μ1=[E(X1Y=1),E(X2Y=1)..E(XnY=1)]T为未知参数, X ^ = [ X 1 , X 2... X n ] T , \hat X=[X1,X2...Xn]^T, X^=[X1,X2...Xn]T,
P ( y ) = ϕ y ( 1 − ϕ ) 1 − y , y = 0 , 1 P(y)=\phi^y (1-\phi)^{1-y},y=0,1 P(y)=ϕy(1ϕ)1y,y=0,1
P ( x ∣ y = 0 ) = 1 ( 2 π ) n 2 d e t ( C ^ ) 1 2 e x p [ − 1 2 ( X ^ − μ ^ 0 ) T C ^ − 1 ( X ^ − μ ^ 0 ) ] P(x|y=0)=\frac{1}{(2\pi)^\frac{n}{2} det(\hat C)^{\frac{1}{2}}} exp[-\frac{1}{2}(\hat X-\hat\mu_0)^T \hat C^{-1}(\hat X-\hat\mu_0)] P(xy=0)=(2π)2ndet(C^)211exp[21(X^μ^0)TC^1(X^μ^0)]
P ( x ∣ y = 1 ) = 1 ( 2 π ) n 2 d e t ( C ^ ) 1 2 e x p [ − 1 2 ( X ^ − μ ^ 1 ) T C ^ − 1 ( X ^ − μ ^ 1 ) ] P(x|y=1)=\frac{1}{(2\pi)^\frac{n}{2} det(\hat C)^{\frac{1}{2}}} exp[-\frac{1}{2}(\hat X-\hat\mu_1)^T \hat C^{-1}(\hat X-\hat\mu_1)] P(xy=1)=(2π)2ndet(C^)211exp[21(X^μ^1)TC^1(X^μ^1)]
对样本(设有m个样本)进行最大似然性估计,可以得到取对数的似然函数 l n ( L ( ϕ , μ 0 , μ 1 , C ^ ) = ∏ i = 1 i = n P ( x i , y i ) = ∏ i = 1 i = n P ( x i ∣ y i ) P ( y i ) ln(L(\phi,\mu_0,\mu_1,\hat C)=\prod_{i=1}^{i=n}P(x_i,y_i)=\prod_{i=1}^{i=n}P(x_i|y_i)P(y_i) ln(L(ϕ,μ0,μ1,C^)=i=1i=nP(xi,yi)=i=1i=nP(xiyi)P(yi)
根据最大似然性原则进行参数估计,令 ∂ l n ( L ( ϕ , μ 0 , μ 1 , C ^ ) ) ∂ ϕ = 0 \frac{\partial ln(L(\phi,\mu_0,\mu_1,\hat C))}{\partial\phi}=0 ϕln(L(ϕ,μ0,μ1,C^))=0,可得 ϕ = ∑ i = 1 i = m y i m = 1 的 数 量 样 本 数 \phi=\frac{\sum_{i=1}^{i=m} y_i}{m}=\frac{1的数量}{样本数} ϕ=mi=1i=myi=1,即参数 ϕ \phi ϕ应选择样本集中标签为1的样本的比例。
同理令 ∂ l n ( L ( ϕ , μ 0 , μ 1 , C ^ ) ) ∂ μ 0 = 0 \frac{\partial ln(L(\phi,\mu_0,\mu_1,\hat C))}{\partial\mu_0}=0 μ0ln(L(ϕ,μ0,μ1,C^))=0,可得 μ 0 = 样 本 中 标 签 为 0 时 对 应 X ^ i 之 和 样 本 中 0 的 数 量 \mu_0=\frac{样本中标签为0时对应\hat X_i之和}{样本中0的数量} μ0=00X^i
∂ l n ( L ( ϕ , μ 0 , μ 1 , C ^ ) ) ∂ μ 1 = 0 \frac{\partial ln(L(\phi,\mu_0,\mu_1,\hat C))}{\partial\mu_1}=0 μ1ln(L(ϕ,μ0,μ1,C^))=0,可得 μ 1 = 样 本 中 标 签 为 1 时 对 应 X ^ i 之 和 样 本 中 1 的 数 量 \mu_1=\frac{样本中标签为1时对应\hat X_i之和}{样本中1的数量} μ1=11X^i
∂ l n ( L ( ϕ , μ 0 , μ 1 , C ^ ) ) ∂ μ 1 = 0 \frac{\partial ln(L(\phi,\mu_0,\mu_1,\hat C))}{\partial\mu_1}=0 μ1ln(L(ϕ,μ0,μ1,C^))=0,可得 C ^ = 1 m ∑ i = 1 i = m ( x i − μ y i ) ( x i − μ y i ) T \hat C=\frac{1}{m}\sum_{i=1}^{i=m}(x_i-\mu_{yi})(x_i-\mu_{yi})^T C^=m1i=1i=m(xiμyi)(xiμyi)T 注:yi为1时 μ y i \mu_{yi} μyi即为上式 μ 1 \mu_1 μ1,yi为0时 μ y i \mu_{yi} μyi即为上式 μ 0 \mu_0 μ0

四、二维特征高斯判别分析的Python简单实现

import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl
import math
#假设y服从伯努利分布,P(x|y=0)和P(x|y=1)服从二维高斯分布
#解决中文显示问题 
mpl.rcParams["font.sans-serif"] = [u"SimHei"]#黑体显示图中中文
mpl.rcParams["axes.unicode_minus"] = False#解决负号显示异常问题
#设定正负样本数分别为100,50
neg_num,pos_num=50,100
#生成样本数据
y1_x1_mu,y1_x1_sigma = 5,1
y1_x1 = np.random.normal(y1_x1_mu,y1_x1_sigma,pos_num)#y=1时的x1
y1_x2_mu,y1_x2_sigma = 8,1
y1_x2 = np.random.normal(y1_x2_mu,y1_x2_sigma,pos_num)#y=1时的x2
y0_x1_mu,y0_x1_sigma = 2,0.5
y0_x1 = np.random.normal(y0_x1_mu,y0_x1_sigma,neg_num)#y=0时的x1
y0_x2_mu,y0_x2_sigma = 3,0.2
y0_x2 = np.random.normal(y0_x2_mu,y0_x2_sigma,neg_num)#y=0时的x2
#整合训练集 train_set第二维上分别为特征x1,特征x2和标签y
train_set = np.zeros((pos_num+neg_num,3))
for i in range(0,neg_num):
    train_set[i,0] = y0_x1[i]
    train_set[i,1] = y0_x2[i]
    train_set[i,2] = 0
for i in range(neg_num,(neg_num+pos_num)):
    train_set[i,0] = y1_x1[i-neg_num]#注意y1_x1的下标~~
    train_set[i,1] = y1_x2[i-neg_num]
    train_set[i,2] = 1
#计算参数phi
phi = pos_num/(pos_num+neg_num)
#计算参数mu0
mu0 = np.zeros((2,1))
for i in range(0,neg_num):
    mu0[0] += train_set[i,0]
    mu0[1] += train_set[i,1]
mu0[0] /= neg_num
mu0[1] /= neg_num
#计算参数mu1
mu1 = np.zeros((2,1))
for i in range(neg_num,neg_num+pos_num):
    mu1[0] += train_set[i,0]
    mu1[1] += train_set[i,1]
mu1[0] /= pos_num
mu1[1] /= pos_num
#计算参数C
C = np.zeros((2,2))
for i in range(0,neg_num+pos_num):
    if train_set[i,2] == 0:
        C[0,0] += (train_set[i,0]-mu0[0])**2
        C[0,1] += (train_set[i,0]-mu0[0])*(train_set[i,1]-mu0[1])
        C[1,0] += (train_set[i,1]-mu0[1])*(train_set[i,0]-mu0[0])
        C[1,1] += (train_set[i,1]-mu0[1])**2
    if train_set[i,2] == 1:
        C[0,0] += (train_set[i,0]-mu1[0])**2
        C[0,1] += (train_set[i,0]-mu1[0])*(train_set[i,1]-mu1[1])
        C[1,0] += (train_set[i,1]-mu1[1])*(train_set[i,0]-mu1[0])
        C[1,1] += (train_set[i,1]-mu1[1])**2
C[0,0] /= (neg_num+pos_num)
C[0,1] /= (neg_num+pos_num)
C[1,0] /= (neg_num+pos_num)
C[1,1] /= (neg_num+pos_num)
det_C = C[0,0]*C[1,1]-C[0,1]*C[1,0]#C的行列式
C_inverse = np.zeros((2,2))#C的逆矩阵
C_inverse[0,0] = -C[1,1]/(C[0,1]**2-C[0,0]*C[1,1])
C_inverse[0,1] = C[0,1]/(C[0,1]**2-C[0,0]*C[1,1])
C_inverse[1,0] = C[0,1]/(C[0,1]**2-C[0,0]*C[1,1])
C_inverse[1,1] = -C[0,0]/(C[0,1]**2-C[0,0]*C[1,1])
#预测函数
def predict(inX1,inX2):
    const_parameter = 1/(2*np.pi*np.sqrt(det_C))#二项高斯分布的常系数
    x_y0_temp1 = (inX1-mu0[0])*C_inverse[0,0]+(inX2-mu0[1])*C_inverse[1,0]#(x-mu0)^T*C_inverse的中间变量
    x_y0_temp2 = (inX1-mu0[0])*C_inverse[0,1]+(inX2-mu0[1])*C_inverse[1,1]#(x-mu0)^T*C_inverse的中间变量
    x_y0_index = x_y0_temp1*(inX1-mu0[0])+x_y0_temp2*(inX2-mu0[1])
    Pro_x_y0 = const_parameter*(math.pow(math.e,(-0.5*x_y0_index)))#P(x|y=0)
    x_y1_temp1 = (inX1-mu1[0])*C_inverse[0,0]+(inX2-mu1[1])*C_inverse[1,0]#(x-mu1)^T*C_inverse的中间变量
    x_y1_temp2 = (inX1-mu1[0])*C_inverse[0,1]+(inX2-mu1[1])*C_inverse[1,1]#(x-mu1)^T*C_inverse的中间变量
    x_y1_index = x_y0_temp1*(inX1-mu1[0])+x_y0_temp2*(inX2-mu1[1])
    Pro_x_y1 = const_parameter*(math.pow(math.e,(-0.5*x_y1_index)))#P(x|y=1)
    Pro_x = Pro_x_y0*(1-phi)+Pro_x_y1*phi#P(x)
    Pro_y1_x = Pro_x_y1*phi/Pro_x
    Pro_y0_x = Pro_x_y0*(1-phi)/Pro_x
    predict_num = 0
    if Pro_y1_x > Pro_y0_x:
        predict_num = 1
    return predict_num
#画出分类图,直观地显示分类边界
xx,yy = np.meshgrid(np.arange(-1,12,0.05),np.arange(-1,12,0.05))
pre_data = np.c_[xx.ravel(),yy.ravel()]
pre_data_axis1= pre_data.shape[0]
z = np.zeros((pre_data_axis1,1))
for i in range(0,pre_data_axis1):
    z[i] = predict(pre_data[i,0],pre_data[i,1])
z = z.reshape(xx.shape)
print(z)
plt.pcolormesh(xx,yy,z,cmap=plt.cm.Paired)
plt.scatter(train_set[0:neg_num,0],train_set[0:neg_num,1],c=train_set[0:neg_num,2],edgecolors='k',label='负样本')
plt.scatter(train_set[neg_num+1:neg_num+pos_num-1,0],train_set[neg_num+1:neg_num+pos_num-1,1],c=train_set[neg_num+1:neg_num+pos_num-1,2],edgecolors='k',marker='x',label='正样本')
plt.xlabel('特征x1')
plt.ylabel('特征x2')
plt.legend(loc='best',title='0-1分布的样本')
plt.title('二维特征,0-1分布样本的高斯判别分类')
plt.savefig('GDA_classfication.png',format='png')
print('end')

运行结果如下
机器学习 高斯判别分析的数学原理及Python简单可视化实现_第1张图片
可以看到分类已完成。只是分类线似乎有失妥当,可能是因为生成样本时只简单用了两个一维随机正态,导致P(x|y=0)的分布与二维正态误差略大。

五、流程小结

使用高斯判别分析的流程为:
1、判断是否可以做出P(x|y=0)服从高维正态
2、利用上述最大似然性进行参数估计
3、利用条件概率公式计算P(y=0|x)与P(y=1|x)的值,哪个值大y就判断为哪个。

六、高斯判别分析与logistic分类

高斯判别分析的假设比logistic分类假设更强。若假设P(x|y=0)服从高维正态分布,则一定可推出P(y=0|x)为一个logistic函数( P ( y = 0 ∣ x ) = 1 1 + e − θ T x P(y=0|x)=\frac{1}{1+e^{-\theta^T x}} P(y=0x)=1+eθTx1),但反之若假设P(y=0|x)为一个logistic函数并不能推出P(x|y=0)服从高维正态分布。
而且logistic函数可由更多假设得到。如假设P(x|y=0) ~ P( λ 1 \lambda_1 λ1)(或是别的参数为 η 1 \eta_1 η1的指数分布族分布),P(x|y=1)~P( λ 2 \lambda_2 λ2)(或是别的参数为 η 2 \eta_2 η2的同一类指数分布族分布),一样可以得到P(y=0|x)为一个logistic函数。所以,logistic分类更加通用。当P(x|y=0)服从或近似可认为服从高维正态分布时,用高斯判别分析准确度会很好。但是,当P(x|y=0)若与高维正态误差较大,则效果可能比logistic分类差很多。
另外一点是,高斯判别分析属于生成学习模型,此类模型需要的样本量不是很大,一个较小的样本就可以得到精确度不错的模型。而基于logistic函数的logistic分类虽然在模型上更通用(P(x|y=1)和P(x|y=0)服从同类指数分布族分布即可),但也需要更多样本才能得到较好的分类结果。

你可能感兴趣的:(机器学习)