第一节 基础知识点
通常来讲,一个模型“好”还是“不好”取决于它是否能满足用户的需求。学习的根本目标是“泛化”(generalization),即:能够把从训练样本学习获得的知识推广到未见样本,因此一个好的学习器应该具有好的泛化能力,即:具有较小的“泛化误差”(generalization error)。学习过程可以形式化地描述为如下过程。假设
χ
\chi
χ为样本空间,
D
\mathcal D
D为
χ
\chi
χ上的分布,
f
f
f为潜在目标函数。给定训练集
D
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
m
,
y
m
)
}
D=\{(x_1,y_1),(x_2,y_2),...,(x_m,y_m)\}
D={(x1,y1),(x2,y2),...,(xm,ym)},其中
x
i
x_i
xi是来自分布
D
\mathcal D
D的独立同分布取样且
y
i
=
f
(
x
i
)
y_i=f(x_i)
yi=f(xi)。以分类为例,学习的目标是构建学习器
h
h
h以最小化泛化误差
e
r
r
(
h
)
=
E
x
∼
D
[
I
(
h
(
x
)
≠
f
(
x
)
)
]
err(h)=\mathbb E_{x \sim \mathcal{D}}[\mathbb I (h(x)\neq f(x))]
err(h)=Ex∼D[I(h(x)=f(x))]
一、常用的学习算法
1. 线性判别分析
线性判别分析即LDA(Fisher’s linear discriminant analysis),其
- 基本想法:是使不同类的样本尽量远离,同时使同类样本尽可能靠近。
- 实现:扩大不同类别样本的类中心距离,同时缩小每个类的类内方差。
2. 决策树
决策树学习算法通常是递归过程,其核心是如何选择分割。不同的决策树算法:
- **ID3算法:信息增益为分割准则。**能够产生最大信息增益的“特征—值”组合会被选作分割,问题是它会偏爱那些具有很多可能取值的特征,而忽略其和分类的相关性。例如,在二分类任务里选择“id”作为一个特征进行分割,会获得很大的信息增益,但通过id进行分割的数据集,其结果不能泛化。
- **C4.5算法:信息增益率为分割准则。**在信息增益的基础上,信息增益率使用特征的取值数做归一化,在所有具有较好信息增益的特征中,具有最高信息增益率的特征被选作分割。
- CART算法:“基尼系数”为分割准则。
早期的决策树算法,如ID3,仅能处理离散特征;后期的算法,如C4.5和CART,能够处理数值特征。
值得一提的是,当树高度被限制为1的时候,它仅执行一个测试进行预测,此时被称为“决策树桩”(decision stump)。通常,决策树是非线性分类器,而决策树桩是线性分类器。
3. 神经网络
最著名的就是多层前馈神经网络(multi-layer feed-forward network),该网络中神经元按层连接,没有层内和跨层连接。隐层神经元和输出层神经元是功能性单元,常用的激活函数是sigmoid函数,即
f
(
x
)
=
1
1
+
e
−
x
f(x)=\frac{1}{1+e^{-x}}
f(x)=1+e−x1
虽然可以使用多个隐层,但是大家还是经常使用具有一个或两个隐层的神经网络,这是由于:第一,理论上具有一个隐层的前馈网络已经有能力逼近任意连续函数;第二训练具有多个隐层的网络需要复杂的学习算法防止其陷入发散状态。
- 目的:神经网络训练的目的是决定其连接权重和神经元的激发阈值。
不难发现,如果激活函数可微,整个多层前馈神经网络就是关于这些参数的可微函数,此时最为常用的训练思路就是梯度下降(gradient descent)方法。
最成功的神经网络训练算法是误差逆传播(BP)算法。该算法中,输入经过输入层、隐层前馈计算到达输出层,在输出层中对网络输出和样本标记进行比较并计算误差;然后这些误差再经过隐层反向传播回输入层。在传播的过程中算法会调整连接权重和激发阈值以降低误差。
4. 朴素贝叶斯
朴素贝叶斯分类器(naive Bayes classifier)假设给定类别标记,n个特征之间是独立的(因该假设被称为,朴素)。
5. k-近邻
它没有显示的训练过程,仅需存储所有的训练样本,是一个懒惰学习(lazy learning)方法。
6. 支持向量机和核方法
支持向量机(SVMs)是用来解决二分类问题的大间隔分类器(large margin classifier),它尝试寻找具有最大间隔的超平面来区别不同类别的样本。
- 间隔:不同类别的样本到分类超平面的距离。
- 方法:考虑线性分类器 y = s i g n ( w T x + b ) y=sign(w^Tx+b) y=sign(wTx+b),缩写为 ( w , b ) (w,b) (w,b),并使用hinge损失来评估其对数据的拟合程度,即 Σ i = 1 m m a x { 0 , 1 − y i ( w T x i + b ) } \Sigma^{m}_{i=1}max\{0,1-y_i(w^Tx_i+b)\} Σi=1mmax{0,1−yi(wTxi+b)}。
- 缺陷:线性分类器在面对非线性数据的时候,难以进行较好的分类。一个常用的方法是将数据点映射到一个高维空间,使得原本线性不可分的样本点变成线性可分。但高维空间中计算内积比较困难,学习过程也慢甚至不可行。
- 解决:核函数,常用的有线性核、多项式核和高斯核(RBF核)。
核技巧(kernel trick),即通过核函数将数据点映射到RKHS(再生核希尔伯特空间,Reproducing Kernel Hilbert Space,此空间上的内积等于原空间上内积的核映射)完成学习的方法。可以和任何考虑输入空间内积的学习方法配合使用。
不难发现,支持向量机是一类特殊的核方法,即使用核技巧的线性分类器。
二、评估和对比
如果没有足够的标记数据来获得一个独立的验证集,一个常用的验证方法是交叉验证(cross-validation)。常用的配置包括10次10折交叉验证,以及5次2折交叉验证。当k等于原始数据集中的样本数量时,验证集仅包含一个样本,这种方法就是留一法(leave-one-out)验证。
基于估计误差可以比较不同的学习算法。由于数据划分具有一定的随机性,简单地比较平均误差可能并不可靠。为此,通常使用假设检验。
- 若算法可以高效执行10次,5次2折交叉验证,成对t检验是一个好的选择。
- 若算法仅能被执行1次,可以使用McNemar检验。
- 需要在多个数据集上评估多个学习算法,可以使用Friedman检验。(可以图示)
- 首先,基于平均误差,在每个数据集上对每个算法排序,具有最小误差的最优算法排序值为1。
- 然后,获得每个算法在所有数据集上平均排序值,并用Nemenyi post-hoc检验来计算临界差(critical difference)值。
- 结果,如果两个算法的平均排序值大于临界差,那么它们的效果具有显著差别。
三、集成学习方法
集成学习也被称为基于委员会的学习(committee-based learning)或多分类器系统(multiple classifier system)。
- 大多数集成学习方法使用同一种基学习算法产生同质的基学习器,即相同种类的学习器,生成同质集成(homogeneous ensemble)。
- 也有一些方法使用多种学习算法训练不同种类的学习器,构建异质集成(heterogeneous ensemble),由于没有单一的基学习算法,相较于基学习器,人们更倾向于称这些学习器为个体学习器(individual learner)或组件学习器(component learner)。
- 通常,集成学习具有更强的泛化能力。
- 集成学习可以把比随机猜测稍好的弱学习器转化为可以精确预测的强学习器。
集成学习领域的发展得益于三个方法的早起研究,即分类器结合、弱分类器集成和混合专家模型(mixture of experts)。
- 分类器结合的研究集中于模式识别领域(关注强分类器,设计强大的结合规则来获取更强的结合分类器,在设计和使用不同结合规则上积累深厚)。
- 弱分类器集成的研究集中于机器学习领域(关注弱分类器,设计强大的算法提升弱分类器的效果,如AdaBoost、Bagging)。
- 混合专家模型的研究集中于神经网络领域。
四、集成学习的应用
- 计算机视觉、安全和辅助诊断
- 信用卡欺诈检测
- 破产预测
- 蛋白质结构分类
- 种群分布预测
- 天气预报、电力负载预测、航空发动机缺陷检测
- 音乐风格和艺术家识别