机器学习常见问题解答

正则化

正则化是针对过拟合而提出的,以为在求解模型最优的是一般优化最小的经验风险,现在在该经验风险上加入模型复杂度这一项(正则化项是模型参数向量的范数),并使用一个rate比率来权衡模型复杂度与以往经验风险的权重,如果模型复杂度越高,结构化的经验风险会越大,现在的目标就变为了结构经验风险的最优化,可以防止模型训练过度复杂,有效的降低过拟合的风险。

奥卡姆剃刀原理,能够很好的解释已知数据并且十分简单才是最好的模型。

过拟合

如果一味的去提高训练数据的预测能力,所选模型的复杂度往往会很高,这种现象称为过拟合。所表现的就是模型训练时候的误差很小,但在测试的时候误差很大。

产生的原因

  1. 因为(特征)参数太多,会导致我们的模型复杂度上升,容易过拟合
  2. 权值学习迭代次数足够多(Overtraining),拟合了训练数据中的噪声和训练样例中没有代表性的特征.

解决方法

  1. 交叉验证法
  2. 减少特征
  3. 正则化
  4. 权值衰减
  5. 验证数据

泛化能力

泛化能力是指模型对未知数据的预测能力

什么是交叉验证法?

它的基本思想就是将原始数据(dataset)进行分组,一部分做为训练集来训练模型,另一部分做为测试集来评价模型。


为什么用交叉验证法?

  1. 交叉验证用于评估模型的预测性能,尤其是训练好的模型在新数据上的表现,可以在一定程度上减小过拟合。
  2. 还可以从有限的数据中获取尽可能多的有效信息。

主要有:留出法 (holdout cross validation)(训练集、验证集和测试集),  k 折交叉验证(k-fold cross validation)(每一次挑选其中 1 份作为测试集,剩余 k-1 份作为训练集用于模型训练。

还有一种比较特殊的交叉验证方式,Bootstrapping: 通过自助采样法,即在含有 m 个样本的数据集中,每次随机挑选一个样本,再放回到数据集中,再随机挑选一个样本,这样有放回地进行抽样 m 次,组成了新的数据集作为训练集。

生成模型和判别模型

  1. 生成模型:由数据学习联合概率分布P(X,Y),然后求出条件概率分布P(Y|X)作为预测的模型,即生成模型:P(Y|X)= P(X,Y)/ P(X)。(朴素贝叶斯)
    生成模型可以还原联合概率分布p(X,Y),并且有较快的学习收敛速度,还可以用于隐变量的学习
  2. 判别模型:由数据直接学习决策函数Y=f(X)或者条件概率分布P(Y|X)作为预测的模型,即判别模型。(k近邻、决策树)
    直接面对预测,往往准确率较高,直接对数据在各种程度上的抽象,所以可以简化模型

线性分类器与非线性分类器的区别以及优劣

如果模型是参数的线性函数,并且存在线性分类面,那么就是线性分类器,否则不是。
常见的线性分类器有:LR,贝叶斯分类,单层感知机、线性回归
常见的非线性分类器:决策树、RF、GBDT、多层感知机

SVM两种都有(看线性核还是高斯核)

  • 线性分类器速度快、编程方便,但是可能拟合效果不会很好
  • 非线性分类器编程复杂,但是效果拟合能力强

特征比数据量还大时,选择什么样的分类器?

线性分类器,因为维度高的时候,数据一般在维度空间里面会比较稀疏,很有可能线性可分

对于维度很高的特征,你是选择线性还是非线性分类器?

理由同上

对于维度极低的特征,你是选择线性还是非线性分类器?

非线性分类器,因为低维空间可能很多特征都跑到一起了,导致线性不可分


L1和L2正则的区别,如何选择L1和L2正则

他们都是可以防止过拟合,降低模型复杂度

  • L1是在loss function后面加上 模型参数的1范数(也就是|xi|)
  • L2是在loss function后面加上 模型参数的2范数(也就是sigma(xi^2)),注意L2范数的定义是sqrt(sigma(xi^2)),在正则项上没有添加sqrt根号是为了更加容易优化

  • L1 会产生稀疏的特征

  • L2 会产生更多地特征但是都会接近于0

L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0。L1在特征选择时候非常有用,而L2就只是一种规则化而已。

特征向量的归一化方法

  1. 线性函数转换,表达式如下:y=(x-MinValue)/(MaxValue-MinValue)
  2. 对数函数转换,表达式如下:y=log10 (x)
  3. 反余切函数转换 ,表达式如下:y=arctan(x)*2/PI
  4. 减去均值,乘以方差:y=(x-means)/ variance
k-means

k-means与kNN虽然都是以k打头,但却是两类算法——kNN为监督学习中的分类算法,而k-means则是非监督学习中的聚类算法;二者相同之处:均利用近邻信息来标注类别。

聚类是数据挖掘中一种非常重要的学习流派,指将未标注的样本数据中相似的分为同一类,正所谓“物以类聚,人以群分”嘛。k-means是聚类算法中最为简单、高效的,核心思想:由用户指定k个初始质心(initial centroids),以作为聚类的类别(cluster),重复迭代直至算法收敛。


在k-means算法中,用质心来表示cluster;且容易证明k-means算法收敛等同于所有质心不再发生变化。基本的k-means算法流程如下:

选取k个初始质心(作为初始cluster);
repeat:
    对每个样本点,计算得到距其最近的质心,将其类别标为该质心所对应的cluster;
    重新计算k个cluser对应的质心;
until 质心不再发生变化

对于欧式空间的样本数据,以平方误差和(sum of the squared error, SSE)作为聚类的目标函数,同时也可以衡量不同聚类结果好坏的指标:(最小化)

SSE=i=1kxCidist(x,ci)


k-means存在缺点:

  • k-means是局部最优的,容易受到初始质心的影响;因选择初始质心不恰当而造成次优的聚类结果(SSE较大)

    同时,k值的选取也会直接影响聚类结果,最优聚类的k值应与样本数据本身的结构信息相吻合,而这种结构信息是很难去掌握,因此选取最优k值是非常困难的。

优化:

为了解决上述存在缺点,在基本k-means的基础上发展而来二分 (bisecting) k-means,其主要思想:一个大cluster进行分裂后可以得到两个小的cluster;为了得到k个cluster,可进行k-1次分裂。算法流程如下:

初始只有一个cluster包含所有样本点;
repeat:
    从待分裂的clusters中选择一个进行二元分裂,所选的cluster应使得SSE最小;
until 有k个cluster
二分k-means算法对初始质心的选择不太敏感,因为初始时只选择一个质心。



 kNN算法

kNN算法是监督学习中分类方法的一种。所谓监督学习与非监督学习,是指训练数据是否有标注类别,若有则为监督学习,若否则为非监督学习。监督学习是根据输入数据(训练数据)学习一个模型,能对后来的输入做预测。在监督学习中,输入变量与输出变量可以是连续的,也可以是离散的。若输入变量与输出变量均为连续变量,则称为回归;输出变量为有限个离散变量,则称为分类;输入变量与输出变量均为变量序列,则称为标注

kNN算法的核心思想非常简单:在训练集中选取离输入的数据点最近的k个邻居,根据这个k个邻居中出现次数最多的类别(最大表决规则),作为该数据点的类别。最大表决规则等价于经验风险最小化

存在问题:

k值得选取对kNN学习模型有着很大的影响。若k值过小,预测结果会对噪音样本点显得异常敏感。特别地,当k等于1时,kNN退化成最近邻算法,没有了显式的学习过程。若k值过大,会有较大的邻域训练样本进行预测,可以减小噪音样本点的减少;但是距离较远的训练样本点对预测结果会有贡献,以至于造成预测结果错误


SVM(Support Vector Machines)

由简至繁SVM可分类为三类:线性可分(linear SVM in linearly separable case)的线性SVM、线性不可分的线性SVM、非线性(nonlinear)SVM。

线性可分(linear SVM 

线性可分是理想情形,大多数情况下,由于噪声或特异点等各种原因,训练样本是线性不可分的

将距离分离超平面最近的两个不同类别的样本点称为支持向量(support vector)的,构成了两条平行于分离超平面的长带,二者之间的距离称之为margin。显然,margin更大,则分类正确的确信度更高(与超平面的距离表示分类的确信度,距离越远则分类正确的确信度越高)。通过计算容易得到:

margin=2w

非线性(nonlinear)SVM

解决非线性分类问题的思路,通过空间变换ϕϕ(一般是低维空间映射到高维空间xϕ(x)x→ϕ(x))后实现线性可分

AdaBoost

AdaBoost能够自适应(addaptive)地调整样本的权值分布,将分错的样本的权重设高、分对的样本的权重设低;所以被称为“Adaptive Boosting”。sklearn的AdaBoostClassifier实现了AdaBoost,默认的基分类器是能fit()带权值样本的DecisionTreeClassifier。

集成学习(ensemble learning)通过组合多个基分类器(base classifier)来完成学习任务,颇有点“三个臭皮匠顶个诸葛亮”的意味。基分类器一般采用的是弱可学习(weakly learnable)分类器,通过集成学习,组合成一个强可学习(strongly learnable)分类器。所谓弱可学习,是指学习的正确率仅略优于随机猜测的多项式学习算法;强可学习指正确率较高的多项式学习算法。集成学习的泛化能力一般比单一的基分类器要好,这是因为大部分基分类器都分类错误的概率远低于单一基分类器的。

偏差-方差分解”(bias variance decomposition)是用来解释机器学习算法的泛化能力的一种重要工具。对于同一个算法,在不同训练集上学得结果可能不同

误差可以分解为3个部分:bias、variance、noise

bias度量了算法本身的拟合能力,刻画模型的准确性;variance度量了数据扰动所造成的影响,刻画模型的稳定性。为了取得较好的泛化能力,则需要充分拟合数据(bias小),并受数据扰动的影响小(variance小)。但是,bias与variance往往是不可兼得的:

  • 当训练不足时,拟合能力不够强,数据扰动不足以产生较大的影响,此时bias主导了泛化错误率;
  • 随着训练加深时,拟合能力随之加强,数据扰动渐渐被学习到,variance主导了泛化错误率。

Bagging与Boosting

集成学习需要解决两个问题:

  • 如何调整输入训练数据的概率分布及权值;
  • 如何训练与组合基分类器。

从上述问题的角度出发,集成学习分为两类流派:Bagging与Boosting。

Bagging(Bootstrap Aggregating)对训练数据擦用自助采样(boostrap sampling),即有放回地采样数据;每一次的采样数据集训练出一个基分类器,经过

MM次采样得到 MM个基分类器,然后根据最大表决(majority vote)原则组合基分类器的分类结果。

Boosting的思路则是采用重赋权(re-weighting)法迭代地训练基分类器,即对每一轮的训练数据样本赋予一个权重,并且每一轮样本的权值分布依赖上一轮的分类结果;基分类器之间采用序列式的线性加权方式进行组合。


从“偏差-方差分解”的角度看,Bagging关注于降低variance,而Boosting则是降低bias;Boosting的基分类器是强相关的,并不能显著降低variance。Bagging与Boosting有分属于自己流派的两大杀器:Random Forests(RF)和Gradient Boosting Decision Tree(GBDT)。本文所要讲的AdaBoost属于Boosting流派。

朴素贝叶斯

朴素贝叶斯(Naïve Bayes)属于监督学习的生成模型,实现简单,没有迭代,学习效率高,在大样本量下会有较好的表现。但因为假设太强——假设特征条件独立,在输入向量的特征条件有关联的场景下并不适用。


朴素贝叶斯分类器的主要思路:通过联合概率P(x,y)=P(x|y)P(y)P(x,y)=P(x|y)P(y)建模,运用贝叶斯定理求解后验概率P(y|x)P(y|x);将后验概率最大者对应的的类别作为预测类别。

朴素贝叶斯将分类问题转化成了求条件概率与先验概率的最大乘积问题


在朴素贝叶斯学习中,需要估计先验概率与条件概率,一般时采用极大似然估计。先验概率的极大似然估计:

p^(y=ck)=iI(yi=ck)Np^(y=ck)=∑iI(yi=ck)N

其中,II是指示函数,满足括号内条件时为1否则为0;可以看作为计数。

设第jj维特征的取值空间为{aj1,aj2,,ajSj}{aj1,aj2,⋯,ajSj},且输入变量的第jjx(j)=ajlx(j)=ajl,则条件概率的极大似然估计:

p^(x(j)=ajl|y=ck)=iI(x(j)i=ajl,y=ck)I(yi=ck)

朴素贝叶斯分类

设用户输入的单词为ww,要返回的拼写正确单词为cc,拼写检查要找出最大可能的cc,即

argmaxcp(c|w)arg⁡maxc⁡p(c|w)

p(c|w)p(c|w)可以理解为在已发生ww的情况下发生cc的概率。根据贝叶斯定理:

p(c|w)=p(w|c)p(c)p(w)p(c|w)=p(w|c)p(c)p(w)

贝叶斯分类器可表示为:

argmaxcp(w|c)p(c)







猜你喜欢

转载自blog.csdn.net/gavinmiaoc/article/details/79691973