机器学习模型五花八门不知道怎样选?这份指南告诉你
作者头像
  • 2020-01-07 08:51:24 4

【导读】本文将探讨不同机器学习模型及其适用场景,帮助你更好地选择适合自己的模型。

1. 回归 — 预测连续值

A. 线性回归(Linear Regression)

  • 普通线性回归

    • 优点:
      • 可以很好地捕捉数据集中的线性关系。
      • 适用于需要简单预测模型的情况。
      • 训练和预测速度快。
      • 在小数据集上表现优秀。
      • 结果易于解释。
      • 易于更新模型。
      • 不需要调整参数(正则化模型除外)。
      • 不需要特征缩放。
    • 缺点:
      • 不适用于非线性数据。
      • 预测准确性较低。
      • 可能会出现过拟合现象(正则化模型可以缓解)。
      • 分离信号和噪声效果不佳,需去除无关特征。
      • 无法识别特征间的相互作用。
  • 正则化线性回归(Lasso回归、Ridge回归、Elastic-Net回归)

    • 优点:
      • 正则化线性回归模型,有助于防止过拟合。
      • 更擅长正则化,因为模型更简单。
      • 适用于关注少量特征的情况。
    • 缺点:
      • 需要进行特征缩放。
      • 需要调整正则化参数。

B. 回归树(Regression Trees)

  • 决策树

    • 优点:
      • 训练和预测速度快。
      • 能够获取数据集中的非线性关系。
      • 能够识别特征之间的相互作用。
      • 能够处理数据集中的异常值。
      • 能够找到数据集中的重要特征。
      • 不需要特征缩放。
      • 结果易于解释。
    • 缺点:
      • 预测准确性较低。
      • 需要调整一些参数。
      • 不适用于小型数据集。
      • 分离信号和噪声效果不佳,需去除无关特征。
      • 新增数据时,更新模型较困难。
      • 实际应用中较少单独使用,多用于集成模型。
  • 集成模型(RandomForest、XGBoost、CatBoost、LightGBM)

    • 优点:
      • 多棵树整合预测结果。
      • 高预测准确性,在实际应用中表现优异。
      • 是Kaggle竞赛推荐的算法。
      • 能够处理数据集中的异常值。
      • 能够获取非线性关系。
      • 能够找到数据集中的重要特征。
      • 能够分离信号和噪声。
      • 不需要特征缩放。
      • 特别适用于高维度数据。
    • 缺点:
      • 训练速度较慢。
      • 预测速度较快。
      • 结果难以解释。
      • 新增数据时,更新模型较困难。
      • 参数调整复杂。
      • 不适用于小型数据集。

C. 深度学习(Deep Learning)

- 优点:
    - 在实际应用中具有较高的预测准确性。
    - 能够捕捉数据中的复杂模式。
    - 特别适用于大型数据集和高维度数据集。
    - 新增数据时,易于更新模型。
    - 减少了特征工程的需求。
    - 是计算机视觉、机器翻译、情感分析和语音识别任务的最新技术。
- 缺点:
    - 训练速度较低。
    - 需要大量计算资源。
    - 需要特征缩放。
    - 结果难以解释。
    - 需要大量训练数据。
    - 在非图像、非文本、非语音任务中优于提升算法。
    - 对专业知识要求高。

D. 基于距离的K近邻算法(K Nearest Neighbors – Distance Based)

- 优点:
    - 训练速度快。
    - 不需要过多参数调整。
    - 结果易于解释。
    - 适用于小型数据集。
- 缺点:
    - 预测准确性较低。
    - 不适用于小型数据集。
    - 需要选择合适的距离函数。
    - 需要特征缩放。
    - 随着数据集增大,预测速度加快。
    - 分离信号和噪声效果不佳。
    - 是内存密集型算法。
    - 不适用于高维度数据。

2. 分类 — 预测一个或多个类别的概率

A. 逻辑回归算法(Logistic Regression)

- 优点:
    - 能够对线性可分离数据进行分类。
    - 训练和预测速度快。
    - 适用于小型数据集。
    - 结果易于解释。
    - 新增数据时,易于更新模型。
    - 正则化时可以避免过拟合。
    - 可以同时进行二分类和多分类任务。
    - 不需要参数调整(正则化时除外)。
    - 不需要特征缩放(正则化时除外)。
- 缺点:
    - 不适用于非线性可分离数据。
    - 预测准确性较低。
    - 可能会出现过拟合(正则化模型可以缓解)。
    - 分离信号和噪声效果不佳。
    - 无法识别特征间的相互作用。

B. 支持向量机算法(Support Vector Machines – Distance based)

- 优点:
    - 预测准确性高。
    - 即使在高维数据集上也不会过拟合。
    - 适用于小型数据集。
    - 适用于文本分类任务。
- 缺点:
    - 新增数据时,更新模型困难。
    - 是内存密集型算法。
    - 不适用于大型数据集。
    - 需要选择正确的核函数。

C. 朴素贝叶斯算法(Naive Bayes — Probability based)

- 优点:
    - 在文本分类任务中表现优异。
    - 训练和预测速度快。
    - 在小型数据集上表现良好。
    - 能够分离信号和噪声。
    - 在实际应用中表现良好。
    - 操作简单,易于实现。
    - 不需要特征缩放。
    - 结果易于解释。
    - 扩展性好。
- 缺点:
    - 预测准确性较低。

D. K近邻算法(K Nearest Neighbors — Distance Based)

- 优点:
    - 训练速度快。
    - 不需要过多参数调整。
    - 结果易于解释。
    - 适用于小型数据集。
- 缺点:
    - 预测准确性较低。
    - 不适用于小型数据集。
    - 需要选择合适的距离函数。
    - 需要特征缩放。
    - 随着数据集增大,预测速度加快。
    - 分离信号和噪声效果不佳。
    - 是内存密集型算法。
    - 不适用于高维度数据。

E. 分类树(Classification Tree)

  • 决策树

    • 优点:
      • 训练和预测速度快。
      • 能够获取数据集中的非线性关系。
      • 能够识别特征之间的相互作用。
      • 能够处理数据集中的异常值。
      • 能够找到数据集中的重要特征。
      • 不需要特征缩放。
      • 结果易于解释。
    • 缺点:
      • 预测速度较慢。
      • 需要调整参数。
      • 不适用于小型数据集。
      • 分离信号和噪声效果不佳。
      • 在实际应用中较少单独使用,多用于集成模型。
      • 新增数据时,更新模型较困难。
  • 集成模型(RandomForest、XGBoost、CatBoost、LightGBM)

    • 优点:
      • 多棵树整合预测结果。
      • 高预测准确性,在实际应用中表现优异。
      • 是Kaggle竞赛推荐的算法。
      • 能够获取非线性关系。
      • 能够处理数据集中的异常值。
      • 能够找到数据集中的重要特征。
      • 能够分离信号和噪声。
      • 不需要特征缩放。
      • 特别适用于高维度数据。
    • 缺点:
      • 训练速度较慢。
      • 预测速度较快。
      • 结果难以解释。
      • 新增数据时,更新模型较困难。
      • 参数调整复杂。
      • 不适用于小型数据集。

F. 深度学习(Deep Learning)

- 优点:
    - 预测准确性高,在实际应用中表现良好。
    - 能够捕捉数据中的复杂模式。
    - 适用于大型数据集和高维度数据集。
    - 新增数据时,易于更新模型。
    - 减少了特征工程的需求。
    - 是计算机视觉、机器翻译、情感分析和语音识别任务的最新技术。
- 缺点:
    - 训练速度较慢。
    - 结果难以解释。
    - 需要大量计算资源。
    - 需要特征缩放。
    - 需要大量训练数据。
    - 在非图像、非文本、非语音任务中优于提升算法。
    - 对专业知识要求高。

3. 聚类 — 将数据分类以便最大化相似性

A. DBSCAN聚类算法(Density-Based Spatial Clustering of Applications with Noise)

- 优点:
    - 可扩展到大型数据集。
    - 能够检测噪声。
    - 不需要预先知道聚类数量。
    - 能够发现任意形状的聚类。
- 缺点:
    - 如果整个数据集都是高密度区域,算法可能无效。
    - 需要调整密度参数。

B. K-means算法

- 优点:
    - 特别适合获取底层数据集的结构。
    - 算法简单,易于解释。
    - 适合预先知道聚类数量。
- 缺点:
    - 如果聚类不是球状且大小相似,算法可能无效。
    - 需要预先知道聚类数量。
    - 是内存密集型算法。
    - 无法扩展到大型数据集。

4. 其他未涵盖的模型

A. 降维算法(Dimensionality Reduction Algorithms)

  • 高斯混合模型(Gaussian Mixture Model)
  • 层次聚类(Hierarchical Clustering)

B. 计算机视觉(CV)

  • 卷积神经网络(Convolutional Neural Networks)
  • 图像分类(Image Classification)
  • 对象检测(Object Detection)
  • 图像分割(Image Segmentation)

C. 自然语言处理(NLP)

  • 循环神经网络(Recurrent Neural Networks,包括LSTM和GRU)

D. 强化学习(Reinforcement Learning)

交融模型

交融模型是一种强大的技术,有助于减少过拟合,并通过组合不同模型的输入以做出更稳定的预测。交融模型是赢得Kaggle竞赛的重要工具。在选择模型进行融合时,我们希望选择不同类型模型,以确保它们具有不同的优势和特点,从而在数据集中获取不同的模式。这种多样性使得偏差降低。我们还希望确保它们的功能可比,以确保预测的稳定性。

例如,通过融合不同的模型,我们可以显著降低预测误差。这是因为虽然所有这些模型都非常擅长预测,但它们各自得到不同的正确预测结果,通过结合它们的优势,我们可以构建出一个超级模型。

python def blended_predictions(X): return ((0.1 * ridge_model_full_data.predict(X)) + (0.2 * svr_model_full_data.predict(X)) + (0.1 * gbr_model_full_data.predict(X)) + (0.1 * xgb_model_full_data.predict(X)) + (0.1 * lgb_model_full_data.predict(X)) + (0.05 * rf_model_full_data.predict(X)) + (0.35 * stack_gen_model.predict(np.array(X))))

交融模型类型

  • Bagging:通过随机选择不同数据子集训练多个基础模型,并进行投票。常用于随机森林算法。
  • Boosting:迭代训练模型,并在每次迭代后更新训练样本的重要性。常用于梯度提升算法。
  • Blending:训练多种不同基础模型,并在验证集上进行预测。然后用这些预测结果训练新模型,并在测试集上进行预测。
  • Stacking:训练多种不同基础模型,并对数据集的K折交叉验证结果进行预测。然后用这些预测结果训练新模型,并在测试集上进行预测。

模型对比

权重和偏置让我们可以通过一行代码跟踪和比较模型的表现。选择要测试的模型后,对其进行训练并记录模型的运行情况。完成后,可以在简单的控制台中对比模型的表现。

```python

使用WandB进行模型性能记录

import wandb import tensorflow.keras from wandb.keras import WandbCallback from sklearn.modelselection import crossval_score

初始化WandB

wandb.init(anonymous='allow', project="pick-a-model")

初始化模型

clf = svm.SVR(C=20, epsilon=0.008, gamma=0.0003)

获取交叉验证分数

cvscores = crossvalscore(clf, Xtrain, train_labels, cv=5)

记录分数

for cvscore in cvscores: wandb.log({'score': cv_score})

初始化另一个模型

wandb.init(anonymous='allow', project="pick-a-model") clf = XGBRegressor(learningrate=0.01, nestimators=6000, maxdepth=4, minchildweight=0, gamma=0.6, subsample=0.7, colsamplebytree=0.7, objective='reg:linear', nthread=-1, scaleposweight=1, seed=27, regalpha=0.00006, randomstate=42)

获取交叉验证分数

cvscores = crossvalscore(clf, Xtrain, train_labels, cv=5)

记录分数

for cvscore in cvscores: wandb.log({'score': cv_score})

初始化第三个模型

wandb.init(anonymous='allow', project="pick-a-model") ridgealphas = [1e-15, 1e-10, 1e-8, 9e-4, 7e-4, 5e-4, 3e-4, 1e-4, 1e-3, 5e-2, 1e-2, 0.1, 0.3, 1, 3, 5, 10, 15, 18, 20, 30, 50, 75, 100] clf = Ridge(alphas=ridgealphas)

获取交叉验证分数

cvscores = crossvalscore(clf, Xtrain, train_labels, cv=5)

记录分数

for cvscore in cvscores: wandb.log({'score': cv_score}) ```

通过以上步骤,你可以为特定任务选择最适合的模型。模型选择可能很复杂,但希望本文能为你提供一些有用的指导,帮助你找到适合的方法。

    本文来源:图灵汇
责任编辑: :
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
五花八门模型这份机器告诉怎样指南知道学习
    下一篇