• ML算法选型


    概念

    均方差 MSE mean square error
    平均绝对差 MAE mean absolute error
    交叉损失熵 cross entropy
    欠拟合:训练集和测试集性能接近
    过拟合:训练集远远高于测试集性能

    有监督学习算法比较

    knn
    调节:n_neighbors
    优点:模型很容易解释。
    缺点:
    局限:仅适用于小数据集。
    建议:预处理数据(将特征缩放到同一范围)能提高准确率。

    线性模型
    调节alpha或者C
    优点:对维度非常高的稀疏数据(如文本数据)表现好。训练和预测速度快。适用于非常大的数据集。
    缺点:泛化能力较差。

    朴素贝叶斯模型
    调节alpha
    优点:对维度非常高的稀疏数据(如文本数据)表现好。训练和预测速度快。适用于非常大的数据集。
    缺点:泛化能力比线性分类器较差。
    局限:仅适用于分类。

    决策树
    调节 max_features, max_depth
    优点:不需要对特征进行预处理(如放缩),不需要反复调节参数
    缺点:容易过拟合,泛化能力差。数模型不能在训练数据范围之外进行预测。

    random forest
    调节n_estimators, max_features, max_depth
    优点:不需要对特征进行预处理(如放缩),不需要反复调节参数。算法鲁棒性好。
    缺点:对维度非常高的稀疏数据(如文本数据)表现不好。需要更大内存,训练和预测速度较慢。

    梯度提升树
    调节n_estimators, learning_rate。learning_rate控制每棵树对前一棵树错误的纠正强度。
    优点:不需要对特征进行预处理(如放缩),预测时间比random forest较短,精度比random forest高。
    缺点:对维度非常高的稀疏数据(如文本数据)表现不好。训练速度较慢。需要仔细调参,算法鲁棒性差。
    建议:先尝试random forest,再尝试梯度提升树

    svm
    调节 核类型,gamma(等于核宽度的倒数),C。gamma/C越大对应越复杂的模型。
    优点:适用于低维/高维数据。决策边界可以为非线性。
    缺点:预处理数据(需要将特征缩放到同一范围)与调参都需要非常小心(对参数设置非常敏感)。模型很难检查,很难被解释。对大数据集,运行时间较长且内存需求大。

    MLP
    调节 hidden_layer_sizes(隐含层个数,以及每个层中单元个数(一般接近于输入特征个数)), activation(激活函数,默认为relu),solver(优化方法,默认为adam), alpha(正则化强度)。
    优点:在足够计算时间和数据情况下,性能更优秀。
    缺点:预处理数据(需要将特征缩放到同一范围,均值为0, 方差为1)与调参都需要非常小心。模型很难检查,很难被解释。训练时间很长。
    建议:adam对数据缩放相当敏感,lbfgs算法鲁棒性好。调参步骤:(1) 创建过拟合网络;(2) 缩小网络;(3)增加正则项去提高泛化能力。

    总结:
    C, gamma越小对应越简单模型,泛化能力更强。
    alpha越大对应越简单模型,泛化能力更强。

    无监督学习算法比较

    应用算法之前,都执行数据缩放处理。
    kmeans
    调节 n_clusters。
    优点:适用于大数据集。速度较快。
    缺点:需要给定聚类个数;k均值仅能找到相对简单的形状。依赖于初始化。
    应用:矢量化,用簇中心来表示每个数据点。类比于pca

    凝聚聚类
    调节 n_clusters。
    优点:适用于大数据集。速度较快。
    缺点:需要给定聚类个数;仅能找到相对简单的形状。不能对新数据做出预测。
    应用:找出簇中心个数

    DBSCAN 带噪声的基于密度的空间聚类应用
    调节 eps(定义了点与点之间接近的含义),min_samples。
    优点:适用于较大数据集。不需要给定聚类个数;能找到相对复杂的形状。
    缺点:不能对新数据做出预测。速度较慢。
    不确定性:有时会生成大小差别很大的簇。

    模型验证

    评价泛化能力
    train_test_split

    k折交叉验证
    调节 cv,用于指定分类器
    cross_val_score
    优点:比更train_test_split准确。
    缺点:增加了计算成本。
    应用:用于回归

    分层k折交叉验证
    避免某一个类别的数据都集中在某一个折中。导入sklearn.model_selection.StratifiedKFold
    优点:比更train_test_split准确。
    缺点:增加了计算成本。
    应用:用于分类

    打乱交叉验证
    sklearn.model_selection.ShuffleSplit

    分组交叉验证
    比如将同一个人的数据放在一组
    sklearn.model_selection.GroupKFold

  • 相关阅读:
    中国百年校服史:青春飞扬的几代人[转]
    关于五笔和拼音输入法的最本质区别
    Windows Mobile device 开发详解..
    生成目录树
    安装CE 6.0和VS2005出现的两个问题解决
    在c与c++下struct的区别,已经在c++下struct与class的区别。
    一招克死所有病毒!上网不用防火墙.不看后悔哟
    VC解析XML文件
    pythonday1笔记
    an error occurred while completing process java.lang.reflect.InvocationTargetEx
  • 原文地址:https://www.cnblogs.com/sunzhuli/p/9695251.html
Copyright © 2020-2023  润新知