1.收集数据集并选择合适的特征:在数据集上我们使用我们比较熟悉的IRIS鸢尾花数据集。
各个特征的相关解释:
- sepal length (cm):花萼长度(厘米)
- sepal width (cm):花萼宽度(厘米)
- petal length(cm):花瓣长度(厘米)
- petal width (cm):花瓣宽度(厘米)
2.选择度量模型性能的指标:
二分类任务是最重要也最基础的机器学习任务,其最直观的性能度量指标就是分类的准确率。给定一组训练数据,算法不可能完全正确地划分所有实例,而是会将一部分正例误判为反例,也会将一部分反例误判为正例。分类正确的样本占样本总数的比例是精度(accuracy),分类错误的样本占样本总数的比例是错误率(error rate),两者之和等于 1。
机器学习采用了混淆矩阵(confusion matrix),也叫列联表(contingency table)来对不同的划分结果加以区分。
如上图所示,在混淆矩阵中,所有测试样例被分为真正例(true positive, TP)、假正例(false positive, FP)、假反例(false negative, FN)、真反例(true negative, TN)四大类。真正例和真反例容易理解,假正例指的是样例本身是反例而预测结果是正例,也就是假阳性;假反例指的是样例本身是正例而预测结果是反例,也就是假阴性。
这样的分类能够对机器学习模型的性能做出更加精细的刻画,查准率(precision)和查全率(recall)就是两个具体的刻画指标。
查准率 P 也叫正例预测值(positive predictive value),表示的是真正例占所有预测结果为正例的样例的比值,也就是模型预测结果的准确程度,写成数学表达式是
P
=
P
P
V
=
P
R
E
=
T
P
T
P
+
F
P
P=PPV=PRE=\frac{TP}{TP+FP}
P=PPV=PRE=TP+FPTP
查全率 R 也叫真正例率(true positive rate, TPR),表示的是真正例占所有真实情况为正例的样例的比值,也就是模型对真实正例的判断能力,写成数学表达式是
R
=
T
P
R
=
R
E
C
=
T
P
T
P
+
F
N
R=TPR=REC=\frac{TP}{TP+FN}
R=TPR=REC=TP+FNTP
通俗地说,查准率要求把尽可能少的真实负例判定为预测正例,查全率则要求把尽可能少的真实正例判定为预测负例。
一般情况下,查准率和查全率是鱼和熊掌不可兼得的一对指标。使用比较严苛的判定标准可以提高查准率,比如医学上对青光眼的诊断主要依赖于眼压值,将诊断阈值设定得较高可以保证所有被诊断的患者都是真正的病人,从而得到较高的查准率。可这样做会将症状不那么明显的初期患例都划分为正常范畴,从而导致查全率的大幅下降。
反过来,如果将眼压的诊断阈值设定得较低,稍有症状的患者都会被诊断为病人。这样做固然可以保证真正的病人都被确诊,使查全率接近于 100%,但确诊的病例中也会包含大量的疑似患者,指标稍高的健康人也会被误诊为病人,从而导致查准率的大幅下降。
将查准率和查全率画在同一个平面直角坐标系内,得到的就是 P-R 曲线,它表示了模型可以同时达到的查准率和查全率。如果一个模型的 P-R 曲线能够完全包住另一个模型的曲线,就意味着前者全面地优于后者。可是更普遍的情况是有些模型查全性能较优,而另一些模型查准性能较优,这就需要根据任务本身的特点来加以选择了。
除了 P-R 曲线外,另一个对机器学习模型性能进行可视化的方式是受试者工作特征曲线(receiver operating characteristic curve),简称 ROC 曲线。ROC 这个名字来源于曲线的原始用途:判断雷达接收到的信号到底是敌机还是干扰。在机器学习中,这样的场景就演化为所有的样例共同符合一个混合分布,这个混合分布由正例和反例各自服从的单独概率分布叠加组成。此时二分类模型的任务就是确定新来的样本究竟来源于哪个分布。数据中的随机变化在分类器中体现为阈值动态取值的随机变化,分类器的性能则取决于两个概率分布之间的分离程度。
ROC 曲线描述的是真正例率和假正例率之间的关系,也就是收益(真正例)与代价(假正例)之间的关系。所谓的假正例率(false positive rate, FPR)等于假正例和所有真实反例之间的比值,其数学表达式为
F
P
R
=
F
P
F
P
+
T
N
FPR=\frac{FP}{FP+TN}
FPR=FP+TNFP
ROC 空间将 FPR 定义为 X 轴,TPR 定义为 Y 轴。给定一个二元分类模型和它的阈值,就能计算出模型的 FPR 和 TPR,并映射成由 (0, 0)、(0, 1)、(1, 0)、(1, 1) 四个点围成的正方形里。在这个正方形里,从 (0, 0) 到 (1, 1) 的对角线代表了一条分界线,叫作无识别率线,它将 ROC 空间划分为左上/右下两个区域。
无识别率线描述的是随机猜测的模型,以 0.5 的概率将新来的实例判定为正例,这种模型的 TPR 和 FPR 是处处相等的。在无识别率线左上方,所有点的 TPR 都大于 FPR,意味着分类结果优于二选一的随机猜测;而在无识别率线右下方,所有点的 TPR 都小于 FPR,意味着分类结果劣于随机猜测。完美的模型体现在 ROC 空间上的 (0, 1) 点:FPR=0 意味着没有假正例,没有负例被掺入;TPR=1 意味着没有假负例,没有正例被遗漏。也就是说,不管分类器输出结果是正例还是反例,都是 100% 完全正确。
ROC 曲线可以用来衡量习得模型的性能。模型的 ROC 曲线越靠近左上方,其性能就越好。和 P-R 曲线一样,如果一个模型的 ROC 曲线能够完全包住另一个模型的曲线,那么前者的性能就优于后者。但大多数情况下,模型之间并不存在全方位的碾压性优势,自然不会出现 ROC 曲线完全包含的情形。这时要评估不同模型性能的话,就需要 ROC 曲线下面积的概念。
ROC 曲线下面积(Area Under ROC Curve)简称 AUC。由于 AUC 的计算是在 1×1 的方格里求面积,因此其取值必然在 0 到 1 之间。对于完全靠蒙的无识别率线来说,其 AUC 等于 0.5,这样的模型完全没有预测价值。一般来说,通过调整模型的阈值,可以让模型的最优 AUC 大于 0.5,达到比随机猜测更好的判别效果。如果模型的 AUC 比 0.5 还小,这样的模型可以通过求解其镜像,也就是将分类结果反转来获得优于随机猜测的结果。
F1值:综合衡量精度和召回率
F
1
=
2
×
P
R
E
×
R
E
C
P
R
E
+
R
E
C
F1 = 2\times \frac{PRE\times REC }{PRE+REC}
F1=2×PRE+RECPRE×REC
3.选择具体的模型并进行训练
3.1 逻辑回归 logistic regression
虽然顶着“回归”的名号,但逻辑回归解决的却是实打实的分类问题。之所以取了这个名字,原因在于它来源于对线性回归算法的改进。通过引入单调可微函数 g ( ⋅ ) g(⋅) g(⋅),线性回归模型就可以推广为 y = g − 1 ( w T x ) y=g^{-1}(w^Tx) y=g−1(wTx),进而将线性回归模型的连续预测值与分类任务的离散标记联系起来。当 g ( ⋅ ) g(⋅) g(⋅) 取成对数函数的形式时,线性回归就演变为了逻辑回归。
在最简单的二分类问题中,分类的标记可以抽象为 0 和 1,因而线性回归中的实值输出需要映射为二进制的结果。逻辑回归中,实现这一映射是对数几率函数,也叫 Sigmoid 函数
y
=
1
1
+
e
−
z
=
1
1
+
e
−
W
T
X
y=\frac{1}{1+e^{-z}} =\frac{1}{1+e^{-W^TX}}
y=1+e−z1=1+e−WTX1
之所以选择对数几率函数,是因为它具备良好的特性。
首先,对数几率函数能够将线性回归从负无穷到正无穷的输出范围压缩到 (0, 1) 之间,无疑更加符合对二分类任务的直观感觉。
其次,当线性回归的结果 z=0 时,逻辑回归的结果 y=0.5,这可以视为一个分界点:当 z>0 时,y>0.5,此时逻辑回归的结果就可以判为正例;当 z<0 时,y<0.5,逻辑回归的结果就可以判为反例。
显然,对数几率函数能够在线性回归和逻辑回归之间提供更好的可解释性。这种可解释性可以从数学的角度进一步诠释。
如果将对数几率函数的结果 y 视为样本 x 作为正例的可能性,则 1−y 就是其作为反例的可能性,两者的比值
0
<
y
1
−
y
<
+
∞
0<\frac{y}{1−y}<+∞
0<1−yy<+∞称为几率,体现的是样本作为正例的相对可能性。如果对几率函数取对数,并将前文中的公式代入,可以得到
ln
y
1
−
y
=
W
T
X
+
b
\ln_{}{\frac{y}{1-y} } =W^TX+b
ln1−yy=WTX+b
归根结底,逻辑回归模型由条件概率分布表示
p
(
y
=
1
∣
X
)
=
e
W
T
X
+
b
1
+
e
W
T
X
+
b
p\left ( y=1|X \right ) =\frac{e^{W^TX+b}}{1+e^{W^TX+b}}
p(y=1∣X)=1+eWTX+beWTX+b
p
(
y
=
0
∣
X
)
=
1
1
+
e
W
T
X
+
b
p\left ( y=0|X \right ) =\frac{1}{1+e^{W^TX+b}}
p(y=0∣X)=1+eWTX+b1
对于给定的实例,逻辑回归模型比较两个条件概率值的大小,并将实例划分到概率较大的分类之中.学习时,逻辑回归模型在给定的训练数据集上应用最大似然估计法确定模型的参数。
3.2 线性判别分析
好的分类算法既要让相同类别的数据足够接近,又要让不同类别的数据足够远离。基于这一原则进行分类的方法就是线性判别分析。
用于二分类的线性判别分析由著名的统计学家罗纳德·费舍尔于 1936 年提出,按人类的年龄计算已是耄耋之年。归根结底,线性判别分析也是从概率出发,假设不同类别的数据来源于均值不同而方差相同的正态分布,通过判定数据归属于不同正态的可能性来确定类别。
但在设计线性判别分析时,费舍尔利用了一种不同的思路。在计算二分类问题的决策边界时,线性判别分析首先要计算两个类别中数据的均值,以此作为特征来区分不同的类别,让不同类别的数据足够远离就是让两个均值在决策边界上的投影之间的距离足够大。
但仅是均值远离还不够。数据在不同维度上的分布不同会导致有些方向的方差较大,而有些方向的方差较小。如果仅仅考虑均值而忽略了方差,就可能导致判决边界落在波动较大的方向上,由此产生的长尾效应容易使不同类别的数据互相重叠,从而影响分类的精度。因此在投影时,还要让相同类别的数据尽可能集中分布,以避免混叠的出现。
假定训练数据分属两个类别
C
1
C_1
C1 和
C
2
C_2
C2,每个类别中数据的均值用向量
m
1
m_1
m1 和
m
2
m_2
m2 表示,那么这两个均值在超平面
y
=
w
T
x
+
b
y=w^Tx+b
y=wTx+b 上的投影就等于
m
k
=
W
T
m
k
(
k
=
1
,
2
)
m_k = W^Tm_k\left ( k=1,2 \right )
mk=WTmk(k=1,2)
降维后两个类各自的方差可以表示为
s
k
=
∑
n
∈
C
k
(
y
n
−
m
k
)
2
(
k
=
1
,
2
)
s_k=\sum_{n\in C_k }^{} \left ( y_n-m_k \right )^2\left ( k=1,2 \right )
sk=n∈Ck∑(yn−mk)2(k=1,2)
要同时保证类间距最大和类内方差最小,可以通过最大化下面的目标函数来实现
J
(
W
)
=
(
m
2
−
m
1
)
2
s
1
2
+
s
2
2
J\left ( W \right ) =\frac{\left ( m_2-m_1 \right )^2 }{s_{1}^{2} +s_{2}^{2} }
J(W)=s12+s22(m2−m1)2
3.3 朴素贝叶斯
决分类问题的依据是数据的属性。朴素贝叶斯分类器假定样本的不同属性满足条件独立性假设,并在此基础上应用贝叶斯定理执行分类任务。其基本思想在于分析待分类样本出现在每个输出类别中的后验概率,并以取得最大后验概率的类别作为分类的输出。
3.4 决策树
决策树算法是解决分类问题的另一种方法。与基于概率推断的朴素贝叶斯分类器和逻辑回归模型不同,决策树算法采用树形结构,使用层层推理来实现最终的分类。与贝叶斯分类器相比,决策树的优势在于构造过程无需使用任何先验条件,因而适用于探索式的知识发现。
决策树是一个包含根节点、内部节点和叶节点的树结构,其根节点包含样本全集,内部节点对应特征属性测试,叶节点则代表决策结果。从根节点到每个叶节点的每条路径都对应着一个从数据到决策的判定流程。使用决策树进行决策的过程就是从根节点开始,测试待分类项的特征属性,并按照其值选择输出的内部节点。当选择过程持续到到达某个叶节点时,就将该叶节点存放的类别作为决策结果。
于决策树是基于特征对实例进行分类的,因而其学习的本质是从训练数据集中归纳出一组用于分类的“如果… 那么…”规则。在学习的过程中,这组规则集合既要在训练数据上有较高的符合度,也要具备良好的泛化能力。决策树模型的学习过程包括三个步骤:特征选择、决策树生成和决策树剪枝。
特征选择决定了使用哪些特征来划分特征空间。在训练数据集中,每个样本的属性可能有很多个,在分类结果中起到的作用也有大有小。因而特征选择的作用在于筛选出与分类结果相关性较高,也就是分类能力较强的特征。理想的特征选择是在每次划分之后,分支节点所包含的样本都尽可能属于同一个类别。
在特征选择中通常使用的准则是信息增益。机器学习中的信息增益就是通信理论中的互信息,是信息论的核心概念之一。信息增益描述的是在已知特征后对数据分类不确定性的减少程度,因而特征的信息增益越大,得到的分类结果的不确定度越低,特征也就具有越强的分类能力。根据信息增益准则选择特征的过程,就是自顶向下进行划分,在每次划分时计算每个特征的信息增益并选取最大值的过程。
在最早提出的决策树算法——ID3 算法中,决策树的生成就利用信息增益准则选择特征。ID3 算法构建决策树的具体方法是从根节点出发,对节点计算所有特征的信息增益,选择信息增益最大的特征作为节点特征,根据该特征的不同取值建立子节点;对每个子节点都递归调用以上算法生成新的子节点,直到信息增益都很小或没有特征可以选择为止。
ID3 算法使用的是信息增益的绝对取值,而信息增益的运算特性决定了当属性的可取值数目较多时,其信息增益的绝对值将大于取值较少的属性。这样一来,如果在决策树的初始阶段就进行过于精细的分类,其泛化能力就会受到影响,无法对真实的实例做出有效预测。
为了避免信息增益准则对多值属性的偏好,ID3 算法的提出者在其基础上提出了改进版,也就是 C4.5 算法。C4.5 算法不是直接使用信息增益,而是引入“信息增益比”指标作为最优划分属性选择的依据。信息增益比等于使用属性的特征熵归一化后的信息增益,而每个属性的特征熵等于按属性取值计算出的信息熵。在特征选择时,C4.5 算法先从候选特征中找出信息增益高于平均水平的特征,再从中选择增益率最高的作为节点特征,这就保证了对多值属性和少值属性一视同仁。在决策树的生成上,C4.5 算法与 ID3 算法类似。
论是 ID3 算法还是 C4.5 算法,都是基于信息论中熵模型的指标实现特征选择,因而涉及大量的对数计算。另一种主要的决策树算法 CART 算法则用基尼系数取代了熵模型。
同其他机器学习算法一样,决策树也难以克服过拟合的问题,“剪枝”是决策树对抗过拟合的主要手段。
决策树剪枝则是通过主动去掉分支以降低过拟合的风险,提升模型的泛化性能。
么如何判定泛化性能的提升呢?其方法是定义决策树整体的损失函数并使之极小化,这等价于使用正则化的最大似然估计进行模型选择。另一种更简单的方法是在训练数据集中取出一部分用于模型验证,根据验证集分类精度的变化决定是否进行剪枝。
决策树的剪枝策略可以分为预剪枝和后剪枝。
预剪枝是指在决策树的生成过程中,在划分前就对每个节点进行估计,如果当前节点的划分不能带来泛化性能的提升,就直接将当前节点标记为叶节点。
预剪枝的好处在于禁止欠佳节点的展开,在降低过拟合风险的同时显著减少了决策树的时间开销。但它也会导致“误伤”的后果,某些分支虽然当前看起来没用,在其基础上的后续划分却可能让泛化性能显著提升,预剪枝策略将这些深藏不露的节点移除,无疑会矫枉过正,带来欠拟合的风险。
相比之下,后剪枝策略是先从训练集生成一棵完整的决策树,计算其在验证集上的分类精度,再在完整决策树的基础上剪枝,通过比较剪枝前和剪枝后的分类精度决定分支是否保留。和预剪枝相比,后剪枝策略通常可以保留更多的分支,其欠拟合的风险较小。但由于需要逐一考察所有内部节点,因而其训练开销较大。
以上的决策树算法虽然结构上简单直观,逻辑上容易解释,但一个重要缺点是“一言堂”,即只依据一个最优特征执行分类决策。
在实际问题中,分类结果通常会受到多个因素的影响,因而需要对不同特征综合考虑。依赖多个特征进行分类决策的就是多变量决策树。在特征空间上,单变量决策树得到的分类边界是与坐标轴平行的分段,多变量决策树的分类边界则是斜线的形式。
3.5 支持向量机SVM
支持向量机是一种二分类算法,通过在高维空间中构造超平面实现对样本的分类。最简单的情形是训练数据线性可分的情况,此时的支持向量机就被弱化为线性可分支持向量机,这可以视为广义支持向量机的一种特例。
在高维的特征空间上,划分超平面可以用简单的线性方程描述
W
T
X
+
b
=
0
W^TX+b=0
WTX+b=0
式中的 n 维向量 w 为法向量,决定了超平面的方向;b 为截距,决定了超平面和高维空间中原点的距离。划分超平面将特征空间分为两个部分。位于法向量所指向一侧的数据被划分为正类,其分类标记 y=+1;位于另一侧的数据被划分为负类,其分类标记 y=−1。线性可分支持向量机就是在给定训练数据集的条件下,根据间隔最大化学习最优的划分超平面的过程。
给定超平面后,特征空间中的样本点
x
i
x_i
xi 到超平面的距离可以表示为
r
=
W
T
X
+
b
∥
W
∥
r=\frac{W^TX+b}{\left \| W \right \| }
r=∥W∥WTX+b
显然,这个距离是个归一化的距离,因而被称为几何间隔。结合前文的描述,通过合理设置参数 w 和 b,可以使每个样本点到最优划分超平面的距离都不小于 1,即满足以下关系
w
T
x
i
+
b
≥
1
,
y
i
=
+
1
w^Tx_i+b\ge 1,y_i=+1
wTxi+b≥1,yi=+1
w
T
x
i
+
b
≤
−
1
,
y
i
=
−
1
w^Tx_i+b\le -1,y_i=-1
wTxi+b≤−1,yi=−1
需要注意的是,式中的距离是非归一化的距离,被称为函数间隔。函数间隔和几何间隔的区别就在于未归一化和归一化的区别。
在特征空间中,距离划分超平面最近的样本点能让上式取得等号,这些样本被称为“支持向量”,两个异类支持向量到超平面的距离之和为 2 / ∣ ∣ w ∣ ∣ 2/∣∣w∣∣ 2/∣∣w∣∣。因而对于线性可分支持向量机来说,其任务就是在满足上面不等式的条件下,寻找 2 / ∣ ∣ w ∣ ∣ 2/∣∣w∣∣ 2/∣∣w∣∣ 的最大值。由于最大化 ∣ ∣ w ∣ ∣ − 1 ∣∣w∣∣^{−1} ∣∣w∣∣−1 等效于最小化 ∣ ∣ w ∣ ∣ 2 ∣∣w∣∣^2 ∣∣w∣∣2,因而上述问题可以改写为求解 1 2 ∣ ∣ w ∣ ∣ 2 \frac{1}{2}∣∣w∣∣^2 21∣∣w∣∣2 的最小值。
线性可分支持向量机是使硬间隔最大化的算法。在实际问题中,训练数据集中通常会出现噪声或异常点,导致其线性不可分。要解决这个问题就需要将学习算法一般化,得到的就是线性支持向量机(去掉了“可分”条件)。
性支持向量机的通用性体现在将原始的硬间隔最大化策略转变为软间隔最大化。在线性不可分的训练集中,导致不可分的只是少量异常点,只要把这些异常点去掉,余下的大部分样本点依然满足线性可分的条件。
不论是线性可分支持向量机还是线性支持向量机,都只能处理线性问题,对于非线性问题则无能为力。可如果能将样本从原始空间映射到更高维度的特征空间之上,在新的特征空间上样本就可能是线性可分的。如果样本的属性数有限,那么一定存在一个高维特征空间使样本可分。将原始低维空间上的非线性问题转化为新的高维空间上的线性问题,这就是核技巧的基本思想。
核函数有两个特点。第一,其计算过程是在低维空间上完成的,因而避免了高维空间(可能是无穷维空间)中复杂的计算;第二,对于给定的核函数,高维空间 H H H 和映射函数 ϕ ϕ ϕ 的取法并不唯一。一方面,高维空间的取法可以不同;另一方面,即使在同一个空间上,映射函数也可以有所区别。
核函数的使用涉及一些复杂的数学问题,其结论是一般的核函数都是正定核函数。正定核函数的充要条件是由函数中任意数据的集合形成的核矩阵都是半正定的,这意味着任何一个核函数都隐式定义了一个成为“再生核希尔伯特空间”的特征空间,其中的数学推导在此不做赘述。在支持向量机的应用中,核函数的选择是一个核心问题。不好的核函数会将样本映射到不合适的特征空间,从而导致分类性能不佳。常用的核函数包括以下几种:
感谢Datawhale团队为开源学习做出的贡献!
参考文献:
https://github.com/datawhalechina/team-learning-data-mining/tree/master/EnsembleLearning