常见机器学习算法的优缺点
有监督学习
线性回归
优点:实现简单,计算简单。
缺点:不能拟合非线性数据。
KNN
优点:
- 理论成熟,思想简单,容易实现,既可以用来做分类也可以用来做回归;
- 可用于非线性分类;
- 模型训练时间快,训练时间复杂度为 O(n),KNN 算法时惰性的;
- 对数据没有假设,准确度高,对异常值不敏感;
- KNN 是一种在线技术,新数据可以直接加入数据集而不必进行重新训练;
缺点:
- 对内存要求较高,因为该算法存储了所有训练数据;
- 对于样本容量大的数据集计算量比较大(体现在距离计算上);
- 样本不平衡时,预测偏差比较大。如:某一类的样本比较少,而其它类样本比较多;
- KNN每一次分类都会重新进行一次全局运算;
- k值大小的选择没有理论选择最优,往往是结合K-折交叉验证得到最优k值选择;
逻辑回归
优点:
- 可解释性强,便利的观测样本概率分数;
- 分类时计算量非常小,速度很快,存储资源低,实现简单,广泛的应用于工业问题上;
- 对逻辑回归而言,多重共线性并不是问题,它可以结合 L2 正则化来解决该问题;
缺点:
- 当特征空间很大时,逻辑回归的性能不是很好;
- 容易欠拟合,一般准确度不太高;
- 不能很好地处理大量多类特征或变量;
- 只能处理二分类问题(在此基础上衍生出来的 softmax 可以用于多分类),且必须线性可分;
- 需要解决特征共线性问题,如果特征共线性较高,训练的权重不满秩,有模型不收敛的可能;
- 对于异常值和缺失值非常敏感,需要提前进行数据处理;
- 模型训练前需要特征归一化,不然进行梯度下降寻找最优值时会收敛很慢或者不收敛;
- 对于非线性连续特征需要连续特征离散化;
应用:
- 用于二分类领域,可以得出概率值,适用于根据分类概率排名的领域,如搜索排名等
- 逻辑回归的扩展 softmax 可以应用于多分类领域,如手写字识别等
- 信用评估
- 测量市场营销的成功度
- 预测某个产品的收益
- 特定的某天是否会发生地震
SVM
优点:
- 可以解决高维问题,即大型特征空间;
- 解决小样本下机器学习问题;
- 能够处理非线性特征的相互作用;
- 无局部极小值问题;
- 无需依赖整个数据;
- 泛化能力比较强;
缺点:
- 会耗费大量的机器内存和运算时间;
- 当观测样本很多时,效率并不是很高;
- 对非线性问题没有通用解决方案,有时候很难找到一个合适的核函数;
- 对于核函数的高维映射解释力不强,尤其是径向基函数;
- 常规SVM只支持二分类;
- 对缺失数据敏感;
应用:文本分类、图像识别、主要二分类领域。
朴素贝叶斯
优点:
- 朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率。
- 对大数量训练和查询时具有较高的速度。即使使用超大规模的训练集,针对每个项目通常也只会有相对较少的特征数,并且对项目的训练和分类也仅仅是特征概率的数学运算而已;
- 对小规模的数据表现很好,能个处理多分类任务,适合增量式训练(即可以实时的对新增的样本进行训练);
- 对缺失数据不太敏感,算法也比较简单,常用于文本分类;
- 朴素贝叶斯对结果解释容易理解;
缺点:
- 需要计算先验概率;
- 分类决策存在错误率;
- 对输入数据的表达形式很敏感;
- 由于使用了样本属性独立性的假设,所以如果样本属性有关联时其效果不好;
应用:
- 欺诈检测中使用较多
- 一封电子邮件是否是垃圾邮件
- 一篇文章应该分到科技、政治,还是体育类
- 一段文字表达的是积极的情绪还是消极的情绪
- 人脸识别
决策树
优点:
- 决策树易于理解和解释,可以可视化分析,容易提取出规则;
- 可以同时处理标称型和数值型数据;
- 比较适合处理有缺失属性的样本;
- 具有一定的特征选择能力,能够处理不相关的特征;
- 测试数据集时,运行速度比较快;
- 在相对短的时间内能够对大型数据源做出可行且效果良好的结果;
缺点:
- 属于弱分类器,且容易过拟合,可用 bagging 的方式减小方差(如随机森林),boosting 的方式减少偏差(如 GBDT、xgboost);
- 对缺失数据处理比较困难;
- 容易忽略数据集中属性的相互关联;
- 对于那些各类别样本数量不一致的数据,在决策树中,进行属性划分时,不同的判定准则会带来不同的属性选择倾向;信息增益准则对可取数目较多的属性有所偏好(典型代表 ID3 算法),而增益率准则(CART)则对可取数目较少的属性有所偏好,但 CART 进行属性划分时候不再简单地直接利用增益率尽心划分,而是采用一种启发式规则)(只要是使用了信息增益,都有这个缺点,如 RF);
- ID3 算法计算信息增益时结果偏向数值比较多的特征;
改进:
- 对决策树进行剪枝。可以采用交叉验证法和加入正则化的方法。
- 使用基于决策树的集成算法(如随机森林),可以解决过拟合的问题;
应用:
- 企业管理实践
- 企业投资决策
- 由于决策树很好的分析能力,在决策过程应用较多
随机森林
优点:
- 随机森林具有防止过拟合能力,精度比大多数单个算法要好;
- 随机森林分类器可以处理缺失值;
- 具有一定的特征选择能力,由于有袋外数据(OOB),可以在模型生成过程中取得真实误差的无偏估计,且不损失训练数据量在训练过程中,能够检测到特征间的互相影响,且可以得出特征的重要性,具有一定参考意义;
- 每棵树可以独立、同时生成,容易做成并行化方法;
缺点:
- 随机森林已经被证明在某些噪音较大的分类或回归问题上会过拟合;
- 对于有不同取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的;
GBDT
优点:
- GBDT 属于强分类器,一般情况下比逻辑回归和决策树预测精度要高;
- GBDT 可以自己选择损失函数,当损失函数为指数函数时,GBDT 变为 Adaboost 算法;
- GBDT 可以做特征组合,往往在此基础上和其他分类器进行配合;
缺点:
- 由于弱学习器之间存在依赖关系,难以并行训练数据;
- 和其他树模型一样,不适合高维稀疏特征;
AdaBoost
优点:
- 很好的利用了弱分类器进行级联;
- 可以将不同的分类算法作为弱分类器;
- AdaBoost 具有很高的精度;
- 相对于 bagging 算法和随机森林算法,AdaBoost 充分考虑的每个分类器的权重;
缺点:
- AdaBoost迭代次数也就是弱分类器数目不太好设定,可以使用交叉验证来进行确定;
- 数据不平衡导致分类精度下降;
- 训练比较耗时,每次重新选择当前分类器最好切分点;
应用:
- 模式识别
- 计算机视觉领域
XGBoost
优点:
- 精度更高,灵活性更强;
- 收敛速度增快;
- 正则化,一定程度防止过拟合;
- 并行处理;
- 列抽样;
- 缺失值处理;
- 内置交叉验证;
缺点:
- 和其他树模型一样,不适合高维稀疏特征;
- 算法参数过多,调参复杂;
LightGBM
优点:
- 更快的训练效率,低内存使用,更高的准确率;
- 支持直接使用类别特征;
- 支持高效并行;
- 可处理大规模数据;
缺点:
- 可能会长出比较深的决策树,产生过拟合;
- 对噪点较为敏感;
- 在寻找最优解时,依据的是最优切分变量,没有将最优解是全部特征的综合这一理念考虑进去;
CatBoost
优点:
- 性能卓越,在性能方面可以匹敌任何先进的机器学习算法;
- 鲁棒性,它减少了对很多超参数调优的需求,并降低了过度拟合的机会,这也使得模型变得更加具有通用性;
- 易于使用;
- 支持类别特征;
- 可扩展;
缺点:
- 对于类别特征的处理需要大量的内存和时间;
- 不同随机数的设定对于模型预测结果有一定的影响;
无监督学习
K-Means
优点:
- 算法简单,容易实现,可解释性较强 ;
- 算法速度很快;
- 对处理大数据集,该算法是相对可伸缩的和高效率的,这个算法通常局部收敛;
- 算法尝试找出使平方误差函数值最小的 k 个划分。当簇是密集的、球状或团状的,且簇与簇之间区别明显时,聚类效果较好;
缺点:
- 对数据类型要求较高,适合数值型数据;
- 可能收敛到局部最小值,在大规模数据上收敛较慢
- 分组的数目k是一个输入参数,不合适的k可能返回较差的结果。
- 对初值的簇心值敏感,对于不同的初始值,可能会导致不同的聚类结果;
- 不适合于发现非凸面形状的簇,或者大小差别很大的簇;
- 对于”噪声”和异常点数据敏感,少量的该类数据能够对平均值产生极大影响;
密度聚类
优点:
- 可以对任意形状的稠密数据集进行聚类,相对的K均值之类的聚类算法一般只适用于凸数据集;
- 可以在聚类的同时发现异常点,对数据集中的异常点不敏感;
- 聚类结果没有偏倚,相对的,K-Means之类的聚类算法初始值对聚类结果有很大影响;
缺点:
- 如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差,这时用DBSCAN聚类一般不适合;
- 如果样本集较大时,聚类收敛时间较长,此时可以对搜索最近邻时建立的KD树或者球树进行规模限制来改进;
- 调参相对于传统的K-Means之类的聚类算法稍复杂,主要需要对距离阈值,邻域样本数阈值联合调参,不同的参数组合对最后的聚类效果有较大影响;
层级聚类
优点:
- 距离和规则的相似度容易定义,限制少;
- 不需要预先制定聚类数;
- 可以发现类的层次关系;
- 可以聚类成其它形状;
缺点:
- 计算复杂度太高;
- 异常值也能产生很大影响;
- 算法很可能聚类成链状;