关于机器学习分类器的选择问题

在刚接触机器学习的时候,我始终有一个问题:在一个分类任务中,有那么多机器学习算法可以训练分类器,那么是否有一个分类器是最好的,或者说是否有一个分类器在理论上是可以超越其它分类器?
相信不少小伙伴也和我有一样的疑问,但可能由于没有研究数学原理,这个疑问就埋在那里了。我是数学系学生,平时喜欢读一些偏理论的书,也积累了一些实战经验,在经过一些思考总结后,决定把一些观点写下来。

首先是上面的这个问题,其答案是否定的。严格来说,一些集成分类器(如随机森林等),可以说效果往往比组成它的学习器好,但不能说哪一个基学习器能够达到的效果最好。
下面从原理上解释这一点:

**

原理的比较

**

逻辑回归
逻辑回归的原理是概率映射,它通过
在这里插入图片描述
(Sigmoid函数)来把输入样本特征X映射成属于某类的概率值,它的来源是指数族分布和广义线性模型。其中的参数θ就是需要学习优化的目标,而其损失函数(交叉熵损失)的来源是极大似然估计中的对数似然函数取负。在训练好参数θ后,就可以直接通过这个函数计算属于某类的概率,(属于另一类的概率用1减),选择概率值大的类别,从而实现分类。而多元逻辑回归(softmax分类器)则是通过softmax函数把输入样本特征映射成概率向量,原理同二元逻辑回归。

支持向量机
支持向量机的原理是寻找一个决策超平面,将两类样本分开,并使得支持向量(到超平面距离最短的样本点)到超平面距离最短,倘若样本在当前维度不可分,则可以通过核函数将样本映射到高维空间,因为维度越高,样本越倾向于可分。而为避免个别特殊样本造成的超平面选择不佳,则可允许超平面犯一定的错误,来使得模型泛化能力更强。

决策树,随机森林,梯度提升树
决策树的原理是gini系数或者熵值,其目的是通过特征的划分,使得样本混乱程度最快地减小。而随机森林是决策树的Bagging集成,它是很多棵不同的决策树进行加权投票的集成模型,其中每一棵决策树的训练样本和样本特征选取都不同,这就增加了基学习器的差异程度。梯度提升树则是决策树的Boosting集成,每棵树有自己的位置,预测前一棵决策树的残差,从而使模型效果越来越好。

通过比较原理我们不难看出,不同的分类器原理不同,之间甚至找不到联系。因此在分类效果得出之前,无法直接判断分类器效果的好坏,只能看出一般情况下,随机森林与梯度提升树效果比决策树要好。既然无法预先得到模型的分类效果,那么,应该如何去选择模型呢?

**

模型的选择及参数的调整

**

复杂度角度
我们可以从构建模型的复杂度来看。无论是从理论上的复杂度,或者是实际应用中的迭代时间上来说,都是逻辑回归最快。由于是简单的概率映射,训练的原理也是运算比较快的极大似然,这看似“简单”的地方也恰好是逻辑回归最大的优势,它的迭代速度比另外的分类器都要快。(单棵决策树由于效果明显低于它的集成模型,因此不参与讨论)
然而这个“简单”却并不意味着“效果一般”。就拿我在进行文本分类的时候所用到的样本来说,逻辑回归的效果要好于其他三种模型,而在进行客户是否订阅的分类任务中,逻辑回归也是最能挑选出订阅用户的模型,并且拥有最高的F1值。
其次迭代速度一般的是随机森林和梯度提升树。按照Python sklearn库中给定的默认参数来说,他们的运行速度相差不大,要明显慢于逻辑回归,又明显快于支持向量机。而倘若样本较多,特征维度较大,那么支持向量机的迭代速度可以说是非常感人的。我在处理一个五万样本,五十维度数据的时候,支持向量机的迭代时间能比两层的BP神经网络迭代100个epoch还要慢上几倍。这是因为支持向量机超平面的选取只与支持向量有关,而在迭代过程中,所有的样本都在参与训练,并且运算量非常大。
综合各种模型的复杂度,在数据特征形式未知的情况下,我们可以首先选择逻辑回归来进行分类。

样本特征角度
从样本的特征角度来看。如果样本特征之间明显具有较强的独立性,即样本特征具有明确的解释意义,并且相互近似可认为是相互独立,那么选用逻辑回归和支持向量机来做分类效果会比较不错。值得一提的是,支持向量机由于是空间中的分类,因此特征量纲影响很大,需要做归一化处理。而如果样本特征之间存在着错综复杂的关系,那么则可选用树模型的集成或者神经网络来分类,神经网络会自动进行特征提取。

模型拟合能力与泛化能力的权衡角度(参数调整及特征选取)
之后我们还需要综合考虑模型的泛化能力和拟合能力。一般来说,模型的拟合能力却强,其泛化能力往往越差,多层神经网络尤为明显。
样本的维数越多,模型的拟合能力就越强,但不可避免会因为过拟合而导致泛化能力不足。这样我们就需要进行特征筛选,去掉一些不必要的特征来增强泛化能力;或者通过参数调整来实现这一点,如支持向量机的允许错误率,树模型的树深和叶子节点样本数,以及逻辑回归的正则化和神经网络的“drop out”。
在这里谈一下逻辑回归的正则化。我们知道对多元线性回归来说,常用的有l1和l2两种正则化,其中l2正则化是可以按照一定的假设,通过贝叶斯的角度推导出来(岭回归),而同样的,逻辑回归也有这两种常用的正则化方式,其目的是一定程度上减小模型的过拟合程度,增强泛化能力。而我在使用l1正则化的时候,出现过微调正则化系数(0.0001左右)后,模型效果一下变得极差。在经过思考后,我明白这是产生稀疏解导致的。因为l1正则化后,0点左右两侧的导数值是有不同变化的,即0点左右两侧导数值有一定差异。那么,如果调整的系数刚好使得0点左侧和右侧导数值符号不同,则0点就成了极值点,那么容易优化到0点,导致模型效果变差。

这就是我翻理论和进行实战得到的一些观点,由于我还是大四在读学生,难免可能有些地方考虑不周,倘若有片面或有错误的地方,欢迎大家批评指正!

你可能感兴趣的:(关于机器学习分类器的选择问题)