gpt4 book ai didi

python - 从 scikit-learn 中的 pyspark 复制逻辑回归模型

转载 作者:行者123 更新时间:2023-11-28 20:36:42 28 4
gpt4 key购买 nike

问题:在给定默认参数值的情况下,pyspark 和 scikit-learn 中逻辑回归模型的默认实现(未设置自定义参数)似乎会产生不同的结果。

在我看来,两种模型实现(在 pyspark 和 scikit 中)都不具有相同的参数,因此我不能简单地匹配 scikit 中的参数以适应 pyspark 中的参数。有没有关于如何在默认配置上匹配两个模型的解决方案?

参数Scikit模型(默认参数):

`LogisticRegression(
C=1.0,
class_weight=None,
dual=False,
fit_intercept=True,
intercept_scaling=1,
max_iter=100,
multi_class='ovr',
n_jobs=1,
penalty='l2',
random_state=None,
solver='liblinear',
tol=0.0001,
verbose=0,
warm_start=False`

参数 Pyspark 模型(默认参数):

LogisticRegression(self, 
featuresCol="features",
labelCol="label",
predictionCol="prediction",
maxIter=100,
regParam=0.0,
elasticNetParam=0.0,
tol=1e-6,
fitIntercept=True,
threshold=0.5,
thresholds=None,
probabilityCol="probability",
rawPredictionCol="rawPrediction",
standardization=True,
weightCol=None,
aggregationDepth=2,
family="auto")

非常感谢!

最佳答案

pyspark的LR使用了ElasticNet正则化,是L1和L2项的加权和;权重是 elasticNetParam。因此,使用 elasticNetParam=0 可以得到 L2 正则化,regParam 是 L2 正则化系数;使用 elasticNetParam=1 得到 L1 正则化,regParam 是 L1 正则化系数。 sklearn LogisticRegression 中的 CregParam 的倒数,即 regParam = 1/C

此外,默认的训练方法也不同;您可能需要在 sklearn LogisticRegression 中设置 solver='lbfgs' 以使训练方法更加相似。不过它只适用于 L2。

如果您需要 ElasticNet 正则化(即 0 < elasticNetParam < 1),则 sklearn 在 SGDClassifier 中实现它- 设置 loss='elasticnet'alpha 将类似于 regParam(并且您不必像 C 那样反转它), l1_ratio 将是 elasticNetParam

sklearn 不直接提供阈值,但您可以使用 predict_proba 代替预测,然后自己应用阈值。

免责声明:我的 spark 经验为零,答案基于 sklearn 和 spark 文档。

关于python - 从 scikit-learn 中的 pyspark 复制逻辑回归模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44612873/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com