常见机器学习算法的优缺点

有监督学习

线性回归

优点:实现简单,计算简单。

缺点:不能拟合非线性数据。

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之类的聚类算法稍复杂,主要需要对距离阈值,邻域样本数阈值联合调参,不同的参数组合对最后的聚类效果有较大影响;

层级聚类

优点

  • 距离和规则的相似度容易定义,限制少;
  • 不需要预先制定聚类数;
  • 可以发现类的层次关系;
  • 可以聚类成其它形状;

缺点

  • 计算复杂度太高;
  • 异常值也能产生很大影响;
  • 算法很可能聚类成链状;