在获取的数据中经常会遇到唯一属性,这些属性通常是人为添加的一些id
属性,如存放在数据库中的自增的主键。
对于这些属性,它并不能刻画样本自身的分布规律。所以只需要简单的删除这些属性。
对于数据中的某个属性,如果其方差很小,则意味着其识别能力较弱。极端情况下其方差为0,这意味着该属性在所有样本上的值都是恒定的。
因此可以设定一个阈值(如 ),将方差小于该阈值的属性直接剔除。
数据缺失值的产生的原因多种多样,主要分为客观原因和人为原因。
缺失值的处理有三种方法:
直接使用含有缺失值的数据。
某些算法可以直接使用含有缺失值的情况,如决策树算法可以直接使用含有缺失值的数据。
删除含有缺失值的数据。
最简单的办法就是删除含有缺失值的样本。
优点:简单、高效。
缺点:如果样本中的缺失值较少,则直接丢弃样本会损失大量的有效信息。这是对信息的极大浪费。
如果样本中包含大量的缺失值,只有少量的有效值,则该方法可以接受。
缺失值补全。
用最可能的值来插补缺失值。这也是在实际工程中应用最广泛的技术。
缺失值补全常见有以下方法:
均值插补:
均值插补在含有缺失值的属性上的所有缺失值都填补为同一个值。
而同类均值插补首先将样本进行分类,然后以该类中的样本的均值来插补缺失值。
建模预测的思想是:将缺失的属性作为预测目标,通过建立模型来预测。
给定数据集 。
假设属性 含有缺失值,根据 是否缺失,将数据集划分为:
将 中的样本作为新的训练集,标签值重新定义为属性 的值,通过建模来完成属性 的学习。将 中的样本作为测试集,通过学得的模型来预测其属性 的值。
这种方法的效果相对较好,但是该方法有个根本缺陷:
一般的情况是介于两者之间。
高维映射的思想是:将属性映射到高维空间。
给定数据集 ,假设属性 的取值为离散值 一共 个值,则将该属性扩展为 个属性 ,其中:
对于连续特征,高维映射无法直接处理。可以在连续特征离散化之后,再进行高维映射。
高维映射是最精确的做法,它完全保留了所有的信息,也未增加任何额外的信息。比如广告的CTR
预估模型,预处理时会把所有变量都这样处理,达到几亿维。
多重插补(Multiple Imputation:MI
)认为待插补的值是随机的,它的值来自于已观测到的值。
具体实践上通常是估计出待插补的值,然后再加上不同的噪声,形成多组可选插补值。然后根据某种选择依据,选取最合适的插补值。
多重插补法的步骤:
在现实任务中,经常希望根据部分信息来恢复全部信息。压缩感知和矩阵补全就是用于完成这个任务。
假定有长度为 的离散信号 。 根据奈奎斯特采样定理,当采样频率达到 最高频率的两倍时,采样后的信号就保留了原信号的全部信息。
假定以远小于奈奎斯特采样定理要求的采样频率进行采样,得到了长度为 的采样后信号 , 其中 。 则有: 。
其中 是对信号 的测量矩阵,它确定了以什么样的频率采样以及如何将采样样本组成采样后的信号。
通常在已知离散信号 和测量矩阵 时要得到测量值 很容易。但是如果给定测量值 和测量矩阵 , 要还原出原始信号 比较困难。这是由于当 时, 是一个欠定方程,无法简单的求出数值解。
假设存在某种线性变换 , 使得 ,其中 也和 一样是 维列向量,则有 。令 ,则 。
如果能够从 中恢复 ,则能够通过 从 中恢复出 。
从数学意义上来看,这种做法没有解决任何问题。因为根据 , 从 中恢复 这个问题仍然是欠定的。
但是在实际应用中发现,如果 具有稀疏性(即大量的分量为零),则该问题能够很好地求解。这是因为稀疏性使得未知因素的影响大大减少。
此时 称作稀疏基,而 的作用类似于字典,能够将信号转换为稀疏表示。
与特征选择、稀疏表示不同,压缩感知侧重的是如何利用信号本身所具有的稀疏性,从部分观测样本中恢复原信号。
压缩感知分为感知测量和重构恢复两个阶段。
限定等距性Restricted Isometry Property:RIP
:对于大小为 的矩阵 ,若存在常数 ,使得对于任意向量 和 的所有子矩阵 ,都有:
则称 满足 限定等距性 k-RIP
。
此时通过下面的最优化问题可以近乎完美的从 中恢复出稀疏信号 ,进而恢复出 :
这里 范数表示向量中非零元素的个数。
该最优化问题涉及 范数最小化,这是个 NP
难问题。但是 范数最小化在一定条件下与 范数最小化问题共解,于是实际上只需要求解最小化问题:
可以将该问题转化为LASSO
等价形式,然后通过近端梯度下降法来求解。
矩阵补全matrix completion
解决的问题是:
其中
该最优化问题也是一个 NP
难问题。
考虑到 在集合 上的凸包是 的核范数nuclear norm
:
其中 表示 的奇异值。于是可以通过最小化矩阵核范数来近似求解:
该最优化问题是一个凸优化问题,可以通过半正定规划Semi-Definite Programming:SDP
求解。
理论研究表明:若 的秩为 ,则只需要观察 个元素就能够完美恢复出 。
特征二元化的过程是将数值型的属性转换为布尔值的属性。通常用于假设属性取值为取值分布为伯努利分布的情形。
特征二元化的算法比较简单。 对属性 指定一个阈值 。
阈值 是一个超参数,其选取需要结合模型和具体的任务来选择。
对于非数值属性,如性别:[男,女]、国籍:[中国,美国,英国]
等等,可以构建一个到整数的映射。如性别:[男,女]
属性中,将男
映射为整数 1、女
映射为整数 0。
该方法的优点是简单。但是问题是,在这种处理方式中无序的属性被看成有序的。男
和女
无法比较大小,但是1
和0
有大小。
解决的办法是采用独热码编码One-Hot Encoding
。
One-Hot Encoding
采用N
位状态位来对N
个可能的取值进行编码,每个取值都由独立的状态位来表示,并且在任意时刻只有其中的一位有效。
假设属性 的取值为非数值的离散集合 ,独热码将其扩展成 个属性,每个新属性代表属性 的一个状态位:若样本在属性 上的取值为 ,则样本在新的属性 上的取值为 1,在新的属性 上的取值为 0 。
这种做法中,如果在 上取值全为 0,则表示发生了缺失。
缺失值也可以用第 个状态位来表示。
也可以扩展成 个属性, 如果在 上取值全为 0,则表示样本在属性 上的取值为 。
One-Hot Encoding
的优点:
性别
是一个属性,经过独热码编码之后变成了是否男
和 是否女
两个属性。在决策树模型中,并不推荐对离散特征进行one-hot
。 主要有两个原因:
产生样本切分不平衡的问题,此时且分增益会非常小。
如:国籍
这个离散特征经过独热码编码之后,会产生是否中国、是否美国、是否英国、...
等一系列特征。在这一系列特征上,只有少量样本为1
,大量样本为0
。
这种划分的增益非常小,因为拆分之后:
影响决策树的学习。
决策树依赖的是数据的统计信息。而独热码编码会把数据切分到零散的小空间上。在这些零散的小空间上,统计信息是不准确的,学习效果变差。
本质是因为独热码编码之后的特征的表达能力较差的。该特征的预测能力被人为的拆分成多份,每一份与其他特征竞争最优划分点都失败。最终该特征得到的重要性会比实际值低。
离散化用于将连续的数值属性转化为离散的数值属性。
是否使用特征离散化,这背后是:使用“海量离散特征+简单模型”,还是“少量连续特征+复杂模型”。
对于线性模型,通常使用“海量离散特征+简单模型”。
对于非线性模型(如深度学习),通常使用“少量连续特征+复杂模型”。
离散化的常用方法是分桶。
将所有样本在连续的数值属性 的取值从小到大排列 。
然后从小到大依次选择分桶边界 。其中:
给定属性 的取值 ,对其进行分桶:
分桶的数量和边界通常需要人工指定。一般有两种方法:
根据业务领域的经验来指定。如:对年收入进行分桶时,根据2017年全国居民人均可支配收入约为 2.6 万元,可以选择桶的数量为5。其中:
根据模型指定。根据具体任务来训练分桶之后的数据集,通过超参数搜索来确定最优的分桶数量和分桶边界。
选择分桶大小时,有一些经验指导:
分桶大小必须足够小,使得桶内的属性取值变化对样本标记的影响基本在一个不大的范围。
即不能出现这样的情况:单个分桶的内部,样本标记输出变化很大。
分桶大小必须足够大,使每个桶内都有足够的样本。
如果桶内样本太少,则随机性太大,不具有统计意义上的说服力。
每个桶内的样本尽量分布均匀。
在工业界很少直接将连续值作为逻辑回归模型的特征输入,而是将连续特征离散化为一系列 0/1 的离散特征。
其优势有:
离散化之后得到的稀疏向量,内积乘法运算速度更快,计算结果方便存储。
离散化之后的特征对于异常数据具有很强的鲁棒性。
如:销售额作为特征,当销售额在 [30,100)
之间时,为1,否则为 0。如果未离散化,则一个异常值 10000 会给模型造成很大的干扰。由于其数值较大,它对权重的学习影响较大。
逻辑回归属于广义线性模型,表达能力受限,只能描述线性关系。特征离散化之后,相当于引入了非线性,提升模型的表达能力,增强拟合能力。
假设某个连续特征 ,它离散化为 个 0/1 特征 。则:
。其中 是离散化之后的新的特征,它们的取值空间都是 。
上式右侧是一个分段线性映射,其表达能力更强。
离散化之后可以进行特征交叉。假设有连续特征 ,离散化为 个 0/1 特征;连续特征 ,离散化为 特 0/1 特征,则分别进行离散化之后引入了 个特征。
假设离散化时,并不是独立进行离散化,而是特征 联合进行离散化,则可以得到 个组合特征。这会进一步引入非线性,提高模型表达能力。
离散化之后,模型会更稳定。
如对销售额进行离散化,[30,100)
作为一个区间。当销售额在40左右浮动时,并不会影响它离散化后的特征的值。
但是处于区间连接处的值要小心处理,另外如何划分区间也是需要仔细处理。
特征离散化简化了逻辑回归模型,同时降低模型过拟合的风险。
能够对抗过拟合的原因:经过特征离散化之后,模型不再拟合特征的具体值,而是拟合特征的某个概念。因此能够对抗数据的扰动,更具有鲁棒性。
另外它使得模型要拟合的值大幅度降低,也降低了模型的复杂度。
数据标准化是将样本的属性取值缩放到某个指定的范围。
数据标准化的两个原因:
某些算法要求样本数据的属性取值具有零均值和单位方差。
样本不同属性具有不同量级时,消除数量级的影响。如下图所示为两个属性的目标函数的等高线。
数量级的差异将导致量级较大的属性占据主导地位。
从图中看到:如果样本的某个属性的量级特别巨大,将原本为椭圆的等高线压缩成直线,从而使得目标函数值仅依赖于该属性。
数量级的差异将导致迭代收敛速度减慢。
原始的特征进行梯度下降时,每一步梯度的方向会偏离最小值(等高线中心点)的方向,迭代次数较多,且学习率必须非常小,否则非常容易引起宽幅震荡。
标准化后进行梯度下降时,每一步梯度的方向都几乎指向最小值(等高线中心点)的方向,迭代次数较少。
所有依赖于样本距离的算法对于数据的数量级都非常敏感。
如 近邻算法需要计算距离当前样本最近的 个样本。当属性的量级不同时,选取的最近的 个样本也会不同。
设数据集 。常用的标准化算法有:
min-max
标准化:对于属性 ,设所有样本在属性 上的最大值为 ,最小值为 。则标准化后的属性值为:
标准化之后,所有样本在属性 上的取值都在 [0,1]
之间。
z-score
标准化:对于属性 ,设所有样本在属性 上的均值为 ,方差为 。则标准化后的属性值为:
标准化之后,样本集的所有属性的均值都为 0,标准差均为 1。
注意:如果数据集分为训练集、验证集和测试集,则:训练集、验证集、测试集使用相同标准化参数,该参数的值都是从训练集中得到。
min-max
标准化,则属性 的标准化参数 都是从训练集中计算得到。z-score
标准化,则属性 的标准化参数 都是从训练集中计算得到。数据正则化是将样本的某个范数(如 范数)缩放到单位1。
设数据集 。 则样本 正则化后的结果为:
其中 为范数: 。
正则化的过程是针对单个样本的,对每个样本将它缩放到单位范数。
标准化是针对单个属性的,需要用到所有样本在该属性上的值。
通常如果使用二次型(如点积)或者其他核方法计算两个样本之间的相似性时,该方法会很有用。
对于一个学习任务,给定了属性集,其中某些属性可能对于学习来说是很关键的,但是有些属性可能就意义不大。
relevant feature
。irrelevant feature
。从给定的特征集合中选出相关特征子集的过程称作特征选择feature selection
。
特征选择可能会降低模型的预测能力。因为被剔除的特征中可能包含了有效的信息,抛弃了这部分信息会一定程度上降低预测准确率。
这是计算复杂度和预测能力之间的折衷:
特征选择是一个重要的数据预处理(data preprocessing
)过程。在现实机器学习任务中,获取数据之后通常首先进行特征选择,然后再训练学习器。
进行特征选择的原因:
首先,在现实任务中经常会遇到维数灾难问题,这是由于属性过多造成的。如果能从中选择出重要的特征,使得后续学习过程仅仅需要在一部分特征上构建模型,则维数灾难问题会大大减轻。
从这个意义上讲,特征选择与降维技术有相似的动机。事实上它们是处理高维数据的两大主流技术。
其次,去除不相关特征往往会降低学习任务的难度。
特征选择过程必须确保不丢失重要特征,否则后续学习过程会因为重要信息的缺失而无法获得很好的性能。
给定数据集,如果学习任务不同,则相关特征很可能不同,因此特征选择中的无关特征指的是与当前学习任务无关的特征。
有一类特征称作冗余特征redundant feature
,它们所包含的信息能从其他特征中推演出来。
这里暂且不讨论冗余特征,且假设初始的特征集合包含了所有的重要信息。
要想从初始的特征集合中选取一个包含了所有重要信息的特征子集,如果没有任何领域知识作为先验假设,则只能遍历所有可能的特征组合。
这在计算上是不可行的,因为这样会遭遇组合爆炸,特征数量稍多就无法进行。
一个可选的方案是:
这里有两个问题:如何根据评价结果获取下一个候选特征子集?如何评价候选特征子集的好坏?
如何根据评价结果获取下一个候选特征子集?这是一个子集搜索subset search
问题。
解决该问题的算法步骤如下:
给定特征集合 ,首先将每个特征看作一个候选子集(即每个子集中只有一个元素),然后对这 个候选子集进行评价。
假设 最优,于是将 作为第一轮的选定子集。
然后在上一轮的选定子集中加入一个特征,构成了包含两个特征的候选子集。
假定 最优,且优于 ,于是将 作为第二轮的选定子集。
....
假定在第 轮时,本轮的最优的特征子集不如上一轮的最优的特征子集,则停止生成候选子集,并将上一轮选定的特征子集作为特征选择的结果。
这种逐渐增加相关特征的策略称作前向forward
搜索。
类似地,如果从完整的特征集合开始,每次尝试去掉一个无关特征,这样逐渐减小特征的策略称作后向backward
搜索。
也可以将前向和后向搜索结合起来,每一轮逐渐增加选定相关特征(这些特征在后续迭代中确定不会被去除)、同时减少无关特征,这样的策略被称作双向bidirectional
搜索。
该策略是贪心的,因为它们仅仅考虑了使本轮选定集最优。但是除非进行穷举搜索,否则这样的问题无法避免。
如何评价候选特征子集的好坏?这是一个子集评价subset evaluation
问题。
给定数据集 ,假设所有属性均为离散型。对属性子集 , 假定根据其取值将 分成了 个子集:
于是可以计算属性子集 的信息增益:
其中 为集合大小, 为熵。
信息增益越大,则表明特征子集 包含的有助于分类的信息越多。于是对于每个候选特征子集,可以基于训练数据集 来计算其信息增益作为评价准则。
更一般地,特征子集 实际上确定了对数据集 的一个划分规则。
将特征子集搜索机制与子集评价机制结合就能得到特征选择方法。
常见的特征选择方法大致可分为三类:过滤式filter
、包裹式wrapper
、嵌入式embedding
。
过滤式方法先对数据集进行特征选择,然后再训练学习器,特征选择过程与后续学习器无关。
这相当于先用特征选择过程对初始特征进行过滤,再用过滤后的特征来训练模型。
Relief:Relevant Features
是一种著名的过滤式特征选择方法,该方法设计了一个相关统计量来度量特征的重要性。
该统计量是一个向量,其中每个分量都对应于一个初始特征。特征子集的重要性则是由该子集中每个特征所对应的相关统计量分量之和来决定的。
最终只需要指定一个阈值 ,然后选择比 大的相关统计量分量所对应的特征即可。
也可以指定特征个数 ,然后选择相关统计量分量最大的 个特征。
给定训练集 。 对于每个样本 :
Relief
先在 同类样本中寻找其最近邻 ,称作猜中近邻near-hit
。
然后从 的异类样本中寻找其最近邻 ,称作猜错近邻near-miss
。
然后相关统计量对应于属性 的分量为:
其中 为两个样本在属性 上的差异值,其结果取决于该属性是离散的还是连续的:
如果属性 是离散的,则:
如果属性 是连续的,则:
注意:此时 需要标准化到 [0,1]
区间。
从公式
可以看出:
Relief
是为二分类问题设计的,其扩展变体 Relief-F
能处理多分类问题。
假定数据集 中的样本类别为: 。对于样本 ,假设 。
Relief-F
先在类别 的样本中寻找 的最近邻 作为猜中近邻。
然后在 之外的每个类别中分别找到一个 的最近邻 作为猜错近邻。
于是相关统计量对应于属性 的分量为:
其中 为第 类的样本在数据集 中所占的比例。
与过滤式特征选择不考虑后续学习器不同,包裹式特征选择直接把最终将要使用的学习器的性能作为特征子集的评价准则。其目的就是为给定学习器选择最有利于其性能、量身定做的特征子集。
LVW:Las Vegas Wrapper
是一个典型的包裹式特征选择方法。它是Las Vegas method
框架下使用随机策略来进行子集搜索,并以最终分类器的误差作为特征子集的评价标准。
LVW
算法:
输入:
estimator
输出: 最优特征子集
算法步骤:
初始化:令候选的最优特征子集 ,然后学习器 estimator
在特征子集 上使用交叉验证法进行学习,通过学习结果评估学习器 estimator
的误差 。
迭代,停止条件为迭代次数到达 。迭代过程为:
estimator
在特征子集 上使用交叉验证法进行学习,通过学习结果评估学习器 estimator
的误差 。最终 。
由于LVW
算法中每次特征子集评价都需要训练学习器,计算开销很大,因此算法设置了停止条件控制参数 。
但是如果初始特征数量很多、 设置较大、以及每一轮训练的时间较长, 则很可能算法运行很长时间都不会停止。即:如果有运行时间限制,则有可能给不出解。
在过滤式和包裹式特征选择方法中,特征选择过程与学习器训练过程有明显的分别。
嵌入式特征选择是将特征选择与学习器训练过程融为一体,两者在同一个优化过程中完成的。即学习器训练过程中自动进行了特征选择。
以线性回归模型为例。
给定数据集 。 以平方误差为损失函数,则优化目标为:
如果使用 范数正则化,则优化目标为:
此时称作岭回归ridge regression
`。
如果使用 范数正则化,则优化目标为:
此时称作LASSO:Least Absolute Shrinkage and Selection Operator
回归。
引入 范数除了降低过拟合风险之外,还有一个好处:它求得的 会有较多的分量为零。即:它更容易获得稀疏解。
于是基于 正则化的学习方法就是一种嵌入式特征选择方法,其特征选择过程与学习器训练过程融为一体,二者同时完成。
正则化问题的求解可以用近端梯度下降Proximal Gradient Descent:PGD
算法求解。
对于优化目标: ,若 可导且 满足L-Lipschitz
条件,即存在常数 使得:
则在 附近将 通过二阶泰勒公式展开的近似值为:
其中 是与 无关的常数项。
若通过梯度下降法对 进行最小化,则每一步梯度下降迭代实际上等价于最小化二次函数 。
同理,若通过梯度下降法对 进行最小化,则每一步梯度下降迭代实际上等价于最小化函数:。
则每一步迭代为:
其中 为 的第 次迭代的值。
该问题有解析解,因此通过PGD
能够使得LASSO
和其他基于 范数最小化的方法能够快速求解。
常见的嵌入式选择模型:
在Lasso
中, 参数控制了稀疏性:
在SVM
和logistic-regression
中,参数C
控制了稀疏性
C
越小,则稀疏性越大,则被选择的特征越少。C
越大,则稀疏性越小,则被选择的特征越多。对于 。构
建矩阵 ,其内容为:
其中每一行对应一个样本,每一列对应一个特征。
特征选择所考虑的问题是:矩阵 中的许多列与当前学习任务无关。
通过特征选择去除这些列,则学习器训练过程仅需要在较小的矩阵上进行。这样学习任务的难度可能有所降低,涉及的计算和存储开销会减少,学得模型的可解释性也会提高。
考虑另一种情况: 中有大量元素为 0 ,这称作稀疏矩阵。
当数据集具有这样的稀疏表达形式时,对学习任务来讲会有不少好处:
现在问题是:如果给定数据集 是稠密的(即普通的、非稀疏的),则能否将它转化为稀疏的形式?
这就是字典学习 dictionary learning
和稀疏编码sparse coding
的目标。
字典学习:学习一个字典,通过该字典将样本转化为合适的稀疏表示形式。它侧重于学得字典的过程。
稀疏编码:获取样本的稀疏表达,不一定需要通过字典。它侧重于对样本进行稀疏表达的过程。
这两者通常是在同一个优化求解过程中完成的,因此这里不做区分,统称为字典学习。
给定数据集 ,希望对样本 学习到它的一个稀疏表示 。其中 是一个 维列向量,且其中大量元素为 0 。
一个自然的想法进行线性变换,即寻找一个矩阵 使得 。
现在的问题是:既不知道变换矩阵 ,也不知道 的稀疏表示 。
因此求解的目标是:
因此给出字典学习的最优化目标:
其中 称作字典矩阵。 称作字典的词汇量,通常由用户指定来控制字典的规模,从而影响到稀疏程度。
求解该问题采用类似LASSO
的解法,但是使用变量交替优化的策略:
第一步:固定字典 , 为每一个样本 找到相应的 :
第二步:根据下式,以 为初值来更新字典 ,即求解: 。
其中 , 。写成矩阵的形式为:
这里 为矩阵的 Frobenius
范数(所有元素的平方和的平方根)。对于矩阵 , 有
反复迭代上述两步,最终即可求得字典 和样本 的稀疏表示 。
这里有个最优化问题:
该问题有多种求解方法,常用的有基于逐列更新策略的KSVD
算法。
令 为字典矩阵 的第 列, 表示稀疏矩阵 的第 行。 固定 其他列,仅考虑第 列,则有:
令 ,它表示去掉 的稀疏表示之后,样本集的稀疏表示与原样本集的误差矩阵。
考虑到更新字典的第 列 时,其他各列都是固定的,则 是固定的。则最优化问题转换为:
求解该最优化问题只需要对 进行奇异值分解以取得最大奇异值所对应的正交向量。
直接对 进行奇异值分解会同时修改 和 , 从而可能破坏 的稀疏性。因为第二步 “以 为初值来更新字典 ” 中, 在更新 前后 的非零元所处的位置和非零元素的值很可能不一致。
为避免发生这样的情况 KSVD
对 和 进行了专门处理:
某些算法原生的支持多分类,如:决策树、最近邻算法等。但是有些算法只能求解二分类问题,如:支持向量机。
对于只能求解二分类问题的算法,一旦遇到问题是多类别的,那么可以将多分类问题拆解成二分类任务求解。
即:
多分类问题有三种拆解方式:
One-vs-rest:OvR
) 。one-vs-one:OvO
) 。many-vs-many:MvM
) 。一对其余:为每一个类别训练一个分类器。
假设类别为 ,则训练 个分类器 :
预测时,对于未知的实例,用训练出来的 个分类器来预测。
假设置信度最高的分类器为 ,则该实例的类别预测为 。
缺点:非常容易陷入样本不平衡。
即使训练集中每一类样本都是平衡的,训练每个分类器时样本反而不平衡。
一对一:为每一对类别训练一个分类器。
假设类别为 。那么训练 个分类器 。
分类器从原始训练集中提取类别为 的样本点作为新的训练集,然后训练 。
预测时,对于未知的实例,对预测结果进行投票。
首先设投票结果为
然后用每个分类器 对未知实例进行预测:
最终假设 最大,则该未知的实例分类为 。
缺点:需要训练的分类器数量为 ,计算量太大。
多对多:每次都将若干个类作为正类,若干个其他类作为反类。
Error Correcting Output Codes:ECOC
技术。该技术将编码的思想引入类别拆分,并尽可能在解码过程中具有容错性。ECOC
工作过程主要分两步,假设类别为 :
编码:对 个类别进行 次划分,每次划分都将一部分类别划分为正类,一部分类别划分为反类,从而形成一个二分类训练集。
这样一个产生 个训练集,可以训练出 个分类器。
解码:用 个分类器分别对测试样本进行预测,这些预测标记组成一个编码。
将这个预测编码与每个类别各自的编码进行比较,返回其中距离最小的类别作为最终预测结果。
通常在机器学习中都有一个基本假设:不同类别的训练样本数目相当。
如果不同类别的训练样本数目稍有差别,通常影响不大。
如果不同类别的训练样本数目差别很大(极端情况下,如正类样本只有十个,反类样本一百万个),则会对学习过程造成影响。这就是类别不平衡问题(class-imbalance
)。
这里讨论中,假设正类样本偏少、反类样本偏多。
对于类别不平衡问题,常用的有三种方法:
threshold-moving
。undersampling
。oversampling
。对于正负样本极不平衡的场景,可以完全换一个不同的角度来看问题:将它看作一分类One Class Learning
或者异常检测Novelty Detection
问题。
此时可以用One-class SVM
模型。
假设对样本 进行分类时,预测为正类的概率为 。常规的做法是将 与一个阈值,比如 0.5 , 进行比较。 如果 时,就判别该样本为正类。
概率 刻画了样本为正类的可能性, 几率 刻画了正类可能性与反类可能性的比值。
当存在类别不平衡时,假设 表示正类样本数目, 表示反类样本数目,则观测几率是 。
假设训练集是真实样本总体的无偏采样,因此可以用观测几率代替真实几率。于是只要分类器的预测几率高于观测几率就应该判断为正类。即如果 , 则预测为正类。
通常分类器都是基于概率值来进行预测的,因此需要对其预测值进行调整。在进行预测的时候,令:
然后再将 跟阈值比较。这就是类别不平衡学习的一个基本策略:再缩放rescalling
。
再缩放虽然简单,但是由于“训练集是真实样本总体的无偏采样”这个假设往往不成立,所以无法基于训练集观测几率来推断出真实几率。
欠采样会去除一些反类使得正、反类数目接近。
欠采样若随机抛弃反类,则可能丢失一些重要信息。
常用方法是将反类划分成若干个集合供不同学习器使用,这样对每个学习器来看都是欠采样,但是全局来看并不会丢失重要信息。
过采样会增加一些正类使得正、反类数目接近。
过采样不能简单的对原始正类进行重复采样,否则会导致严重的过拟合。
通常在原始正类之间插值来生成额外的正类。
常见的有以下过采样策略:
SMOTE
方法:对于每个正类样本 ,从它的 近邻中随机选取一个样本点 ,然后根据下式生成一个新的正类样本: ,其中 是随机数。
该方法有两个问题:
增加了正类样本之间重叠的可能性。
生成了一些没有提供有益信息的样本。
Borderline-SMOTE
方法:它类似SMOTE
,但是对于每个正类样本 ,首先要评估:是否应该为该正类样本生成新的样本点。
评估准则是:如果 的 近邻中,有超过一半以上的反类样本,则为该正类样本生成新样本。
反类样本超过一半,则说明该正类样本位于正类与反类的边界。如果 的 近邻中正类样本比较多,则该正类样本很可能就是处于一群正类样本的内部。
该方法生成新样本的算法与SMOTE
方法相同。