Java 类名:com.alibaba.alink.operator.batch.finance.ConstrainedLogisticRegressionTrainBatchOp
Python 类名:ConstrainedLogisticRegressionTrainBatchOp
名称 | 中文名称 | 描述 | 类型 | 是否必须? | 取值范围 | 默认值 |
---|---|---|---|---|---|---|
labelCol | 标签列名 | 输入表中的标签列名 | String | ✓ | ||
positiveLabelValueString | 正样本 | 正样本对应的字符串格式。 | String | ✓ | ||
constOptimMethod | 优化方法 | 求解优化问题时选择的优化方法 | String | “SQP”, “Barrier”, “LBFGS”, “Newton”, “ALM” | “SQP” | |
constraint | 约束 | 约束 | String | "" | ||
epsilon | 收敛阈值 | 迭代方法的终止判断阈值,默认值为 1.0e-6 | Double | x >= 0.0 | 1.0E-6 | |
featureCols | 特征列名数组 | 特征列名数组,默认全选 | String[] | 所选列类型为 [BIGDECIMAL, BIGINTEGER, BYTE, DOUBLE, FLOAT, INTEGER, LONG, SHORT] | null | |
l1 | L1 正则化系数 | L1 正则化系数,默认为0。 | Double | x >= 0.0 | 0.0 | |
l2 | L2 正则化系数 | L2 正则化系数,默认为0。 | Double | x >= 0.0 | 0.0 | |
maxIter | 最大迭代步数 | 最大迭代步数,默认为 100 | Integer | x >= 1 | 100 | |
standardization | 是否正则化 | 是否对训练数据做正则化,默认true | Boolean | true | ||
vectorCol | 向量列名 | 向量列对应的列名,默认值是null | String | 所选列类型为 [DENSE_VECTOR, SPARSE_VECTOR, STRING, VECTOR] | null | |
weightCol | 权重列名 | 权重列对应的列名 | String | 所选列类型为 [BIGDECIMAL, BIGINTEGER, BYTE, DOUBLE, FLOAT, INTEGER, LONG, SHORT] | null | |
withIntercept | 是否有常数项 | 是否有常数项,默认true | Boolean | true |
约束有larger than value, larger than feature, less than value, less than feature, equal to feature, scale to feature这六种形式。
约束由ConstraintBetweenFeatures类控制,写完ConstraintBetweenFeatures实例以后存放于FeatureConstraint中。
约束可以通过constraint参数传入,也可以在linkFrom中通过表传入。但推荐直接通过constraint参数传入。
约束以如下格式传入,下面表示约束的意义为:
第2列的上界为7;第1列下界为3;第1列和第6列相等;第3列是第4列的7倍;第4列小于等于第5列;第5列大于等于第6列。
{“featureConstraint”:[],“constraintBetweenFeatures”:{“name”:“constraintBetweenFeatures”,“UP”:2,7.0,“LO”:1,3.0,“=”:[1,6],“%”:[3,4,7.0],“<”:[4,5],“>”:[5,6]}}
如果想通过feature colName的方式来表示约束,则以如下形式:
以下表示的是f1列下界是0,1.814,f1列大于等于f0列。
{“featureConstraint”:[],“constraintBetweenFeatures”:{“name”:“constraintBetweenFeatures”,“UP”:[],“LO”:"f1",0,1.814,“=”:[],“%”:[],“<”:"f0",0,"f1",0,“>”:[]}}
from pyalink.alink import * import pandas as pd useLocalEnv(1) df = pd.DataFrame([ [1, 1, 1, 1, 2], [1, 1, 0, 1, 2], [1, 0, 1, 1, 2], [1, 0, 1, 1, 2], [0, 1, 1, 0, 0], [0, 1, 1, 0, 0], [0, 1, 1, 0, 0], [0, 1, 1, 0, 0] ]) data = BatchOperator.fromDataframe(df, schemaStr="f0 int, f1 int, f2 int, f3 int, label bigint") constraint = pd.DataFrame([ ['{"featureConstraint":[],"constraintBetweenFeatures":{"name":"constraintBetweenFeatures","UP":[],"LO":[],"=":[["f1",0,1.814],["f0",0,0.4]],"%":[],"<":[],">":[["f3",0,"f2",0]]},"countZero":null,"elseNullSave":null}'] ]) constraintData = BatchOperator.fromDataframe(constraint, schemaStr='data string') features = ["f0","f1","f2","f3"] lr = ConstrainedLogisticRegressionTrainBatchOp()\ .setLabelCol("label")\ .setFeatureCols(features)\ .setConstOptimMethod("sqp")\ .setPositiveLabelValueString("2") model = lr.linkFrom(data,constraintData) predict = LogisticRegressionPredictBatchOp()\ .setPredictionCol("lrpred")\ .setReservedCols(["label"]) predict.linkFrom(model, data).print()
label | lrpred |
---|---|
2 | 2 |
2 | 2 |
2 | 2 |
2 | 2 |
0 | 0 |
0 | 0 |
0 | 0 |
0 | 0 |