当前位置:   article > 正文

机器学习各类算法的优缺点

机器学习各类算法的优缺点

1. 逻辑回归

二分类模型,由条件概率分布 P ( Y ∣ X ) P(Y|X) P(YX)表示,形式为参数化的logistic分布 1 e − ( w T x + b ) \frac{1}{e^{-(w^{T}x+b)}} e(wTx+b)1。这里随机变量X取值为实数,随机变量Y取值为1或0。可以通过有监督的方法来估计模型参数。

  • 优点
    1. 计算代价不高,易于理解和实现;
    2. 适用于需要得到有分类概率额场景;
    3. 对小数据噪声的鲁棒性好,不会受轻微的多重共线性的影响
  • 缺点:
    1. 容易欠拟合,分类精度可能不高;
    2. 数据有缺失和特征很大的时候表现不好 。

2. 支持向量机

对于两类线性可分学习任务,SVM找到一个间隔最大的超平面将两类样本分开,最大间隔能够保证该超平面具有最好的泛化能力。

  • 优点:

    1. 可以提高泛化性能;
    2. 可以解决高维问题,避免维数灾难;
    3. 可以解决非线性问题;
    4. 仅使用一部分支持向量来做超平面的决策,无需依赖全部数据。
  • 缺点:

    1. 对缺失数据敏感;
    2. 对非线性问题没有通用解决方案,必须谨慎选择kernel function来处理。
    3. 样本量较大时,核函数映射维度高,计算量大

3.决策树

启发式算法,核心是在决策树各个节点上应用信息增益等准则来选取特征,进而递归地构造决策树

  • 优点
    1. 可以处理缺失数据;
    2. 解释性高;
    3. 既可以处理离散值,也可以处理连续值;
    4. 可通过交叉验证的剪枝选择模型,提高泛化能力;
    5. 对异常数据不敏感
  • 缺点
    1. 容易过拟合,导致泛化能力不强;
    2. . 某些特征的样本比例过大,生成决策树容易偏向于这些特征
    3. 会因为样本发生一点点的改动,就会导致树结构的剧烈改变

3. KNN算法

从训练集中找出k个最接近测试对象的训练对象,再从这k个训练对象中找出居于主导的类别,将其赋给测试对象。

  • 优:
    1. 简单有效、任意理解;
    2. 可用于非线性分类,也可用户回归
    3. 准确度高,对异常点不敏感
  • 缺:
    1. 计算量较大,尤其是特征数非常多的时候;
    2. 样本不均衡时预测准确率低,对稀有类别的预测准确率低;
    3. 可解释性不强
    4. 使用懒散学习方法,基本上不学习,导致预测时速度比起逻辑回归之类的算法慢

4. 朴素贝叶斯

是利用各个类别的先验概率,再利用贝叶斯公式独立性假设计算出属性的类别概率以及对象的后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类别。

  • 优点:
    1. 数学基础坚实,分类效率稳定,容易解释;
    2. 所需估计的参数很少,对缺失数据不太敏感;
    3. 无需复杂的迭代求解框架,适用于规模巨大的数据集。
  • 缺点:
    1. 属性之间的独立性假设往往不成立(可考虑用聚类算法先将相关性较大的属性进行聚类);
    2. 需要知道先验概率,分类决策存在错误率。

5. 随机森林

多棵决策树并行结果,进行多数表决,有效降低模型方差

  • 优:
    1. 训练可以高度并行化,可以处理大数据集;
    2. 可以随机选择决策树节点划分特征,这样在样本特征维度很高的时候,仍然能高效的训练模型
    3. 在训练结束后可以给出各个特征的重要性;
    4. 模型方差小,泛化性能高;
    5. 对部分特征缺失不敏感
  • 缺:
    1. 噪音较大的数据集上,任意陷入过拟合;

6. AdaBoost

从弱学习算法出发,反复学习,得到一系列的弱分类器(即基本分类器),然后组合这些弱分类器,构成一个强分类器。大多数的提升方法都是改变训练数据集的概率分布(训练数据的权值分布),针对不同的训练数据分布调用弱学习算法学习一系列的弱分类器。

  • 优点
    1. 分类精度高;
    2. 可以使用各种方法构建子分类器,Adaboost算法提供的是框架;
    3. 简单,且不用做特征筛选;
  • 缺点
    1. 对异常样本敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性

7. GBDT

基于加法模型和前向分布算法,利用损失函数的负梯度作为残差训练当前的基模型

  • 优点
    1. 可以灵活处理各种类型的数据,包括连续值和离散值。
    2. 在相对少的调参时间情况下,预测的准确率也可以比较高。这个是相对SVM来说的。
    3. 使用一些健壮的损失函数,对异常值的鲁棒性非常强。比如 Huber损失函数和Quantile损失函数。
  • 缺点
    1. 由于弱学习器之间存在依赖关系,难以并行训练数据

8. XGBoost

基于加法模型和前向分布算法,利用损失函数的二阶展开作为损失函数训练当前基模型

XGBoost与GBDT相比,其优势:

  1. 将树模型的复杂度加入到正则项中,来避免过拟合,因此泛化性能会优于GBDT。
  2. 损失函数用泰勒展开式展开,同时用到了一阶和二阶导数,可以加快优化速度。
  3. GBDT只支持CART作为基学习器,XGBoost还支持线性分类器作为基学习器。
  4. 引进了特征子采样,像随机森林那样,既能避免过拟合,又能减少计算。
  5. t支持并行处理。XGBoost的并行不是模型生成的并行,而是在特征上的并行,将特征排序后以block的形式存储在内存中,在后面迭代重复使用这个结构。
    这个block也使得并行化成为了可能,其次在节点分裂时,计算每个特征的增益,最终选择增益最大的那个特征去做分割,那么各个特征的增益计算就可以开多线程进
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/173290
推荐阅读
相关标签
  

闽ICP备14008679号