机器数据分析平台

  • 机器数据分析平台 > 使用文档 > 应用平台 > Pandora机器学习工具包 >fit的使用方法详述 > 预测离散指标

    预测离散指标

    最近更新时间:2021-08-24 15:04:06

    使用场景

    离散数据指的是可以被分成n类的数据,而且一般情况下不同类之间的距离是无法衡量的。比如城市,品种,性别,编号等等。当需要预测单个离散指标的时候,我们常用分类预测(Classification)的方法。

    通用语法

    |fit <algo_name> [options] <target_field> from <feature_field_1> <feature_field_2> [into model_name]... 
    

    通用参数说明:

    • <algo_name> 必填,用来指定训练模型采用的算法名称。
    • [options]可选,为算法的内置参数,根据提供的算法变化。
    • <target_field> 必填,且只能是一个字段,用来指定建模使用的目标字段,给定的target_field值必须存在于数据集中。target_field的数据必须为离散数据。
    • <feature_field> 必填,可以是一个或者多个字段,用来指定建模使用的特征字段,给定的feature_field值必须存在于数据集中。
    • [into model_name]可选,用来将fit训练出来的模型保存成model_name以便下次调用。
    • 数据集必须不为空。

    以下算法可以用来预测离散型指标:

    逻辑回归 - Logistic Regression

    逻辑回归常用于二分类的情况,即目标变量中仅含两个变量值。比如,“是否故障”这个变量中只含有“是”和“否”两个变量值,那么判断“是否故障”这个问题即为一个二分类问题。

    语法:

    ..| fit LogisticRegression penalty=<l1 | l2(default) | elasticnet | none> solver=<newton-cg | lbfgs(default) | liblinear | sag | saga> multi_class=<auto(default) | ovr | multinomial> l1_ratio=<float> random_state=<int> <target_field> from <feature_field_1> <feature_field_2>... 
    

    参数说明:

    • penalty为正则化参数。

      • penalty=l2(默认值),使用L2正则化。当solver = newton-cg、sag或者lbfgs时,penalty只能使用L2正则化,因为L1正则化的损失函数不是连续可导的。
      • penalty=l1,使用L1正则化。
      • penalty=elasticnet,使用弹性网络正则化,是L1正则化和L2正则化的混合项,仅支持solver=saga的情况,必须配合l1_ratio一起使用。
      • penalty=none,不使用正则化,不支持solver=liblinear的情况。
    • solver为损失函数优化器。

      • solver=lbfgs(默认值),拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。只能搭配penalty=l2使用。
      • solver=newton_cg, 牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。只能搭配penalty=l2使用。
      • solver=liblinear, 使用了开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数,适用于小数据集,不支持penalty=none的情况。
      • solver=sag,随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候,sag是一种线性收敛算法,这个速度远比梯度下降法快。只能搭配penalty=l2使用。
      • solver=saga,快速梯度下降法,线性收敛的随机优化算法的的变种,适用于样本量非常大的数据集。
    • multi_class为分类方式选择参数。

      • multi_class=ovr,代表one-vs-rest。
      • multi_class=multinomial,代表many-vs-many。
      • multi_class=auto,自动选择ovr或者multinomial。如果solver=liblinear或者当数据是二分类的时候则选择ovr,否则选择multinomial。
      • 如果是二元逻辑回归,ovr和multinomial并没有任何区别。如果是多元逻辑回归,ovr不论是几元回归,都当成二元回归来处理。multinomial会从多个类中每次选两个类进行二元回归。
      • ovr分类速度快,但是结果相对略差;multinomial则相反。
    • l1_ratio为L1正则化所占的比重参数。

      • 只适用于penalty=elasticnet的场景,用来制定在混合项中,L1正则化所占的比重。
      • l1_ratio 必须为[0,1]之间的float,如果l1_ratio=0,则等于使用L2正则化,如果l1_ratio=1,则等于使用L1正则化。如果0 < l1_ratio <1,那么使用L1正则化和L2正则化的混合项。l1_ratio越大,L1正则化在混合项中所占比例越大。
    • random_state为随机数种子,用来控制样本自助抽样的随机性和特征抽样的随机性。如果给定特定值,重新跑模型的时候,可以得出同样的结果。

    决策树 - Decision Tree Classifier

    用决策树做分类任务时,从根节点开始,对样本的某一特征进行测试,根据测试结果,将样本分配到其子结点;这时,每一个子节点对应着该特征的一个取值。如此递归地对样本进行测试并分配,直至到达叶结点。分类树中,我们采用信息论中的方法,通过计算选择最佳划分点。可适用于二分类或者多分类的场景。

    语法:

    ..| fit DecisionTreeClassifier splitter=<best(default) | random> criterion=<gini(default) | entropy> max_features=<auto(default) | sqrt | log2 | None | int | float> max_depth=<int> min_samples_split=<int | float> min_samples_leaf=<int | float> max_leaf_nodes=<int> random_state=<int> <target_field> from <feature_field_1> <feature_field_2>... 
    

    参数说明:

    • splitter用来决定划分点选择标准,

      • splitter=best, 在特征的所有划分点中找出最优的划分点,适用于样本量不大的情况。
      • splitter=random,随机的在部分划分点中找局部最优的划分点,适用于样本数量非常大的情况。
    • criterion用来决定CART树做划分时对特征的评价标准。

      • criterion=gini(默认值),使用基尼系数。
      • criterion=entropy,使用信息增益。
    • max_features用来决定划分时考虑的最大特征数。

      • max_features=int,代表直接使用max_features为最大特征数量,必须在(0,n_features]之间。n_features即为建模时使用的特征字段的数量。
      • max_features=float,代表使用max_features*n_features为最大特征数量。必须使max_features*n_features向下取整的结果在(0,n_features]之间。
      • max_features=sqrt, 代表使用sqrt(n_features),即n_features的平方根值为最大特征数量。
      • max_features=log2, 代表使用log2(n_features)。
      • max_features=auto(默认值),和max_features=sqrt一样。
    • max_depth用来决定数的最大深度。若不提供,即为不设限。在数据量大以及使用的特征数量也很大的情况,可以考虑将max_depth设为[0,100]之间。

    • min_samples_split用来决定分割一个内部节点所需要的最小样本数量。如果某节点的样本数少于min_samples_split,则不会再继续划分。在数据量非常大的情况,建议增大这个值。

      • min_samples_split=int,代表直接使用min_samples_split作为最小样本数量。
      • min_samples_split=float,代表使用min_samples_split*n_samples向上取整的结果作为最小样本数量。n_samples即为建模时使用的样本数据量。
      • min_samples_split默认为2。
    • min_samples_leaf用来决定需要在叶子节点上的最小样本数量。如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。在数据量非常大的情况,建议增大这个值。

      • min_samples_leaf=int,代表直接使用min_samples_leaf作为最小样本数量。
      • min_samples_leaf=float,代表使用min_samples_leaf*n_samples向上取整的结果作为最小样本数量。n_samples即为建模时使用的样本数据量。
      • min_samples_leaf默认为1。
    • max_leaf_nodes用来决定最大叶子结点数量。若不提供,则不设限。通过限制最大叶子节点数,可以防止过拟合。在特征数量非常大的情况,建议增大这个值。

    • random_state为随机数种子,用来控制样本自助抽样的随机性和特征抽样的随机性。如果给定特定值,重新跑模型的时候,可以得出同样的结果。

    随机森林 - Random Forest Classifier

    随机森林分类器通过随机抽取样本和特征,建立多棵相互不关联的决策树,通过并行的方式获得预测结果。每棵决策树都能通过抽取的样本和特征得出一个预测结果,通过综合所有”树“的结果,得到整个“森林”的分类预测结果。可适用于二分类或者多分类的场景。在没有很明确的偏好算法的情况下,建议可以使用随机森林算法来得出初步的模型

    语法:

    ..| fit RandomForestClassifier n_estimators=<int> criterion=<gini(default) | entropy> max_features=<auto(default) | sqrt | log2 | None | int | float> max_depth=<int> min_samples_split=<int | float> min_samples_leaf=<int | float> max_leaf_nodes=<int> oob_score=<True | False(default)> random_state=<int> <target_field> from <feature_field_1> <feature_field_2>... 
    

    参数说明:

    • n_estimators用来决定建模中使用的数的数量,必须为正整数。若不设定,默认为100。

    • criterion用来决定CART树做划分时对特征的评价标准。

      • criterion=gini(默认值),使用基尼系数。
      • criterion=entropy,使用信息增益。
    • max_features用来决定划分时考虑的最大特征数。

      • max_features=int,代表直接使用max_features为最大特征数量,必须在(0,n_features]之间。n_features即为建模时使用的特征字段的数量。
      • max_features=float,代表使用max_features*n_features为最大特征数量。必须使max_features*n_features向下取整的结果在(0,n_features]之间。
      • max_features=sqrt, 代表使用sqrt(n_features),即n_features的平方根值为最大特征数量。
      • max_features=log2, 代表使用log2(n_features)。
      • max_features=auto(默认值),和max_features=sqrt一样。
    • max_depth用来决定数的最大深度。若不提供,即为不设限。在数据量大以及使用的特征数量也很大的情况,可以考虑将max_depth设为[0,100]之间。

    • min_samples_split用来决定分割一个内部节点所需要的最小样本数量。如果某节点的样本数少于min_samples_split,则不会再继续划分。在数据量非常大的情况,建议增大这个值。

      • min_samples_split=int,必须为正整数。代表直接使用min_samples_split作为最小样本数量。
      • min_samples_split=float,必须在(0, 1.0]范围之间。代表使用min_samples_split*n_samples向上取整的结果作为最小样本数量。n_samples即为建模时使用的样本数据量。
      • min_samples_split默认为2。
    • min_samples_leaf用来决定需要在叶子节点上的最小样本数量。如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。在数据量非常大的情况,建议增大这个值。

      • min_samples_leaf=int,必须为正整数。代表直接使用min_samples_leaf作为最小样本数量。
      • min_samples_leaf=float,必须在(0, 0.5]范围之间。代表使用min_samples_leaf*n_samples向上取整的结果作为最小样本数量。n_samples即为建模时使用的样本数据量。
      • min_samples_leaf默认为1。
    • max_leaf_nodes用来决定最大叶子结点数量。若不提供,则不设限。通过限制最大叶子节点数,可以防止过拟合。在特征数量非常大的情况,建议增大这个值。

    • oob_score用来决定是否采用袋外样本来评估模型的好坏。设置为True时,袋外分数反应了一个模型拟合后的泛化能力。默认为False。

    • random_state为随机数种子,用来控制样本自助抽样的随机性和特征抽样的随机性。如果给定特定值,重新跑模型的时候,可以得出同样的结果。

    Gradient Boosting 分类器 - GBDT Classifier

    GBDT分类器是一种提升集成算法,采用串行方式而非并行模式获得预测结果,每棵决策树都是一个弱学习器,通过预测前一棵决策树的误差获得一个新的弱学习器,将每一步的弱学习器串行起来,就得到了一个强学习器,提升预测精度。

    语法:

    ..| fit GradientBoostingClassifier n_estimators=<int> learning_rate=<float> subsample=<float> loss=<deviance(default) | exponential> criterion=<mse | mae | friedman_mse(default)> max_features=<auto(default) | sqrt | log2 | None | int | float> max_depth=<int> min_samples_split=<int | float> min_samples_leaf=<int | float> max_leaf_nodes=<int> random_state=<int> <target_field> from <feature_field_1> <feature_field_2>... 
    

    参数说明:

    • n_estimators用来决定建模中使用的数的数量,必须为正整数。若不设定,默认为100。

    • learning_rate用来指定收缩步长,即每个弱学习器的权重缩减系数,用于防止对负梯度方向的过拟合,提高模型的泛化能力,必须为(0,1]之间的float。默认为0.1。

    • subsample用来决定样本采样比例,必须为(0,1]之间的float。GBDT算法采用无放回的采样方式,如果subsample=1,则全部样本都使用,等于没有使用子采样。如果取值小于1,则只有一部分样本会去做GBDT的决策树拟合。默认为1。

    • loss用来决定损失函数。

      • loss=deviance,使用对数似然损失函数。
      • loss=exponential, 使用指数损失函数,模型退化为Adaboost。
    • criterion用来决定CART树做划分时对特征的评价标准。

      • criterion=mse,使用均方误差。
      • criterion=mae, 使用平均绝对误差。
      • criterion=friedman_mse(默认值),使用经过Friedman值优化过的均方误差。
    • max_features用来决定划分时考虑的最大特征数。

      • max_features=int,代表直接使用max_features为最大特征数量,必须在(0,n_features]之间。n_features即为建模时使用的特征字段的数量。
      • max_features=float,代表使用max_features*n_features为最大特征数量。必须使max_features*n_features向下取整的结果在(0,n_features]之间。
      • max_features=sqrt, 代表使用sqrt(n_features),即n_features的平方根值为最大特征数量。
      • max_features=log2, 代表使用log2(n_features)。
      • max_features=auto(默认值),和max_features=sqrt一样。
    • max_depth用来决定数的最大深度。若不提供,即为不设限。在数据量大以及使用的特征数量也很大的情况,可以考虑将max_depth设为[0,100]之间。

    • min_samples_split用来决定分割一个内部节点所需要的最小样本数量。如果某节点的样本数少于min_samples_split,则不会再继续划分。在数据量非常大的情况,建议增大这个值。

      • min_samples_split=int,代表直接使用min_samples_split作为最小样本数量。
      • min_samples_split=float,代表使用min_samples_split*n_samples向上取整的结果作为最小样本数量。n_samples即为建模时使用的样本数据量。
      • min_samples_split默认为2。
    • min_samples_leaf用来决定需要在叶子节点上的最小样本数量。如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。在数据量非常大的情况,建议增大这个值。

      • min_samples_leaf=int,代表直接使用min_samples_leaf作为最小样本数量。
      • min_samples_leaf=float,代表使用min_samples_leaf*n_samples向上取整的结果作为最小样本数量。n_samples即为建模时使用的样本数据量。
      • min_samples_leaf默认为1。
    • max_leaf_nodes用来决定最大叶子结点数量。若不提供,则不设限。通过限制最大叶子节点数,可以防止过拟合。在特征数量非常大的情况,建议增大这个值。

    • random_state为随机数种子,用来控制样本自助抽样的随机性和特征抽样的随机性。如果给定特定值,重新跑模型的时候,可以得出同样的结果。

    XGBoost分类器 - XGBoost Classifier

    XGBoost分类器是GBDT分类器的一种优化算法,通过添加正则化、并行处理、内置交叉验证等方法加快计算速度,优化模型表现。

    语法:

    ..| fit XGBClassifier booster=<gbree(default) | gblinear> eta=<float> min_child_weight=<int> max_depth=<int> gamma=<int> subsample=<float> objective=<"binary:logistic" | "binary:logitraw" |  "multi:softmax" | "multi:softprob"> eval_metric=<logloss | error | merror | mlogloss | auc> num_class=<int> lambda=<float> alpha=<float> random_state=<int> <target_field> from <feature_field_1> <feature_field_2>... 
    
    

    参数说明:

    • booster用来选择迭代计算的模型。

      • booster=gbtree(默认值),使用基于树的模型进行提升计算
      • booster=gblinear,使用线性模型进行提升计算
    • eta用来指定收缩步长,即每个弱学习器的权重缩减系数,用于防止对负梯度方向的过拟合,提高模型的泛化能力,必须为(0,1]之间的float。eta通过缩减特征的权重使提升计算过程更加保守。默认为0.3。

    • min_child_weight

      • 在booster=gbtree的情况下,用来指定子节点中最小的样本权重和,用于避免过拟合。如果一个叶子节点的样本权重和小于min_child_weight则拆分过程结束。
      • 在booster=gblinear的情况下,这个参数是指建立每个模型所需要的最小样本数。
      • 默认值为1。
    • max_depth用来指定数的最大深度,若不提供,则默认值为6。

    • gamma用来指定节点分裂所需的最小损失函数下降值。在节点分裂时,只有分裂后损失函数的值下降了,才会分裂这个节点。这个参数的值越大,算法越保守。默认为0。

    • subsample用来决定样本采样比例,必须为(0,1]之间的float。算法采用无放回的采样方式,如果subsample=1,则全部样本都使用,等于没有使用子采样。如果取值小于1,则只有一部分样本会去做决策树拟合。默认为1。

    • objective用来指定学习任务及相应的学习目标。

      • objective=binary:logistic,二分类的逻辑回归问题,输出为概率。
      • objective=binary:logitraw,二分类的逻辑回归问题,输出的结果为wTx。
      • objective=multi:softmax,采用softmax目标函数处理多分类问题,同时需要设置参数num_class(类别个数)
      • objective=multi:softprob,和softmax一样,但是输出的是ndata * nclass的向量。
      • 在二分类的场景下,objective默认为“binary:logistic",在多分类的场景下,objective默认为“multi:softprob"。如果设置的学习任务和实际数据有矛盾(例如在多分类问题的情况下,设置objective=“binary:logistic”),XGBClassifier会自动将objective调整为符合数据情况的默认值(在之前的例子中,会把object自动更改为“multi:softprob”)。
    • eval_metric用来指定校验数据所需要的评价指标,不同的目标函数会支持不同的评价指标。

      • eval_metric=logloss, 负对数似然函数值
      • eval_metric=error, 二分类错误率(阈值为0.5)
      • eval_metric=merror, 多分类错误率
      • eval_metric=mlogloss, 多分类logloss损失函数
      • eval_metric=auc,曲线下面积
      • 在二分类的场景下,eval_metric默认为error,在多分类的场景下,eval_metric默认为merror
    • num_class用来指定类别个数。当objective选择multi的时候需要设置该参数

    • lambda用来指定L2正则化的惩罚系数,可以用来降低过拟合。

    • alpha用来指定L1正则化的惩罚系数,这样有助于提升计算的速度。

    • random_state为随机数种子,用来控制样本自助抽样的随机性和特征抽样的随机性。如果给定特定值,重新跑模型的时候,可以得出同样的结果。

    以上内容是否对您有帮助?
  • Qvm free helper
    Close