ML常见问题总结


Logistic回归优缺点

一、优点
1. 计算量小,速度快,存储资源低,易于理解和实现
2. 便利的观测样本概率分数
3. 多重共线性可以结合L2正则化来解决
二、缺点
1. 不能很好地处理高维样本
2. 容易产生欠拟合
3. 分类精度不高

SVM优缺点

一、SVM优点
1. 可以解决高维非线性问题
2. 泛化能力比较强
3. 无需依赖整个数据
4. 需要对数据提前归一化
二、SVM缺点
1. 当观测样本很多时,效率并不是很高
2. 对非线性问题没有通用解决方案,有时候很难找到一个合适的核函数
3. 对缺失数据敏感;
4. 对于核函数的高维映射解释力不强,尤其是径向基函数。

对于核的选择也是有技巧的(libsvm中自带了四种核函数:线性核、多项式核、RBF以及sigmoid核):
第一,如果样本数量小于特征数,那么就没必要选择非线性核,简单的使用线性核就可以了;
第二,如果样本数量大于特征数目,这时可以使用非线性核,将样本映射到更高维度,一般可以得到更好的结果;
第三,如果样本数目和特征数目相等,该情况可以使用非线性核,原理和第二种一样。
对于第一种情况,也可以先对数据进行降维,然后使用非线性核,这也是一种方法。

决策树优缺点

一、优点
1. 计算简单,模型可解释性强
2. 可以同时处理标称型和数值型数据
3. 测试数据集时,运行速度比较快
二、决策树缺点
1. 容易发生过拟合(随机森林可以很大程度上减少过拟合)
2. 忽略了特征之间的相关性
3. 对于那些各类别样本数量不一致的数据,在决策树当中,信息增益的结果偏向于那些具有更多数值的特征(只要是使用了信息增益,都有这个缺点,如RF)
4. 对缺失数据处理比较困难

KNN优缺点

一、优点
1. KNN是一种在线技术,新数据可以直接加入数据集而不必进行重新训练
2. 容易实现,可解释性强
3. 可处理非线性问题
4. 对数据没有假设,准确度高,对outlier不敏感;
二、缺点
1. 计算量大;
2. 样本不平衡问题(即有些类别的样本数量很多,而其它样本的数量很少)

AdaBoost优缺点

一、优点
1. 很好的利用了弱分类器进行级联
2. 可以将不同的分类算法作为弱分类器
3. AdaBoost具有很高的精度
4. 相对于bagging算法和Random Forest算法,AdaBoost充分考虑的每个分类器的权重
5. 不容易发生overfitting
二、缺点
1. AdaBoost迭代次数也就是弱分类器数目不太好设定,可以使用交叉验证来进行确定
2. 数据不平衡导致分类精度下降
3. 训练比较耗时,每次重新选择当前分类器最好切分
4. 对outlier比较敏感

朴素贝叶斯优缺点

一、优点
1. 对大数量训练和查询时具有较高的速度。即使使用超大规模的训练集,针对每个项目通常也只会有相对较少的特征数,并且对项目的训练和分类也仅仅是特征概率的数学运算而已。
2. 支持增量式运算。即可以实时的对新增的样本进行训练。
3. 朴素贝叶斯对结果解释容易理解。
4. 对缺失数据不太敏感
二、缺点
1. 由于使用了样本属性独立性的假设,所以如果样本属性有关联时其效果不好
2. 需要计算先验概率
3. 分类决策存在错误率
4. 对输入数据的表达形式很敏感

人工神经网络优缺点

一、优点
1. 分类准确度高,学习能力极强。
2. 对噪声数据鲁棒性和容错性较强。
3. 有联想能力,能逼近任意非线性关系。
二、缺点
1. 神经网络参数较多,权值和阈值。
2. 黑盒过程,不能观察中间结果。
3. 学习过程比较长,有可能陷入局部极小值。

K-Means优缺点

一、优点
1. 算法简单,容易实现
2. 适合处理样本分布区分度高情况
二、缺点
1. 对数据类型要求较高,适合数值型数据
2. 可能收敛到局部最小值,在大规模数据上收敛较慢
3. K值比较难以选取
4. 对初值的簇心值敏感,对于不同的初始值,可能会导致不同的聚类结果
5. 只能发现球状簇
6. 对于”噪声”和孤立点数据敏感,少量的该类数据能够对平均值产生极大影响。

GBDT与Xgboost区别

  1. 传统GBDT对损失函数进行一阶泰勒展开,只用到一阶导数信息;
    Xgboost则对损失函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。
    Xgboost工具支持自定义代价函数,只要函数可一阶和二阶求导。
  2. Xgboost在损失函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、叶子节点分数的惩罚。
  3. 缩减(Shrinkage),相当于学习速率。Xgboost在进行完一次迭代后,会将叶子节点的权重乘上该系数,削弱每棵树的影响。
  4. 列抽样(column subsampling)。Xgboost借鉴了随机森林的做法,每棵树对特征随机采样,降低过拟合。
  5. 对缺失值的处理。对于特征的值有缺失的样本设定默认分支方向。
  6. 并行化。Xgboost在训练之前,预先对数据进行排序,然后保存为block结构,后面的迭代中重复地使用这个结构,减少计算量。
  7. 可并行的近似直方图算法。

GBDT与RF区别

  1. GBDT基分类器为CART,RF可用分类树或回归树
  2. RF的基学习器可以并行生成,GBDT只能串行生成
  3. 对于输出结果,RF采用多数投票或求均值;
    GBDT用加权累加
  4. RF对异常值不敏感,GBDT对异常值敏感
  5. RF通过减少模型方差提高性能;
    GBDT通过减少模型偏差提高性能

GBDT与传统Boosting的区别

  1. GBDT每一轮训练以上一轮的残差作为输入,尽量去拟合残差使下一轮残差不断变小,所以GBDT可以每一轮一定想损失函数减小的梯度方向变化
  2. 传统Boosting只能是尽量向梯度方向减小
  3. Adaboost通过提高错分数据点的权重来定位模型的不足,
    GBDT通过算梯度来定位模型不足

树模型的优缺点

优点:
1. 模型可解释性强,能可视化
2. 数据不需要归一化或设置哑变量
3. 有特征组合的特性,能解决非线性问题

缺点:
1. 回归预测时,只能输出有限数值
2. 不适合处理高维稀疏数据

样本比例不平衡的处理方法

  1. 搜集更多数据从而让正负样本比例平衡
  2. 使用适当的评判指标,如准确率、召回率、F1值、ROC等
    (ROC具有不随样本比例而改变的性质)
  3. 对数据进行采样:
    过采样:增加样本数较少的样本,复制已有样本
    欠采样:减少样本数较多的样本,丢弃多余样本
    样本总数较多时考虑欠采样,较少时考虑过采样
  4. 合成样本:通过组合已有的样本的特征产生新的样本、smote
  5. 改变样本权重:增大样本数较少类别的样本权重,当被误分时,损失值要乘上权重

防止过拟合的方法

  1. 获取更多数据:
    1.从数据源获取
    2.根据当前分布产生更多数据
    3.重采样
  2. 正则化方法
  3. Early stoping迭代次数截断
  4. Dropout

GBDT特征重要性评估

特征对目标变量预测的相对重要程度可以通过特征(树中的决策节点)使用的相对顺序(深度)来进行评估;
越靠近树顶的特征节点对更大一部分输入样本的最终预测决策做的贡献,因此可使用每个特征对最终预测的贡献的样本比例来评估该特征的重要性;
通过对多棵树的贡献率取平均。

Xgboost调优

  1. 确定学习速率和tree-based参数调优的估计器数目(树棵树)
  2. max_depth和min_child_weight参数调优(最小叶子节点样本权重和)
  3. Gamma参数调优(节点分裂所需损失函数下降值)
  4. 调整subsample和colsample_bytree参数(每棵树随机采样的比例、每棵树随机采样的列数比例)
  5. 正则项参数调优
  6. 降低学习速率

LR与SVM的异同

相同点:
1. 都是分类算法
2. 不考虑核函数,都是线性分类算法
3. 都是监督学习算法
4. 都是判别式模型

不同点:
1. 损失函数不同:
LR假设样本服从伯努利分布,用交叉熵作损失函数;
SVM基于几何间隔最大化原理,用hinge函数作损失函数
2. 构造决策边界时,LR考虑全局的样本点;SVM只考虑边界附近的点
3. 解决非线性问题时,SVM采用核函数;
LR不引入核函数的原因:SVM的决策面由支持向量决定,只有少数样本参与了计算,即只有少数样本参与核计算;LR决策边界基于全部的样本,即每个样本都要参与核计算,计算复杂度高

树模型的优缺点

优点:
1. 容易解释
2. 可以相对快的构建
3. 可以自然的处理连续和分类数据
4. 可以自然的处理缺失数据
5. 对输入中的异常值是稳健的
6. 在输入单调变换时是不变的
7. 会执行隐式的变量选择
8. 可以得到数据中的非线性关系
9. 可以得到输入之间的高阶交互
10. 能很好地扩展到大型数据集

缺点:
1. 往往会选择具有更高数量的不同值的预测器
2. 当预测器具有很多类别时,可能会过拟合
3. 不稳定,有很好的方差
4. 缺乏平滑
5. 难以获取叠加结构
6. 预测性能往往有限

猜你喜欢

转载自blog.csdn.net/changyan_123/article/details/82155012