机器学习中常用算法总结

来源:互联网 发布:法里内利 知乎 编辑:程序博客网 时间:2024/05/19 20:38

参考:http://www.shuju.net/article/MDAwMDAyM4DM0.html

在垃圾邮件分类器项目中,随机森林被用作最终的分类器模型。面试官可能会就此提出以下问题:为什么选择随机森林而非其他模型,比如朴素贝叶斯或者支持向量机。一般来说,面试者可以从数学理论和工程实现两个方面进行比较回答。从理论上讲,数据表现出来的特征,以及模型所基于的假设都是很好的突破口;从工程实现上讲,实现的难易程度,是否易于scale都是可以考虑的点。

逻辑回归

优点:计算代价不高,易于理解和实现。 
缺点:容易欠拟合,分类精度可能不高。
关键词:Sigmoid函数、Softmax解决多分类
适用数据类型:数值型和标称型数据。
其它:逻辑回归函数虽然是一个非线性的函数,但其实其去除Sigmoid映射函数之后,其他步骤都和线性回归一致。


支持向量机

优点:适合小数量样本数据,可以解决高维问题,理论基础比较完善,对于学数学的来说它的理论很美;可以提高泛化能力;
缺点:数据量大时,内存资源消耗大(存储训练样本和核矩阵),时间复杂度高,这时候LR等算法就比SVM要好;对非线性问题没有通用解决方案,有时候很难找到一个合适的核函数
对于核函数的运用对SVM来说确实是一个亮点,但是核函数不是SVM专属的,其他算法一旦涉及到内积运算,就可以使用核函数。它的优化方向的话就是各种不同的场景了,比如扩展到多分类,类别标签不平衡等都可以对SVM做些改变来适应场景
关键词:最优超平面 最大间隔 拉格朗日乘子法 对偶问题 SMO求解 核函数 hinge损失 松弛变量 惩罚因子 多分类
适用数据类型:数值型和标称型数据。
参数:选择核函数,如径向基函数(低维到高维)、线性核函数,以及核函数的参数; 惩罚因子
其它:SVM也并不是在任何场景都比其他算法好,SVM在邮件分类上不如逻辑回归、KNN、bayes的效果好,是基于距离的模型,需要归一化


决策树

优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特征数据。
缺点:过拟合,可限制树深度及叶子节点个数
关键词:ID3(信息增益) C4.5(信息增益比) CART(基尼系数)

数据要求:标称型数据,因此数值型数据必须离散化


随机森林

优点:

1. 对很多数据集表现很好,精确度比较高

2. 不容易过拟合

3. 可以得到变量的重要性排序

4. 既能处理离散型数据,也能处理连续型数据,且不需要进行归一化处理

5. 能够很好的处理缺失数据

6 容易并行化


Adaboost

Adaboost是一种加和模型,每个模型都是基于上一次模型的错误率来建立的,过分关注分错的样本,而对正确分类的样本减少关注度,逐次迭代之后,可以得到一个相对较好的模型。是一种典型的boosting算法。下面是总结下它的优缺点。
优点
adaboost是一种有很高精度的分类器。
可以使用各种方法构建子分类器,Adaboost算法提供的是框架。
当使用简单分类器时,计算出的结果是可以理解的,并且弱分类器的构造极其简单。
简单,不用做特征筛选。
不容易发生overfitting。
缺点:对outlier比较敏感


GBDT

优点:

1. 精度高

2. 适用于线性和非线性数据

3. 能处理多特征类型,共线性特征

4. 可以灵活处理各种类型的数据,包括连续值和离散值。

5. 在相对少的调参时间情况下,预测的准备率也可以比较高。这个是相对SVM来说的。

5. 能处理缺失值。使用一些健壮的损失函数,对异常值的鲁棒性非常强。比如 Huber损失函数和Quantile损失函数。

缺点:

1. 难并行

2. 多类别分类,时空复杂度高

正则化防止过拟合:

1. 第一种是和Adaboost类似的正则化项,即步长(learning rate)

2. 第二种正则化的方式是通过子采样比例(subsample)。取值为(0,1]。注意这里的子采样和随机森林不一样,随机森林使用的是放回抽样,而这里是不放回抽样。如果取值为1,则全部样本都使用,等于没有使用子采样。如果取值小于1,则只有一部分样本会去做GBDT的决策树拟合。选择小于1的比例可以减少方差,即防止过拟合,但是会增加样本拟合的偏差,因此取值不能太低。推荐在[0.5, 0.8]之间。

3. 第三种是对于弱学习器即CART回归树进行正则化剪枝。


常用损失函数:

1. 分类算法,其损失函数一般有和两种:

a) 对数损失函数,与Adaboost类似

b) 指数损失函数,分为二元分类和多元分类两种

2. 回归算法,常用损失函数有如下4种:
a) 均方差
b) 绝对损失
c) Huber损失,它是均方差和绝对损失的折衷产物,对于远离中心的异常点,采用绝对损失,而中心附近的点采用均方差。这个界限一般用分位数点度量。


工程问题及条惨:

1. 不需要对特征进行归一化

2. 适合低维稠密数据,不太适合高维稀疏数据跟多分类数据

3. 可计算不同特征的重要性

4. GBRT的并行实现:训练过程中前后有依赖关系,难并行,但是训练回归树可并行。

参数:

重要参数:迭代次数(树的个数),学习速率(正则参数),树的深度(叶子结点数)

次重要参数:训练数据采样比例,训练特征采样比例

通常取值:

TreeNum = 100~1000

TreeDepth=3~8

Max_leaf_nodes=20左右

learning_rate=0.01~1

SubSample=0.5~1

Max_feature=sqrt(feature_num)


xgboost

这是一个近年来出现在各大比赛的大杀器,夺冠选手很大部分都使用了它。
高准确率高效率高并发,支持自定义损失函数,既可以用来分类又可以用来回归
可以像随机森林一样输出特征重要性,因为速度快,适合作为高维特征选择的一大利器
在目标函数中加入正则项,控制了模型的复杂程度,可以避免过拟合
支持列抽样,也就是随机选择特征,增强了模型的稳定性
对缺失值不敏感,可以学习到包含缺失值的特征的分裂方向
另外一个广受欢迎的原因是支持并行,速度杠杠的
用的好,你会发现他的全部都是优点


朴素贝叶斯

优点:对小规模的数据表现很好,能个处理多分类任务,适合增量式训练,尤其是数据量超出内存时,我们可以一批批的去增量训练; 对缺失数据不太敏感,算法也比较简单,常用于文本分类。
缺点:朴素贝叶斯模型假设属性之间相互独立,实际应用中属性之间相关性较大时,分类效果不好;需要知道先验概率,且先验概率很多时候取决于假设
数据类型:标称型数据。

朴素:特征之间相互独立;每个特征同等重要。高偏差低方差模型

注意事项:Laplace校准


K-近邻算法(KNN)

优点:精度高、对异常值不敏感、无数据输入假定。
缺点:计算复杂度高,空间复杂度,数据不平衡问题。KD-Tree
数据类型:数值型和标称型。

其它:K值如何选择;数据不平衡时分类倾向更多样本的类,解决方法是距离加权重

k值的选择:当k值较小时,预测结果对近邻的实例点非常敏感,容易发生过拟合;如果k值过大模型会倾向大类,容易欠拟合;通常k是不大于20的整数(参考《机器学习实战》)


K-Means(K 均值算法)

优点:容易实现。
缺点:K值不容易确定,对初始值敏感,可能收敛到局部最小值。KD-Tree
数据类型:数值型数据。
K值的确定:簇类指标(半径、直径)出现拐点
克服K-均值算法收敛于局部最小值,需确定初始聚类中心:
K-Means++算法:初始的聚类中心之间的相互距离要尽可能的远。

二分K-均值算法:首先将所有点作为一个簇,然后将簇一分为二。之后选择其中一个簇继续划分,选择哪个一簇进行划分取决于对其划分是否可以最大程度降低SSE(Sum of Squared Error,两个簇的总误差平方和)的值。



Apriori算法

优点:容易实现。
缺点:在大型数据集上速度较慢。空间复杂度高,主要是C2候选项;时间复杂度高,需多次扫描数据库
数据类型:数值型或标称型数据
原理:如果某个项集时频繁的,那么他的所有子集也是频繁的。
简述:Apriori算法是发现频繁项集的一种方法。Apriori算法的两个输入参数分别是最小支持度和数据集。该算法首先会生成所有单个item的项集列表。然后扫描列表计算每个item的项集支持度,将低于最小支持度的item排除掉,然后将每个item两两组合,然后重新计算整合后的item列表的支持度并且和最小支持度比较。重复这一过程,直至所有项集都被去掉。


FPGrowth算法

优点:时间复杂度和空间复杂度都要优于Apriori。
缺点:实现比较困难,在某些数据集上性能会下降
原理:标称型数据
关键词:过滤不频繁集合,项头表支持度排序 FP树 条件模式基 条件树
简述:FP-growth也是用于发现频繁项集的算法,基本数据结构包含一个一棵FP树和一个项头表。构建FP树时只对数据集扫描两次,第二次从FP树中挖掘频繁项集。

继续改进方法:包括数据库划分,数据采样


人工神经网络

优点:
分类的准确度高;
并行分布处理能力强,分布存储及学习能力强,
对噪声神经有较强的鲁棒性和容错能力,能充分逼近复杂的非线性关系;
具备联想记忆的功能。
缺点:
神经网络需要大量的参数,如网络拓扑结构、权值和阈值的初始值;
不能观察之间的学习过程,输出结果难以解释,会影响到结果的可信度和可接受程度;

学习时间过长,甚至可能达不到学习的目的。



0 0
原创粉丝点击