机器学习算法比较

模型复杂度:Error = Bias + Variance

选择模型的时候需要平衡Bias和Variance所占的比例,也就是平衡over-fitting和under-fitting。

模型复杂度上升的时候,偏差会逐渐变小,而方差会逐渐变大。

 

 

一.分类

1.朴素贝叶斯(Naive Bayes, NB)

适用问题:

多类分类

模型特点:

特征与类别的联合概率分布,条件独立假设

模型类型

生成模型(关于生成模型和判别式模型,主要还是在于是否是要求联合分布)

学习策略:

极大似然估计,极大后验概率估计

损失函数:

对数似然损失

学习算法:

概率计算公式

EM算法

优点:

朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率。

对小规模的数据表现很好,能个处理多分类任务,适合增量式训练;

对缺失数据不太敏感,算法也比较简单,常用于文本分类。

缺点:

需要计算先验概率;

分类决策存在错误率;

对输入数据的表达形式很敏感。

2.Logistic回归(Logistic Regression, LR)

适用问题:

二类分类

模型特点:

特征条件下类别的条件概率分布,对数线型模型

模型类型

判别模型

学习策略:

极大似然估计,正则化的极大似然估计

损失函数:

logistic损失

学习算法:

梯度下降,拟牛顿

优点:

实现简单,广泛的应用于工业问题上;

分类时计算量非常小,速度很快,存储资源低;

便利的观测样本概率分数;

对逻辑回归而言,多重共线性并不是问题,它可以结合L2正则化来解决该问题;

缺点:

当特征空间很大时,逻辑回归的性能不是很好;

容易欠拟合,一般准确度不太高

不能很好地处理大量多类特征或变量;

只能处理两分类问题(在此基础上衍生出来的softmax可以用于多分类),且必须线性可分;

对于非线性特征,需要进行转换;

3.决策树(Decision Tree, DT)

适用问题:

多类分类,回归

模型特点:

分类树,回归树

模型类型

判别模型

学习策略:

正则化的极大似然估计

损失函数:

对数似然损失

学习算法:

特征选择,生成,剪枝

决策树自身的优点

计算简单,易于理解,可解释性强;

比较适合处理有缺失属性的样本;

能够处理不相关的特征;

在相对短的时间内能够对大型数据源做出可行且效果良好的结果。

缺点

容易发生过拟合(随机森林可以很大程度上减少过拟合);

忽略了数据之间的相关性;

对于那些各类别样本数量不一致的数据,在决策树当中,信息增益的结果偏向于那些具有更多数值的特征(只要是使用了信息增益,都有这个缺点,如RF)。

4.Adaboost

 

适用问题:

 

二类分类

 

模型特点:

 

弱分类器的线性组合

 

模型类型

 

判别模型

 

学习策略:

 

极小化加法模型的指数损失

 

损失函数:

 

指数损失

 

学习算法:

 

前向分步加法算法

优点

adaboost是一种有很高精度的分类器。

可以使用各种方法构建子分类器,Adaboost算法提供的是框架。

当使用简单分类器时,计算出的结果是可以理解的,并且弱分类器的构造极其简单。

简单,不用做特征筛选。

不容易发生overfitting。
缺点

对outlier比较敏感

5.GBDT

适用问题:

二类分类

模型特点:

弱分类器的线性组合

模型类型

判别模型

学习策略:

极小化加法模型的指数损失

损失函数:

指数损失

学习算法:

前向分步加法算法

6.支持向量机(Support Vector Machine, SVM)

适用问题:

二类分类

模型特点:

分离超平面,核技巧

模型类型

判别模型

学习策略:

软间隔最大化, 极小正则化合页损失

损失函数:

合页损失

学习算法:

序列最小最优化算法(SMO)

优点

可以解决高维问题,即大型特征空间;

能够处理非线性特征的相互作用;

无需依赖整个数据;

可以提高泛化能力;

缺点

当观测样本很多时,效率并不是很高;

对非线性问题没有通用解决方案,有时候很难找到一个合适的核函数;

对缺失数据敏感;

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

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

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

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

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

 

7.人工神经网络

优点

分类的准确度高;

并行分布处理能力强,分布存储及学习能力强,

对噪声神经有较强的鲁棒性和容错能力,能充分逼近复杂的非线性关系;

具备联想记忆的功能。

缺点

神经网络需要大量的参数,如网络拓扑结构、权值和阈值的初始值;

不能观察之间的学习过程,输出结果难以解释,会影响到结果的可信度和可接受程度;

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

8.最近邻算法KNN

 

适用问题:

 

多类分类,回归

 

模型特点:

 

特征空间,样本点

 

模型类型

 

判别模型

 

优点

理论成熟,思想简单,既可以用来做分类也可以用来做回归;

可用于非线性分类;

训练时间复杂度为O(n);

对数据没有假设,准确度高,对outlier不敏感;

缺点

计算量大;

样本不平衡问题(即有些类别的样本数量很多,而其它样本的数量很少);

需要大量的内存;

9.EM算法

 

适用问题:

 

概率模型参数估计

 

模型特点:

 

含隐变量的概率模型

 

学习策略:

 

极大似然估计,极大后验概率估计

 

损失函数:

 

对数似然损失

 

学习算法:

 

迭代算法

 

10.最大熵模型(Logistic Regression, LR)

 

适用问题:

 

二类分类

 

模型特点:

 

特征条件下类别的条件概率分布,对数线型模型

 

模型类型

 

判别模型

 

学习策略:

 

极大似然估计,正则化的极大似然估计

 

损失函数:

 

logistic损失

 

 

学习算法:

 

梯度下降,拟牛顿

 

 

 二.聚类

1.K-Means聚类

优点

算法简单,容易实现 ;

对处理大数据集,该算法是相对可伸缩的和高效率的,因为它的复杂度大约是O(nkt),其中n是所有对象的数目,k是簇的数目,t是迭代的次数

通常k<<n。这个算法通常局部收敛。< p="">

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

缺点

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

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

K值比较难以选取;

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

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

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

 

 

 

 

 

posted @ 2017-01-06 15:46  xmeo  阅读(284)  评论(0)    收藏  举报