机器学习各种算法的特点归纳

来源:互联网 发布:手机淘宝排名提升 编辑:程序博客网 时间:2024/06/05 01:52

1.感知机

  • 适用问题:二分类
  • 模型特点:超平面
  • 模型类型:判别模型
  • 学习策略:极小化误分类点到超平面的距离
  • 损失函数:误分点到超平面的距离
  • 学习算法:随机梯度下降

2.k邻近法

  • 适用问题:多类分类,回归
  • 模型特点:特征空间,样本点
  • 模型类型:判别模型
  • 学习策略:-
  • 损失函数:-
  • 学习算法:-

优点:

  • 简单、有效。
  • 重新训练的代价较低(类别体系的变化和训练集的变化)
  • 计算时间和空间O(n),线性于训练集的规模
  • 由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。
  • 对数据没有假设,准确度高,对outlier不敏感;
  • 该算法比较适用于样本容量比较大的类域的自动分类,而那些样本容量较小的类域采用这种算法比较容易产生误分。

缺点

  • KNN是懒散学习(预测时才训练),一些积极学习的算法要快很多。
  • 类别评分不是规格化的(不像其他概率评分)
  • 样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。可采用权值法(和该样本距离小的邻居权值大)来改进。
  • 计算量较大。目前常用解决方法是事先对已知样本点进行剪辑,事先去除对分类作用不大的样本。

3.朴素贝叶斯

  • 适用问题:多类分类
  • 模型特点:特征与类别的联合概率分布,条件独立假设
  • 模型类型:生成模型
  • 学习策略:极大似然估计,极大后验概率估计
  • 损失函数:对数似然损失
  • 学习算法:概率计算公式,EM算法

优点

  • 朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率。
  • NBC模型所需估计的参数很少,对缺失数据不太敏感,算法也比较简单。
  • 对小规模的数据表现很好,能个处理多分类任务,适合增量式训练。

缺点

  • 理论上NBC模型与其他分类方法相比具有最小的误差率(?)。但是实际上并非总是如此,这是因为NBC模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的(可以考虑用聚类算法先将相关性较大的属性聚类),这给NBC模型的正确分类带来了一定影响。在属性个数比较多或者属性之间相关性较大时,NBC模型的分类效率比不上决策树模型。而在属性相关性较小时,NBC模型的性能最为良好。
  • 需要知道先验概率。
  • 分类决策存在错误率(?查:由于贝叶斯分类是在样本取得某特征值时对它属于各类的概率进行推测,并无法获得样本真实的类别归属情况,所以分类决策一定存在错误率,即使错误率很低,分类错误的情况也可能发生。这是不是废话?谁没有错误?)
  • 对输入数据的表达形式很敏感(?使用数据类型:标称型数据/类别型特征,只在有限目标集中取值,如真与假(标称型目标变量主要用于分类))

4.决策树

  • 适用问题:多类分类,回归
  • 模型特点:分类树,回归树
  • 模型类型:判别模型
  • 学习策略:正则化的极大似然估计
  • 损失函数:对数似然函数
  • 学习算法:特征选择,生成树,剪枝

优缺点见此篇博文。

5.LR

  • 适用问题:多类分类
  • 模型特点:特征条件下类别的条件概率分布,对数线性模型
  • 模型类型:判别模型
  • 学习策略:极大似然估计,正则化的极大似然估计
  • 损失函数:逻辑斯蒂损失
  • 学习算法:改进的迭代尺度法,梯度下降,拟牛顿法

优点

  • 实现简单,广泛的应用于工业问题上;
  • 预测分类时,计算量非常小,速度很快,存储资源低;
  • 便利的观测样本概率分数;
  • LR对于稀疏高维特征处理是无压力,不怕特征大
  • 轻松地利用新数据来更新模型(如使用在线梯度下降算法,online gradient descent)

缺点

  • 模型本身的表达能力很弱,需要构造非常棒的特征组合才能达到好的效果
  • 只能处理两分类问题(在此基础上衍生出来的softmax可以用于多分类),且必须线性可分;
  • 对于非线性特征,需要进行转换;

6.SVM

  • 适用问题:二类分类
  • 模型特点:分离超平面,核技巧
  • 模型类型:判别模型
  • 学习策略:极小化正则化合页损失,软间隔最大化
  • 损失函数:合页损失
  • 学习算法:序列最小最优算法(SMO)

优点

  • 可以解决小样本情况下的机器学习问题。
  • 可以提高泛化性能(相比感知机,间隔最大化,自然泛化性能高)。
  • 可以解决高维问题。
  • 可以解决非线性问题。
  • 无需依赖整个数据;

缺点

  • 对缺失数据敏感。
  • 当观测样本很多时,效率并不是很高;
  • 需要对数据提前归一化(基于距离的模型)
  • 对非线性问题没有通用解决方案,必须谨慎选择Kernel function来处理。

对于核的选择也是有技巧的(libsvm中自带了四种核函数:线性核、多项式核、RBF以及sigmoid核):

第一,如果样本数量小于特征数,那么就没必要选择非线性核,简单的使用线性核就可以了;

第二,如果样本数量大于特征数目,这时可以使用非线性核,将样本映射到更高维度,一般可以得到更好的结果;

第三,如果样本数目和特征数目相等,该情况可以使用非线性核,原理和第二种一样。

对于第一种情况,也可以先对数据进行降维,然后使用非线性核,这也是一种方法。

7.Adaboost

  • 适用问题:二类分类
  • 模型特点:弱分类器的线性组合
  • 模型类型:判别模型
  • 学习策略:极小化加法模型的指数损失
  • 损失函数:指数损失
  • 学习算法:前向分步加法算法

优点

  • 可以使用各种方法构建子分类器,Adaboost算法提供的是框架。
  • 当使用简单分类器时,计算出的结果是可以理解的。而且弱分类器构造极其简单。
  • 简单,不用做特征筛选
  • 不用担心overfitting。

缺点

  • 对outlier比较敏感

XGB可以像随机森林一样输出特征重要性,RF计算重要性:
http://blog.csdn.net/u010685891/article/details/50516889

8. K-Means聚类

优点

  • 算法简单,容易实现 ;

  • 对处理大数据集,该算法是相对可伸缩的和高效率的,因为它的复杂度大约是O(nkt),其中n是所有对象的数目,k是簇的数目,t是迭代的次数。通常k远小于n。这个算法通常局部收敛。

  • 算法尝试找出使平方误差函数值最小的k个划分。当簇是密集的、球状或团状的,且簇与簇之间区别明显时,聚类效果较好。

缺点

  • 对数据类型要求较高,适合数值型数据;

  • 可能收敛到局部最小值,在大规模数据上收敛较慢

  • K值比较难以选取;

  • 对初值的簇心值敏感,对于不同的初始值,可能会导致不同的聚类结果;

  • 不适合于发现非凸面形状的簇,或者大小差别很大的簇。

  • 对于”噪声”和孤立点数据敏感,少量的该类数据能够对平均值产生极大影响。

10. 线性回归

线性回归是用于回归的,而不像Logistic回归是用于分类,其基本思想是用梯度下降法对最小二乘法形式的误差函数进行优化。

优点

  • 实现简单,计算简单;

缺点

  • 不能拟合非线性数据

11. 神经网络

优点:

  • 分类的准确度高
  • 并行分布处理能力强
  • 分布存储及学习能力强,对噪声神经有较强的鲁棒性和容错能力
  • 能充分逼近复杂的非线性关系,具备联想记忆的功能等。

缺点:

  • 神经网络需要大量的参数,如网络拓扑结构、权值和阈值的初始值;
  • 不能观察之间的学习过程,输出结果难以解释,会影响到结果的可信度和可接受程度
  • 学习时间过长,代价很大,甚至可能达不到收敛

12. 算法选择技巧

(1)首先应该选择的就是逻辑回归。如果它的效果不怎么样,那么可以将它的结果作为基准来参考,在基础上与其他算法进行比较;

(2)然后试试决策树(随机森林)看看是否可以大幅度提升你的模型性能。即便最后你并没有把它当做为最终模型,你也可以使用随机森林来移除噪声变量,做特征选择;

(3)如果特征的数量和观测样本特别多,那么当资源和时间充足时(这个前提很重要),使用SVM不失为一种选择。

【XGBOOST>=GBDT>=SVM>=RF>=Adaboost>=Other…】

现在深度学习很热门,很多领域都用到,它是以神经网络为基础。

算法固然重要,但好的数据却要优于好的算法,设计优良特征是大有裨益的。假如你有一个超大数据集,那么无论你使用哪种算法可能对分类性能都没太大影响(此时就可以根据速度和易用性来进行抉择)。

原创粉丝点击