机器学习算法与实践
从数据中学习模型的过程,叫做学习,也叫做训练;训练过程中使用的数据,叫训练数据;训练数据中的每一个样本,叫做训练样本;训练样本组成的集合,叫做训练集合;学得的模型对应了关于数据的某种潜在规律,叫做假设g;潜在规律自身,叫做真相或真实f。监督学习是利用带有标签的数据,通过学习输入->输出(标签)的映射关系,来建模数据规律的方法。(分类任务:预测结果是离散的;回归任务:预测结果是连续的)非监督学习是在
绪论
机器学习的定义
Arthur Samuel:它研究的事这样的一个学习领域,赋予计算机一种不用显示编程就能够学习的能力。
Tom Mitchell:对于某类任务T和性能度量P,如果一个计算机程序在T上以P衡量的性能随着经验E而自我完善,那么我们称这个计算机程序在从经验E学习。
含义介绍
从数据中学习模型的过程,叫做学习,也叫做训练;训练过程中使用的数据,叫训练数据;训练数据中的每一个样本,叫做训练样本;训练样本组成的集合,叫做训练集合;学得的模型对应了关于数据的某种潜在规律,叫做假设g;潜在规律自身,叫做真相或真实f。
监督学习是利用带有标签的数据,通过学习输入->输出(标签)的映射关系,来建模数据规律的方法。(分类任务:预测结果是离散的;回归任务:预测结果是连续的)
非监督学习是在没有标签的情况下,通过数据本身的相似性,结构,分布特征,发现规律或对数据进行划分。(聚类任务)
假设空间:假设的集合,包含好的假设和坏的假设,学习过程就是在假设空间中进行搜索的过程,通过搜多一个好的假设g来逼近真实f。
归纳偏好
机器学习算法在学习过程中对某种类型的假设的偏好。
我们经常面临这种情况,会存在不止一条曲线与有限的样本训练一致,此时我们要知道,若有两个学习算法A、B,有些问题上A会表现的比B好,有些时候B表现的比A好。脱离实际问题讨论哪个算法更好是不合实际没有意义的。
解决方案——奥卡姆剃刀,若多个假设与观察一直,则选最简单的那个。
线性模型
基本形式
给定由d个属性描述的示例x=(x1,x2,……,xd)其中xi是x在第i个属性上的取值,线性模型试图学得一个通过属性的线性组合来进行预测的函数,即

一般用向量形式写成:

其中w=(w1,w2,……,wd)w和b学得之后,模型得以确定。
许多功能强大的非线性模型,可在线性模型基础上,通过引入层级结构或高位映射得到。
通过以上公式,我们可以发现线性模型具有很好的解释性,参数w代表每个属性在回归过程中的重要程度。
一般线性模型或多元回归模型是一个统计线性模型。公式为:

其中Y是一系列多变量测量的矩阵(每列是一个因变量的测量集合),X是独立变量的观测举证,B是通常要背被估计的参数矩阵,U是误差(噪声)矩阵。错误通常被认为是不相关的测量,并遵循多元正态分布。在实际数据中不可避免地存在测量误差和噪声。由于这些误差来源复杂且难以逐一建模,统计学习中通常假设误差项服从某种概率分布(常见为正态分布),从而将不确定性纳入模型计算过程。通过这种方式,模型在训练时不仅学习数据中的主要规律,也能够在一定程度上适应现实世界中存在的随机噪声。
线性回归
通过学习到一个线性模型来尽可能准确的预测实际输出标记。
损失函数
损失函数:我们通过定义一个损失函数来衡量学习结果的好坏,其含义是度量预测值与标签之间的接近程度。
常见以下四种损失函数:

在训练过程中我们的目的就是最小化损失函数,使得模型变得越来越好。
有时候以均方误差(MSE)作为损失函数。均方误差,对应了欧氏距离,基于均方误差最小化来进行模型求解称为“最小二乘法”在线性回归中,最小二乘法就是试图找到一条直线,使得所有样本到直线上的欧氏距离之和最小。

梯度下降法
逐步最小化损失函数的过程。在这个过程中我们可以设置学习率,学习率设置较小,可能导致收敛时间过长,学习率设置较大,可能导致震荡。
欠拟合与过拟合
欠拟合:对原始数据拟合得不好,可能会导致预测效果较差。
过拟合:可以对原始数据拟合得很好,但是丧失了一般性,可能导致预测效果较差。
对于欠拟合:我们可以通过添加其他特征项、添加多项式特征(比如若算法中全是一次项,我们可以通过添加二次项和三次项来是泛化能力增强)、减少正则化参数来解决问题。
对于过拟合,我们可以通过重新清晰数据、增大数据训练量、采用正则化、采用dropout方法(训练时让神经元以一定概率不工作)来解决。
对数几率回归
对数几率回归,或对率回归,也称逻辑斯蒂回归,或者逻辑回归,是一种概率型非线性回归模型,是研究二分类观察y与一些影响因素(x1,x2,……,xn)之间关系的一种多变量分析方法。通常的问题环境是,研究某些条件下某个结果是否发生,比如医学中根据病人的一些症状判断他是否患某种病。
二分类任务
寻找函数将分类标记与线性回归模型输出联系起来。
单位阶跃函数

预测大于0判正例,小于零判为反例,预测值为临界值0则可任意判别。
对数几率函数
对数几率回归是用来做分类任务的,所以需要找一个单调可微函数,将分类任务的真实标记和线性回归模型的预测联系起来。这里的单调是因为要保持区分性,可微是为了可以利用梯度高效优化。
对数几率函数具有以下几种优点:因为是一种判别函数,不用模拟x真实的分布,只用关注y与x之间的关系就好,所以无需实现假设数据分布;可得到类别的近似概率预测;可直接应用现有数值优化算法求取最优解。
线性判别式分析(LDA)和主成分分析(PCA)
线性判别式分析,是指给定训练集,设法将样例投影到一条直线上,使得同类样例的投影点尽可能接近,一类样例的投影点尽可能原理,在对新样本进行分类是,将其投影到同样的这条直线上,再根据投影点的位置来确定,新样本的类别。
PCA 通过线性变换,把原始高维数据映射到少数几个“最重要的方向”(主成分)上,在尽量保留数据整体信息的前提下降低维度。
两者都是为了在对原始数据降维之后进行分类,PCA是无监督的方式,它没有分类标签,降维之后需要采用K-Means等无监督算法进行分类。LDA是有监督的方式,它对训练数据进行降维,然后找出一个线性判别式。
两类线性判别式分析
定义每类样例的均值点![]()
样例投影到y后的均值点为![]()
我们希望投影之后的类部方差
越小越好
我们希望投影后两类样例中心尽可能分离,即
越大越好
因此我们得到目标函数
使用LDA的限制
至多可生成C-1维子空间,不适合对非高斯分布的样本进行降维,在样本分类信息以来方差而不是均值时效果不好,可能过度拟合数据。
多分类学习
多分类学习的基本思路是拆解发,将多分类拆为若干个二分类任务求解。具体而言,先对问题进行拆分,然后为拆出的每个二分类任务训练一个分类器,在测试时,对这些分类器的预测结果进行集成以或得最终的多分类结果。
经典拆分策略:一对一(OvO),一对其余(OvR),多对多(MvM)。
OvO(One-vs-One,一对一)与 OvR(One-vs-Rest,一对多)多分类方法总结
OvO 方法将 NNN 个类别两两配对,共需训练

个二分类器。每个分类器只使用对应的两个类别的数据进行训练,其中一个类别作为正例,另一个作为反例。测试阶段,新样本会被送入所有分类器,每个分类器给出一个预测结果,最终通过投票机制,选择被预测次数最多的类别作为最终分类结果。
OvR 方法则为每个类别训练一个二分类器,将该类别样本作为正例,其余所有类别样本作为反例,共需训练 NNN 个分类器。测试时,若只有一个分类器预测为正类,则该类别即为最终结果;若多个分类器预测为正类,则根据各分类器的预测置信度,选择置信度最大的类别作为最终分类结果。
从复杂度角度看,OvR 只需训练 NNN 个分类器,而 OvO 需要训练 N(N−1)/2N(N-1)/2N(N−1)/2 个分类器,因此 OvO 的存储开销和测试时间通常大于 OvR。但在训练阶段,OvR 的每个分类器都使用全部训练数据,而 OvO 的每个分类器仅使用两个类别的数据,因此在类别数量较多时,OvO 的单个分类器训练成本较低,整体训练时间往往小于 OvR。在预测性能方面,两种方法的效果主要取决于具体的数据分布,多数情况下差异并不显著。
多对多MvM
海明距离(Hamming Distance)用于度量两个等长编码之间的差异,其定义为对应位置取值不同的位数。例如,对二进制串 10101 和 00110 从左到右逐位比较,可发现第 1、4、5 位不同,因此海明距离为 3。实际计算中,常通过对两个编码进行异或(XOR)运算并统计结果中 1 的个数来得到海明距离,例如 110 与 011 异或得到 101,其中包含两个 1,因此二者的海明距离为 2。海明距离在多分类学习中常被用来衡量预测编码与各类别编码之间的相似程度。
在多分类学习中,MvM(Multi-vs-Multi)是一种将多分类问题转化为多个二分类问题的策略,其基本思想是每次选取若干类别作为正类,其余类别作为反类来训练一个二分类器。通过多次不同的正负类划分,可以得到多个二分类器,并在测试阶段综合这些分类器的预测结果,从而完成多分类任务。
ECOC(Error Correcting Output Codes,纠错输出码)是 MvM 思想中最典型、最常用的实现方式。其核心流程包括编码和解码两个阶段:在编码阶段,将 N 个类别映射为长度为 M 的编码向量,每一列对应一个二分类任务,不同列采用不同的类别划分方式;在解码阶段,测试样本被送入所有 M 个二分类器,得到一个长度为 M 的预测编码,再通过计算该预测编码与各类别真实编码之间的距离(通常为海明距离或欧氏距离),选择距离最小的类别作为最终分类结果。
ECOC 的编码矩阵通常有二元编码和三元编码两种形式。二元编码中使用 +1 和 −1 分别表示正类和反类;三元编码在此基础上引入 0,表示该分类器不使用该类别的样本,从而降低某些二分类任务的难度,提高整体的稳定性和鲁棒性。通过合理设计编码矩阵,可以有效提升多分类系统的性能。
从性能角度看,ECOC 具有一定的纠错能力,当部分二分类器预测出错时,整体分类结果仍可能保持正确。编码长度越长、不同类别之间的编码距离越大,纠错能力通常越强,但同时也意味着需要训练更多的分类器,计算和存储开销相应增加。在编码长度固定的情况下,任意两个类别之间的编码距离越远,系统的纠错能力越强,因此可以据此设计理论上更优的编码方案。
类别不平衡问题
在分类任务中,当不同类别的样本数量差异较大时,就会出现类别不平衡问题。此时即使模型取得很高的准确率,也可能是无效的,例如当大多数样本都属于同一类别时,将所有样本预测为该类别即可获得很高准确率,但模型对少数类几乎没有识别能力。因此,在类别不平衡场景下,准确率并不能真实反映模型性能。
类别不平衡在实际问题中十分常见,如欺诈检测、异常识别等任务中,正类样本往往远少于负类样本。当类别比例差异较大(如超过 4:1)时,传统分类方法往往受到明显影响,因此在建模前通常需要对不平衡数据进行处理。
解决类别不平衡问题的一类方法是重采样,通过改变训练集中各类别样本数量来缓解不平衡。重采样主要包括两种方式:对少数类样本进行过采样,或对多数类样本进行欠采样。欠采样通过减少多数类样本数量来平衡数据,但可能导致信息丢失;过采样通过增加少数类样本数量来平衡数据,但若简单复制样本,容易引起过拟合。
为缓解过采样的过拟合问题,提出了 SMOTE 方法,通过在少数类样本及其近邻之间进行线性插值,合成新的少数类样本,从而在一定程度上提升模型的泛化能力。针对 SMOTE 可能导致边界模糊的问题,还可以采用改进方法,仅对靠近类别边界的少数类样本进行合成。
在使用重采样方法时,应将其正确嵌入交叉验证过程中,即仅对训练集进行重采样,避免在数据划分前重采样而引入数据泄漏,否则会导致评估结果过于乐观并产生过拟合。
由于类别不平衡会使准确率失效,模型评估应采用更合适的指标,如基于混淆矩阵的精确率、召回率和 F1 值,或使用 ROC 曲线、AUC 等指标,从而更全面、可靠地评价分类模型的性能。
混淆矩阵
真实值是 positive,模型认为是 positive 的数量(True Positive = TP)
真实值是 positive,模型认为是 negative 的数量(False Negative = FN)
真实值是 negative,模型认为是 positive 的数量(False Positive = FP)
真实值是 negative,模型认为是 negative 的数量(True Negative = TN)
神经网络
神经网络是一种模拟动物神经网络行为特征,进行分布式并行信息处理的算法,这种网络依靠系统的复杂程度,通过调整内部大量节点之间的相互连接关系达到处理信息的目的。
该模型中神经元接收到来自N个其他神经元传递的输入信号,这些输入信号通过带权重的连接进行传递,神经元接收到的总输入值将与其阈值进行比较,然后通过激活函数的处理产生神经元的输出。
激活函数
神经网络中的每个神经元节点接受上一层神经元的输出值座位本神经元的输入值,在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数。
神经网络,有3层:输入层、隐藏层、输出层。输入层的节点数量与数据集的特性数量相同,隐藏层可以自由选择需要多少个节点并且可以使用多个隐藏层。
网络中的每个神经元,除了那些在输入层的神经元,可以被认为是一个线性分类器,它将前一层神经元的所有输出作为输入,并计算这些输出加上一个偏置项的加权和,然后,下一层的神经元将前一层线性分类器计算的值作为输入,然后计算这些值的加权和,以此类推。我们希望通过这种方式结合线性分类器,可以构建更复杂的分类器,代表我们数据中的非线性模式。
若不适用激励函数,每一层节点的输入都是上层输出的线性函数,很容易验证,无论神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机了,此时网络的逼近能力相当有限,引入非线性函数作为激励函数,这样深层神经网络表达能力就更加强大。
已经证明,具有2层(输入层除外)非线性激活函数的神经网络,只要在这些层中具有足够多的神经元,就可以近似任何函数。但是,虽然这两层网络能够学习任何东西,并不意味它们容易优化,所以需要更多层。
有哪些激活函数
阈值型(Threshold)
激活函数为阶跃函数,它将输入值映射为0和1,0表示神经元抑制,1表示神经元兴奋。

Sigmoid
它能够把输入的连续实值变换为0和1之间的输出,特别的,如果是非常大的负数,输出0,如果是非常大的正数,输出1。

tanh
同样把输入的连续实值变换为-1和1之间的输出,和sigmoid函数不同的是,它的输出均值为0.

ReLU函数
修正线性单元,是一种分段线性函数,如果输入为负,神经元不会被激活,同时不用算指数,计算速度更快。

神经网络发展
1958年,计算机科学家Rosenblatt提出由一层神经元组成的单层神经网络,起名“感知机”。
单层神经网络工作原理:

1969年Marvin Minsky用详细的数学证明了感知机的弱点,指出其连异或这样简单的分类任务都无法解决。
1986年,Rumelhar等提出了反向传播(BP)算法,解决了两层神经网络所需要的复杂计算量问题,从而带动了业界使用两层神经网络研究的热潮。

BP神经网络
神经元模型的一种学习方法称为Hebb算法,我们可以想象这样子的一个任务,在一个平面上有很多点,我们要用一条直线把他们分开来。在实际实现过程中我们先随机选一条直线、平面、超平面,然后把样本一个个拿过来,如果这条直线分错了,说明这个点分错边了,稍微把直线移动一点,让它跑到直线正确的一侧。
如果直线分对了,就暂时停下不动,因此训练神经元的过程就是这条直线不断移动,最终听到两个类之间。
单输入神经元
对照生物神经元网络结构,可以得到一个单输入神经元如下,其权值W对照突触的连接强度,细胞体对应累加器和作用函数,神经元输出y即轴突信号。

单输入神经元工作过程:
从输入端接收输入信号x;
根据连接权值w,求出所有输入的加权和;

用非线性特征函数进行转换,获得输出y。

在上述模型中,权重w和阈值是神经元克调节的参数,设计者可以依据一定的学习规律来调整它。
多输入神经元MP模型
神经元MP模型是将人工神经元的基本模型和激活函数合在一起构成人工神经元,称之为处理单元。
常见的神经元转换函数
非对称型sigmoid函数

对称型sigmoid函数

对称型阶跃函数

线性函数

高斯函数

神经元的拓扑结构
根据神经元的拓扑结构形式不同,神经网络可以分为两大类:
前向网络
网络可分为若干层,每层按信号传输先后顺序依次排序,第i层的神经元只接受第i-1层神经元给出的信号,各神经元之间没有反馈。
可以看出,在前向神经网络中,输入节点本身并不具备计算功能,它们仅负责接收外部输入并将其传递给后续节点;而真正承担信息处理任务的是各层中的神经元节点,这些节点统称为计算单元。每一个计算单元可以接收来自上一层任意数量的输入信号,但只会产生一个输出结果,该输出又可以同时作为多个后续节点的输入,从而实现信息的并行传播。在网络结构的层次划分中,输入节点所在的层被称为第零层,而具有计算功能的各层节点自下而上依次编号为第 1 层至第 N 层,由此构成一个 N 层前向神经网络。通常将第一层计算层与最终输出层统称为可见层,而位于中间的各层称为隐藏层,其中的神经元被称为隐节点。BP 神经网络正是一种典型的前向网络结构,其信息沿层次结构自输入端向输出端单向传播。
反馈网络
典型的反馈型神经网络如图所示,每个节点都表示一个计算单元,同时接受外界输入和其他各节点的反馈输入,每个节点也都直接向外部输出。

在部分反馈型神经网络中,各神经元除了承担对外部输入信号以及来自其他神经元的反馈输入之外,还可能包含来自自身的反馈连接,即神经元输出可以再次作为自身的输入参与下一步计算。在某些情况下,这类反馈型神经网络也可以抽象表示为一张完全无向图。在该表示形式中,网络中任意两个神经元之间的连接均为双向连接,任一连接都同时承担前向与反馈的作用。此时,第 iii 个神经元对第 jjj 个神经元的反馈权重与第 jjj 个神经元对第 iii 个神经元的反馈权重相等,即连接权重满足对称性条件 wij=wjiw_{ij}=w_{ji}wij=wji。这种对称权重结构是典型反馈型神经网络的重要特征之一。

概念
误差逆传播(BP)是至今最成功的神经网络学习算法。BP网络能够学习和存储大量的输入输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。
工作原理
基本BP算法包括信号的前向传播和误差的反向传播。计算实际输出时按输入到输出的方向进行,而权值和阈值的修正从输出到输入方向进行。利用输出后的误差来估计输出层的直接前一层误差,再用这个误差估计更前一层的误差。
前向传播过程



反向传播

隐藏层到输出层权值更新
总误差:

有两个输出,所以总误差为o1和o2的误差之和:

以权重参数w5为例,如果我们想知道w5对整体误差产生了多少影响,可以用整体误差对w5求偏导求出:

现在分别计算每个式子:



最后三者相乘,得出整体误差E对w5的偏导:

最后我们来更新w5的值:

这里的η是学习速率,这里我们取0.5。
隐藏层到隐藏层权值更新
方法与上面说的差不多,但是有个地方需要变一下,在上文计算总误差对w5求偏导时,是从out(o1)->net9o1)->w5但是在隐藏层之间的权值更新时,是从out(h1)->net(h1)->w1,而out(h1)会接受E(o1),E(o2)两个地方的误差,所以这两个都要计算。


同理,计算
得到总值:

最后三者相乘:

更新权值:

学习规则和学习方式
学习规则
学习规则是修正神经元之间连接强度或加权系数的算法,使获得知识结构使用周围环境变换。
Hebb规则(联想式学习)
以经典的条件反射实验为例,在每次给狗喂食之前先敲铃,经过一段时间的反复刺激,狗会逐渐将铃声与食物联系起来;此后即使只敲铃而不提供食物,狗也会产生流口水的反应。受这一实验现象的启发,Hebb 提出了著名的联想学习理论,认为在同一时间被激活的神经元之间,其连接强度会不断增强。例如,当铃声响起时会激活某一神经元,而食物的出现会在同一时间激活附近的另一神经元,由于这两个神经元同步兴奋,它们之间的连接权重便会得到加强,从而在神经系统中“记住”铃声与食物之间的关联。相反,如果两个神经元长期不能在同一时间被激活,它们之间的连接关系就会逐渐减弱。基于这一思想,Hebb 规则假设当两个神经元同时兴奋时,它们之间的连接强度应当增强,该规则与条件反射理论在本质上是一致的,并且后来得到了神经生物学实验的支持。从机器学习的角度看,Hebb 学习是一种典型的相关学习方式,其基本思想是:如果两个神经元在同一时刻被激活,则它们之间连接强度的增加量与这两个神经元激活强度的乘积成正比。
Hebb学习律可表示为:![]()
其中,wijw_{ij}wij 表示神经元 jjj 到神经元 iii 之间的连接权重,yiy_iyi 与 yjy_jyj 分别表示两个神经元的输出,aaa 为表示学习速率的常数。当神经元 iii 与神经元 jjj 同时被激活,即 yiy_iyi 与 yjy_jyj 同时为正时,二者之间的连接权重 wijw_{ij}wij 将得到增强;而当神经元 iii 被激活、神经元 jjj 处于抑制状态,即 yiy_iyi 为正而 yjy_jyj 为负时,连接权重 wijw_{ij}wij 将减小。这一机制刻画了 Hebb 学习中“同步兴奋加强连接、不同步则削弱连接”的基本思想。
Delta规则(联想式学习)
Delta学习规则是一种简单的有道是学习算法,根据神经元的实际输出与期望输出的差别,来调整连接权,数学表示如下:
其中,连接权重表示神经元之间信号传递强度,期望输出表示模型希望神经元达到的输出结果,实际输出表示神经元当前产生的输出值,而输入状态用于描述某一神经元是否处于激活或抑制状态。当神经元处于激活状态时,其输入状态取正值;当处于抑制状态时,输入状态取零或负值,具体取值由所采用的激活函数决定。学习速率用于控制权重更新的幅度。在神经元处于激活状态的前提下,如果期望输出大于实际输出,说明当前输出偏小,此时需要增强相关连接的权重;如果期望输出小于实际输出,说明当前输出偏大,则应减弱相关连接的权重。基于这一思想,Delta 学习规则认为,当神经元的实际输出超过期望输出时,应当减小所有来自正输入的连接权重,并增大所有来自负输入的连接权重;反之,当实际输出低于期望输出时,则应当增大所有来自正输入的连接权重,同时减小所有来自负输入的连接权重。
学习方式
学习方式分为有监督学习与无监督学习。
有监督学习:网络的输出有一个评价标准,网络将实际输出和评价标准进行比较,由其误差信号决定连接权值调整。
无监督学习:自动地适应连接权,以便按相似特征把输入模式分组聚集,训练方法主要有Hebb学习率、竞争与协同学习规则、随机连接学习规则等。
支持向量机(SVM)
SVM是一种基于统计学习理论的机器学习方法,它被首次提出后从此迅速发展起来,目前已经在许多智能信息获取与处理领域取得了成功的作用。
支持向量机的基本思想是:在样本空间或特征空间构造出最优超平面,使得超平面与不同类样本集之间的距离最大,从而达到泛化能力。
基本原理
SVM是在两类线性可分情况下,从而获得最优分类面问题中提出的。最优分类面就是要求分类面不但能将两类正确分开,而且应使分类间隔最大。
分类间隔:假设H代表分类线,H1和H2是两条平行于H的直线,并且它们分别超过每类中离分类先H最近的样本,H1和H2之间的距离叫做分类间隔。
线下判别函数和判别面
方程
定义了一个判定面,它把归类于C1和C2的点分开来,当g(x)是线性函数时,这个平面为超平面,假如两个点x1和x2都在这个平面上,则有
。即意味着g(x)对应的直线w和该超平面正交,并称w为超平面的法向量。
具有最大分类间隔的分类面只由支持向量决定(过程省略)。
支持向量机和神经网络由什么区别
神经网络是一个黑小子,优化目标是基于经验风险最小化原则,易陷入局部最优,训练结果不太稳定,一般需要大样本;支持向量机具有严格的理论和数学基础,基于结构风险最小化原则,泛化能力优于前者,算法具有全局最优性,是针对小样本统计的理论;目前来看虽然二者均为机器学习领域非常流行的方法,但是后者在很多地方一般优于前者。
神经网络是基于传统统计学的基础上的。传统统计学研究的内容是样本无穷大时的渐进理论,即当样本数据趋于无穷多时的统计性质,而实际问题中样本数据往往是有限的,因此,假设样本数据无穷多,并以此推导出的各种算法很难再样本数据有限时取得理想的应用效果。
而支持向量机则是基于统计学理论的基础上的,可以克服神经网络难以避免的问题,通过支持向量机在毕竟能力方面与BP网络仿真结果的比较表面:支持向量机具有较强的逼近和泛化能力。
硬间隔
在硬间隔SVM中,使用线性模型
描述分类平面,其中w为法向量、b为偏置项。对样本xi若
则预测为正类,若小于0则预测为负累。点到超平面几何距离为
。在假设数据线性可分的情况下,为了方便分析,通常对模型进行规范化,要求所有样本到分类超平面的距离至少为1,即满足约束
。距离超平面最近、恰好使该不平等式取等号的样本被称为支持向量,他们唯一决定最优超平面的位置。两类支持向量分别位于
上,其到超平面的距离之和即位分类间隔,大小为
。因此,最大化间隔等价于最小化
,最终SVM被表述为一个呆约束的凸优化问题:在满足
的前提下,最小化
。该模型被称为最大间隔分类器,具有良好的泛化能力和鲁棒性。
对偶问题
把复杂的求极值问题,变成简单的求极值问题,把约束条件归0,再乘上拉格朗日系数。求函数f在约束条件g下的极值的方法,其主要思想就是:将约束条件函数与原函数联立,从而求出使原函数取得极值的各个变量的解。
基本的拉格朗日乘子法
定义
对于具有1个等式约束的n维优化问题![]()
把原目标函数f(x)改造如下形式的新的目标函数
式中的hk(x)是原目标函数f(x)的等式约束条件,而待定系数λk成为拉格朗日乘子,这种方法成为拉格朗日乘子法。
在极值点处,有
共n+1个方程,足以算出这n+1个变量,此法也被称为升维法。
于是原问题可以得到一个求条件极值问题

这里使用拉格朗日乘子法,得到该问题的拉格朗日函数:
令对应偏导数为0(对w,b取极大值):
然后代入拉格朗日函数,并考虑之前约束,得到了原问题的对偶问题。

接触α后,求对应参数即可得到所需模型(即对α求偏导):

最后补充一下在最后一步问题求解时的一些别的方法和思想:
关于 SMO 求解方法。
SMO(Sequential Minimal Optimization)是一种用于高效求解支持向量机对偶问题的算法,其核心思想是在满足约束条件的前提下,将原本高维的二次规划问题拆解为一系列低维子问题来迭代求解。由于对偶问题中存在 ∑iαiyi=0\sum_i \alpha_i y_i = 0∑iαiyi=0 的等式约束,每次若只选择两个拉格朗日乘子 αi,αj\alpha_i,\alpha_jαi,αj 进行更新,并固定其余变量,就可以在不破坏约束的情况下完成优化。此时,其中一个变量可以用另一个变量表示,问题便退化为单变量的二次优化,从而能够得到解析解。SMO 的意义主要在于提升求解效率和工程可行性,而非改变 SVM 的理论结构。
关于 KKT 条件与支持向量。
在支持向量机的优化问题中,最优解必须满足 KKT 条件,其中最关键的是互补松弛条件:αi(yif(x(i))−1)=0\alpha_i (y_i f(x^{(i)}) - 1) = 0αi(yif(x(i))−1)=0。该条件表明,对于任意训练样本,要么其对应的拉格朗日乘子 αi=0\alpha_i = 0αi=0,要么该样本恰好满足 yif(x(i))=1y_i f(x^{(i)}) = 1yif(x(i))=1,即位于分类间隔边界上。由此可以得出,只有 αi>0\alpha_i > 0αi>0 的样本才会参与最终模型参数 w=∑iαiyix(i)w = \sum_i \alpha_i y_i x^{(i)}w=∑iαiyix(i) 的构造,这些样本被称为支持向量;而大多数训练样本由于 αi=0\alpha_i = 0αi=0,对最终分类超平面没有影响。这一性质从理论上解释了支持向量机“模型只由少量关键样本决定”的核心特征。
软间隔与正则化
现实中很难确定合适的超平面使得训练样本在特征空间中完全线性可分,即使貌似线性可分,也很难判断是否是过拟合所造成的。于是我们引入软间隔,允许支持向量在一些少量样本上出错。
基本思想:通过训练误差和类间宽度之间的权衡,得到一个最优超平面。
对于现实中很难确定合适的核函数使得训练样本在特征空间中线性可分,我们引入松弛变量构建软间隔SVM,带约束条件的最优化问题形式如下:

核函数
在前面部分,我们假设训练样本是线性可分的,即存在一个划分超平面将训练样本正确分类。然而现实中原始样本空间也许并不存在一个能正确划分两类样本的超平面。此时我们可以将样本数据映射到高位空间,在高位空间中寻找分类超平面。
当样本数据在原始特征空间中线性不可分时,支持向量机的基本思路是通过特征变换将数据映射到更高维的空间,在高维空间中寻找一个线性可分的分类超平面。 直观来看,低维空间中复杂的非线性边界,在高维空间中可能转化为简单的线性结构。例如,二维空间中呈环状分布的样本,通过引入新的非线性特征(如平方项或交叉项)映射到三维空间后,往往可以用一个平面将不同类别分开。因此,SVM 并不是直接在原空间中强行构造复杂的非线性分类器,而是通过“升维 + 线性分类”的方式间接解决非线性可分问题。
核方法的核心作用在于以计算可行的方式实现这种高维映射,而无需显式构造高维特征空间。 在实际问题中,若直接将数据映射到高维甚至无限维空间,不仅计算代价巨大,而且难以实现。核函数通过仅计算样本在高维空间中的内积,等价地完成了特征映射后的线性分类过程,这一思想被称为“核技巧”。因此,支持向量机可以在保持优化问题形式不变的前提下,引入非线性决策边界,从而兼顾模型表达能力与计算效率。这也解释了为何 SVM 在处理非线性分类问题时,依然能够保持良好的理论性质和稳定性能。
在支持向量机的对偶形式中,优化目标函数和约束条件均只涉及样本向量之间的内积运算 xi⊤xjx_i^\top x_jxi⊤xj,而不直接依赖样本的具体坐标表示。这表明模型关注的是样本之间的相对关系(相似性),而非单个样本在原空间中的绝对位置。因此,只要能够正确计算样本在某一特征空间中的内积,就等价于在该空间中完成线性分类,这为通过核函数引入高维特征映射提供了理论基础。
因为本人暂时对数学没什么兴致所以这里直接简单介绍一下核函数
核函数是一种计算样本相似度的方式,这种相似度等价于在某个高维特征空间中计算内积。通过引入核函数,支持向量机可以在保持线性模型形式不变的前提下,实现对非线性可分数据的分类。
为了直观理解核函数的作用,可以通过一个具体数值例子进行说明。 设两个三维向量
x=(1,2,3)x = (1,2,3)x=(1,2,3),y=(4,5,6)y = (4,5,6)y=(4,5,6)。若采用二次多项式映射 ϕ(⋅),将原始向量映射到包含平方项和交叉项的高维特征空间,则在该空间中计算内积 ⟨ϕ(x),ϕ(y)⟩ 需要逐项相乘并求和,其结果为16+40+72+40+100+180+72+180+324=1024。可以看到,显式构造高维特征并计算内积的过程较为繁琐。
然而,如果直接使用核函数进行计算,结果可以以更简单的方式得到。 对于二次多项式核,有
K(x,y)=⟨x,y⟩2。在本例中,原空间中的内积为⟨x,y⟩=1⋅4+2⋅5+3⋅6=32,因此
。这表明,直接在原空间中通过核函数计算得到的结果,与在高维特征空间中显式计算内积的结果完全一致,但计算复杂度显著降低:前者为 O(n),而后者为O(n^2)。该例子直观体现了核函数在保证等价性的同时,大幅提升计算效率的核心作用。
朴素贝叶斯
条件概率
P(A|B):在事情B发生的条件下A发生的条件概率,其求解公式是
在机器语言中定义P(A)表示在没有训练数据前假设A拥有的初始概率,P(A)被称为A的先验概率;P(B|A)表示假设B成立时A的概率,机器学习中我们关心的事P(B|A),即给定A时B的概率,称为B的后验概率。
贝叶斯定理公式:
P(B|A)随着P(B)和P(A|B)的增长而增长,随着P(A)的增长而减小,意味着如果AB独立,B被观察概率越大,B对A支持越小(即P(A|B)越小)。
贝叶斯决策
贝叶斯决策论,是指在概率框架下实施决策的基本方法,在分类问题情况下,在所有相关概率都已知的理想情形下,贝叶斯决策考虑如何基于这些概率和误判损失来选择最优的类别标记。这里的决策是指,我们根据现实中发生的一系列事情B、C、D,判断A是否发生,这里我们要考虑的有误判所产生的损失。如
反应了用cj的后验概率计算用x事件推导ci的条件风险。我们的任务是寻找一个判定准则,以最小化总体风险。![]()
具体而言,若目标是最小化分类错误率,则误判损失λi,j写为
此时条件风险
,所以要使条件风险最下,即使后验概率最大。
但是在实际中我们很难直接获得后验概率,所以我们通常训练模型来通过数据估计后验概率,通常有判别式模型(直接建模估计P(c|x)),和生成式模型(建模估计P(x,c)再计算后验概率)。
朴素贝叶斯工作流程
我们在朴素贝叶斯工作时,假设词语之间是相互独立的,有了条件独立假设,就不必计算X和Y的每一种组合的类条件概率,只需对给定的Y,计算每个Xi的条件概率,这样就不需要很大的训练集就能获得较好的概率估计。
以下介绍不俗贝叶斯分类的流程
第一阶段
确定特征属性并对每个特征属性进行划分,然后人工对一部分待分类项进行分类,形成训练样本集合。
第二阶段
生成分类器。主要工作是计算每个类别在训练样本中的出现频率及每个特征属性划分对每个类别的条件概率估计,并记录结果。
第三阶段
这个阶段的任务是使用分类器对待分类项进行分类。
贝叶斯网络
朴素贝叶斯模型所需估计的参数很少,对缺失数据不太敏感,算法也比较简单,理论上NBC模型与其他分类方法相比具有最小的误差率。但是朴素贝叶斯分类有一个限制条件:特征属性必须有条件独立或基本独立(实际上基本不可能实现)。当这个条件成立时,朴素贝叶斯分类法的准确率是最高的,但是现实中哥哥特征属性往往不满足条件独立,这限制了朴素贝叶斯分类的能力。于是诞生了一种更高级、应用范围更广的贝叶斯网络。
把某个研究系统重设计的随机变量,根据是否条件独立绘制在一个有向图中,就形成贝叶斯网络,又称有向无环图模型,是一种概率图模型,根据概率图的拓扑结构,考差一组随机变量,及其n组的条件概率分布的性质。
定义
贝叶斯网络是一个二元组,为有向无环图,即BN=(G,P),G=(V,E)。其中V为节点集合,与领域的随机变量一一对应,E为有向边集,反应节点变量之间的因果以来关系,P为节点的概率分布,表示节点之间的因果影响强度。
从定性和定量两个角度理解:
在定性层面:贝叶斯网络是一个有向无环图,其中节点代表随机变量,节点之间的边代表变量之间的直接依赖关系。
在定量层面:每个节点都有一个条件概率表,刻画了父变量对子变量的影响程度。
综上,一个贝叶斯网络由网络结构和条件概率表两个部分组成,网络结构式一个有向无环图,由若干节点和有向弧组成;条件概率表描述属性之间的依赖关系,用于表示其父节点对该节点的影响,如果没有父节点,则表示的事先验概率。
在已知参加聚会情况下,计算有酒味概率:

在已知X射线呈阳性情况下,计算患脑瘤概率:

贝叶斯网络特点
具有坚实的数学基础:贝叶斯理论是贝叶斯概率和统计学理论相结合的结果,长期的理论研究和实践应用,证明了其有效性和正确性。
有向无环图,能够清晰直观地显示变量之间的因果关系。
可以图形化表示随机变量间的联合概率,利用概率理论能够处理各种不确定性信息。
可以处理不完整和呆噪音的数据集。
聚类
同一簇中的样本尽可能相似,不同簇的样本尽可能不同,属于典型的非监督学习方法。
聚类是一个将数据集划分为若干组或类的过程,并使得同一个组内的数据具有较高的相似度,而不同组的数据对象是不相似的。相似或不相似是基于数据属性的取值来确定的,通常利用各数据对象间的距离来表示。
聚类是以一种无监督的学习方法,与分类不同,其不依赖于实现确定的数据类别,以及标有数据类别的学习训练样本集合。
聚类度量指标
相似性的度量指标:距离计算

还有一些别的距离

对于不同的属性类型我们有不同的计算方法,对于无序属性(即属性不像1,2,3这样子有具体的顺序)采用VDM。

对于混合属性,采用闵可夫斯基距离和VDM结合:

当样本空间中不同属性的重要性不同时,还可以使用加权距离:

目标的实现
在聚类时我们的目标是簇内相似度高,簇间相似度低。
我们可以采取监督的外部指标(度量簇标号与外部提供的标号的匹配程度)、非监督的指标(不考虑外部信息,仅使用出现在数据集中的信息)、其他指标(如熵、纯度、准确率、召回率、F1)。
外部指标

这里a,b,c,d含义如下:

簇内指标

K-Means聚类
K-Means聚类算法以k为参数,把n个对象分为k个簇,使簇内对象具有较高的相似度,而簇间相似度较低。相似度的计算根据一个簇中对象的平均值进行。
流程
输入:K聚类簇个数;训练集{x1,x2,x3,……}
首先随机指定K个类的中心,μ1,μ2,μ3,……,μk,然后迭代更新中心直到收敛。
for i=1 to m
用最近邻分类器进行分类:计算xi距离最近的聚类簇的中心,将其作为xi的类别。
for k=1 to K
更新聚类簇的中心:用所有属于第k个簇的样本均值去更新μk,即μk=avg(xi|yi=k),这里yi指的是第i个样本所属类。
算法时间复杂度
计算两个点之间距离需要O(n),这里n是特征维度,最近邻分类时需要对所有m个样本计算到K个聚类簇中心的距离,时间复杂度O(mK),更新簇中心时间复杂度O(mn),假设需要l次迭代,时间复杂度O(lKmn)。
聚类初始化
最终的聚类结果依赖于初始化,不同的初始化可能得到不同的聚类结果。
聚类初始化方法有:随机初始化;选择彼此距离尽可能远的K个点;先对数据用层次聚类算法或Canopy算法进行聚类,得到K个簇后,从每个类簇中选择一个点,该点可以是簇的中心点,或者是距离类簇中心点最近的点。
簇的直径半径
类簇的直径是指类簇内任意两点间最大距离,类簇的半径是指类簇内所有点到类簇中心距离最大值。
算法特点
只适用于均值有意义的场合,在某些应用中,如:数据集中包含符号属性时,直接应用K-means算法就有问题;用户必须提前指定K的大小;对噪声和孤立点数据敏感,少量的该类数据能够对聚类均值起很大影响。
K-中心点(K-mediods)聚类算法
对于K-means算法对于孤立点敏感的特点,我们不采用簇中对象的平均值作为参照点,而选用簇中位置最中心的对象,即中心点,仍然基于最小化所有对象与其参照点之间的距离之和的原则进行。
基本策略
聚类的基本思想是首先为每一个簇随意选择一个代表对象,称为中心点,其余对象根据与各中心点之间的距离,被分配到距离最近的簇中。随后,通过反复迭代的方式,用非中心点对象替代当前的中心点对象,如果这种替代能够改善聚类结果(例如降低整体距离或代价函数值),则接受该替代并继续迭代。聚类结果的质量通常通过一个代价函数来衡量,该函数用于度量对象与其参考对象(如中心点或代表对象)之间的平均相异度,代价函数越小,聚类结果越好。
输入:聚类个数 kkk,以及包含 nnn 个数据对象的数据集。
输出:满足以各聚类中心对象为参考、使总体代价(方差或相异度)最小的 kkk 个聚类结果。
处理流程:首先,从 nnn 个数据对象中任意选择 kkk 个对象作为初始聚类的中心(代表对象)。随后进入迭代过程:根据每个聚类中心对象以及各数据对象到这些中心对象之间的距离,将每个对象分配到距离最近的中心对象所代表的聚类中。接着,从非中心对象中任意选择一个对象 OrandomO_{random}Orandom,计算其与当前某一中心对象 OjO_jOj 交换后所带来的整体代价变化 SSS。若该代价变化为负值,即交换能够降低总体代价,则用 OrandomO_{random}Orandom 替换 OjO_jOj,作为新的聚类中心对象。上述过程不断重复,直至聚类结果不再发生变化或达到终止条件。
K-平均 K-中心比较
K-中心点方法比K-平均方法更健壮,因为其不易受到极端数据影响;但K-中心点方法比K-均值方法的执行代价高;两种方法都需要用户提前指定K值。
层次方法
AGNES算法
AGNES 是一种典型的凝聚型层次聚类方法,其基本思想是:最初将数据集中每一个对象都视为一个独立的簇,然后根据预先定义的相似度或距离准则,逐步将距离最近的两个簇合并成一个新的簇。该合并过程不断重复,在每一步中都选择当前最相似(或距离最近)的两个簇进行合并,直到达到预先设定的终止条件,例如簇的数量减少到给定的 kkk 个为止。最终输出的是满足终止条件的 kkk 个聚类结果。
AGNES算法实现简单,但经常会遇到合并点难以选择的困难,若一旦一组对象被合并,下一步待处理将在新生成的簇上进行,已经做的处理不能撤销,聚类之间也不能交换对象,一步合并错误,可能会导致低质量聚类结果。
DIANA算法
DIANA 是一种分裂型的层次聚类算法,其基本思想与凝聚型方法(如 AGNES)相反。算法从一个包含所有数据对象的整体簇开始,在每一步中选择“内部差异最大”的簇进行拆分,而不是将相似的簇合并。通过不断地对簇进行划分,最终得到满足终止条件(如簇数达到 kkk)的聚类结果。
在具体过程中,DIANA 首先将所有对象视为一个初始簇。随后,在当前所有簇中找出直径最大的簇,即簇内对象之间差异最大的簇,并将其作为待分裂的对象。对于该簇,算法选择与其他对象平均相异度最大的对象作为“分裂点”,将其单独划入一个新的子簇(splinter group),其余对象暂时保留在原簇(old party)中。接下来,通过比较对象到 splinter group 与 old party 的距离关系,逐步将更接近 splinter group 的对象移动到该子簇中,直到不再有对象满足移动条件。这样,一个簇被分裂为两个新的簇。上述过程不断重复,直到达到预先设定的终止条件为止。
DIANA 通过“先整体、再细分”的方式构建聚类结构,能够较早地反映数据中的全局结构信息,但由于每一步分裂都需要计算簇内对象之间的相异度,其计算复杂度较高,在大规模数据集上应用受限。相较于 AGNES 的逐步合并策略,DIANA 更强调从全局到局部的层次划分思路。
基于密度的聚类算法:DBSCAN
定义 1:对象的 ε-邻域
给定对象 ppp,其 ε-邻域指的是数据集中所有与 ppp 的距离不大于 ε 的对象所构成的集合。ε-邻域用于刻画对象在局部空间中的密度范围,是 DBSCAN 中衡量“局部稠密程度”的基础概念。
定义 2:核心对象
如果一个对象 ppp 的 ε-邻域中所包含的对象数量不少于给定的最小阈值 MinPts,则称对象 ppp 为核心对象。核心对象代表数据空间中的高密度区域,是形成簇的“生长起点”。
定义 3:直接密度可达
在对象集合 DDD 中,若对象 ppp 位于对象 qqq 的 ε-邻域内,且对象 qqq 是一个核心对象,则称对象 ppp 是从对象 qqq 出发直接密度可达的。直接密度可达刻画的是“一步之内”的密度扩展关系,并且该关系是非对称的。
定义 4:密度可达
如果存在一个对象序列 p1,p2,…,pnp_1, p_2, \ldots, p_np1,p2,…,pn,其中 p1=qp_1 = qp1=q,pn=pp_n = ppn=p,并且对任意 iii(1≤i<n1 \le i < n1≤i<n),对象 pi+1p_{i+1}pi+1 都是从对象 pip_ipi 关于 ε 和 MinPts 直接密度可达的,则称对象 ppp 是从对象 qqq 关于 ε 和 MinPts 密度可达的。密度可达描述的是通过多个“直接密度可达”关系逐步扩展形成的单向可达性。
定义 5:密度相连
如果在对象集合 DDD 中,存在某一对象 ooo,使得对象 ppp 和对象 qqq 都是从对象 ooo 关于 ε 和 MinPts 密度可达的,则称对象 ppp 和对象 qqq 是关于 ε 和 MinPts 密度相连的。密度相连用于刻画对象之间是否属于同一个密度连通区域,是构成簇的判定依据。
定义 6:噪声
在基于密度的聚类结果中,所有不属于任何一个密度相连对象集合的对象,均被视为噪声。噪声点既不是核心对象,也无法通过密度可达或密度相连关系归入任何簇中。
基于密度的聚类算法 DBSCAN 根据点在数据空间中的局部密度特征,将数据对象划分为核心点、边界点和噪声点三类。
核心点是指在以自身为中心、半径为 ε 的邻域内,所包含的数据点数量不少于给定阈值 MinPts 的对象,核心点位于高密度区域,是形成簇的基础。边界点是指其 ε-邻域内点的数量不足 MinPts,但该点位于某个核心点的 ε-邻域内,因此可以被密度扩展过程吸收进对应的簇中。噪声点则是既不是核心点,也不属于任何核心点 ε-邻域的对象,这类点无法归入任何簇,通常被视为离群点或背景噪声。
DBSCAN 算法通过密度可达关系逐步构建聚类结果。
算法以包含 nnn 个对象的数据集为输入,并给定半径参数 ε 以及最小点数 MinPts。在聚类过程中,算法不断从数据集中选取尚未处理的对象进行检查:若该对象是核心点,则以该点为起始,通过密度可达关系找出所有可从该点扩展到的对象,并将这些对象组成一个新的簇;若该对象不是核心点,则将其视为边界点或噪声点,并暂不生成新的簇。上述过程不断重复,直到所有对象均被处理完毕,最终输出满足密度要求的聚类结果。
DBSCAN聚类算法优点:基于密度定义,相对抗噪音,能处理任意形状和大小的簇。
DBSCAN聚类算法缺点:当簇密度变化太大会有麻烦;对于高位问题,密度定义麻烦。
集成学习
在机器学习中,直接建立一个高性能分类器是很困难的,但是如果能找到一系列性能较差的分类器并把它们集成起来的话,可能可以得到更好的分类器。
集成学习就是一种把输入送入多个学习器,再通过某种办法把学习的结果集成起来的方法,这里的每一个学习器,相应的被称为“弱学习器”。
弱学习机和强学习机
弱学习机:对一定分布的训练样本给出假设(仅仅强于随机猜测)。
强学习机:根据得到的弱学习机和相应的权重给出假设(最大程度上符合实际情况)。
集成学习概念
构造集成学习
通常的学习算法,会根据训练集不同给出不同的学习器,这时可以通过改变训练集构造不同的学习器然后再把它们集成起来。
随机采样
在原来的训练集上随机采样,可以得到新的训练集。
带权的采样
采样时,我们可以给训练集里的每个元素不同的权,权值可以通过上一次训练的结果来确定。
通过给训练数据赋以不同的权,实际上使得每个学习器关注训练集中的某一部分,这也符合我们最初民主投票的想法。直观上,每个学习器关注训练集中的某一部分,很多个训练集应该可以覆盖训练集中的大部分,只要巧妙的选择加权平均的权,就可以得到更好的学习效果。
泛化能力
泛化能力越强,处理新数据的能力越好,泛化能力是机器学习关注的基本问题之一。
如何构建好的集成
个体之间必须要有差异,同时个体的精度不能太低。个体学习器越精确,差异越大,集成越好。
虽然多个个体集成比单个个体好,但也并不意味着个体越多越好,因为更多的个体意味着在预测时需要更大的计算开销,因为要计算更多的个体预测,同时随着个体的增加,个体之间的差异会越来越难获取。
重采样技术
这种方法主要思想是利用同一个训练样本集合,构造多个分类器,然后以某种方式将这些分类器组合成一个分类器,主要方法有bagging算法和boosting算法。
产生好而不同的弱学习器
个体学习器存在依赖关系,依次生成:Adaboost
个体学习器之间不存在依赖关系,可同时生成:Bagging和随机森林
Boosting
boosting算法利用训练样本集合构造多个分量分类器,它只要求这个分量分类器是一个弱分类器——准确率比平均性能好即可。
两类问题,三个分量分类器的训练算法
在数量为n的原始样本集D中随机选取n1个样本构成D1,利用D1训练出一个分类器C1;在样本集D-D1中选择被C1正确分类和错误分类的样本各一半组成样本集D2,用D2训练处一个分类器C2;将样本集D-D1-D2中所有C1和C2分类结果不同的样本组成样本集D3,训练处一个分类器C3。
对新的样本x进行分类,如果C1和C2判别结果相同,则将x判别为此类,否则以C3结果作为x类别。
Boosting算法步骤
首先给每一个训练样例赋予相同的权重;然后训练第一个基本分类器并用它来对训练集进行测试,对于那些分类错误的测试样例提高权重,然后用调整后的带权训练集训练第二个基本分类器;最后重复这个过程直到最后得到一个足够好的学习器。
Adaboost
中心思想是提高分错样本的权重。

假如预测结果和标签一致(h(x)==f(x))则exp(-a),其中a是一个正数,表示权重降低,若结果标签不一致权重上升。这里的exp()是e的指数函数。
分类器采用的函数形式为:
这个希腊符号εt表现了错误样本权重和,假如εt越高,αt越低,意味着错的多的分类器权重低(舍弃甚至反向),反之αt越大,分类器权重越高。
工作原理我们可以理解为,我们每次提高错误点的权值,当下一次分类器再次分错了这些点之后,会提高整体的错误率,这样就导致对应分类器的权值变小,最终会导致这个分类器在整个混合分类器的权值变低。
Bagging
Bagging算法全称Bootstrap Aggregation自动聚合,简单理解就是并行训练很多分类器。
Bagging的特点在随机采样,随机采样就是从训练集里面采集固定个数的样本,但是每采集一个样本后,都将样本放回,也就是说,之前采集到的样本在放回后有可能继续被采集到。
对于分类问题,通常使用简单投票法,得到票数最多的类为最终模型输出。对于回归问题,通常使用简单平均法,对T个弱学习器得到的回归结果进行算术平均得到最终的模型输出。
由于Bagging算法每次都进行采样来训练模型,因此泛化能力很强,对于降低模型方差很有作用。当然对于训练集的拟合程度会差一些。
随机森林
随机森林就是用随机方式建立一个森林。森林由很多决策树组成,随机森林的每一颗决策树之间是没有关联的,在得到森林之后,当有一个新的输入样本进入的时候,就让森林中的每一棵决策树分别进行一下判断,看看这个样本应该属于哪一类。然后看看哪一类被选择最多,就预测这个样本为那一类。
随机森林增长
从容量为N的原始训练样本数据中采取放回抽样的方法随机抽取自助样本集,重复k次形成一个新的训练集N,以此生成一棵分类树。
每个自助样本集生长为单棵分类树,该自助样本集是单分类树的全部训练数据。设有 M 个输入特征,则在树的每个节点处从 M 个特征中随机挑选 mtry 个特征,按照节点不纯度最小的原则从这 mtry 个特征中选出一个特征进行分支生长,然后分别递归调用上述过程构造各个分支,直到这棵树能准确地分类训练集或所有属性都已被使用过。在整个森林的生长过程中,mtry 将保持恒定。
分类树为了达到低偏差和高差异而要充分生长,使每个节点的不纯度达到最小,不进行通常的剪枝操作。
Bagging和Boosting区别
数据方面
Bagging:对数据进行采样训练。
Boosting:根据前一轮学习结果调整数据的重要性。
投票方面
Bagging:所有学习器平均投票。
Boosting:对学习器进行加权投票。
学习顺序
Bagging的学习是并行的,每个学习器没有依赖关系。
Boosting的学习是串行的,学习有先后顺序。
主要区别
Bagging主要用于提高泛化性能。
Boosting主要用于提高训练精度。
混淆矩阵(整理的时候刚好学到这一章有,但是实际上不是特别针对这一章知识点)
TP表示预测值为正,实际值也为正;FP表示预测值为正,实际值为反;FN表示预测值为反,实际值为正;TN表示预测值为反,实际值为反。

对于预测性分类模型,我们肯定希望预测结果越准越好,在混淆矩阵中就是TP与TN数值越大越好,FP和FN越小越好。在实际预测中但看这些数值往往不够,我们通常会通过以下指标判定模型结果好坏。
准确率(Accuracy)=
(在整个观察结果中,预测正确的占比)
精准率(Precision)=
(在所有预测为正例的结果中,预测正确的占比)
召回率(Recall)=
(在所有实际值为正例的结果中预测正确的占比)
F1_score=
(P代表精确率,R代表召回率)
更多推荐



所有评论(0)