机器学习算法比较
模型复杂度: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值比较难以选取;
对初值的簇心值敏感,对于不同的初始值,可能会导致不同的聚类结果;
不适合于发现非凸面形状的簇,或者大小差别很大的簇。
对于”噪声”和孤立点数据敏感,少量的该类数据能够对平均值产生极大影响。

浙公网安备 33010602011771号