在 sklearn 中计算管道逻辑回归 predict_proba
Posted
技术标签:
【中文标题】在 sklearn 中计算管道逻辑回归 predict_proba【英文标题】:Computing Pipeline logistic regression predict_proba in sklearn 【发布时间】:2017-07-21 10:39:40 【问题描述】:我有一个包含 3 个特征和 3 个类的数据框,我将它们分成 X_train、Y_train、X_test 和 Y_test,然后使用 PCA、StandardScaler 和 Logistic Regression 运行 Sklearn 的管道。我希望能够在不使用 predict_proba 的情况下直接从 LR 权重和原始数据计算概率,但不知道如何,因为我不确定管道如何通过 PCA 和 StandardScaler 将 X_test 管道传输到逻辑回归。如果不能使用 PCA 和 StandardScaler 的拟合方法,这是否现实?任何帮助将不胜感激!
到目前为止,我有:
pca = PCA(whiten=True)
scaler = StandardScaler()
logistic = LogisticRegression(fit_intercept = True, class_weight = 'balanced', solver = sag, n_jobs = -1, C = 1.0, max_iter = 200)
pipe = Pipeline(steps = [ ('pca', pca), ('scaler', scaler), ('logistic', logistic) ]
pipe.fit(X_train, Y_train)
predict_probs = pipe.predict_proba(X_test)
coefficents = pipe.steps[2][1].coef_ (3 by 30)
intercepts = pipe.steps[2][1].intercept_ (1 by 3)
【问题讨论】:
X_train 和 X_test 必须经过完全相同的转换才能使预测结果正确。使用pipe.predict_proba(X_test)
有什么问题?
如果您担心在pipe
,如果您发送X_test
、pca
和scaler
将再次适合然后别担心。只有transform
会在其中被调用,predict_probas
在logistic
上会被调用。
pipe.predict_proba(X_test) 的问题是新的测试数据将实时手动输入,所以我想我只需要一种方法来进行转换。当 PCA 和 scaler 转换 X_test 时,它只是使用来自 X_train 的拟合参数,对吧?
是的。管道的行为类似于任何其他估算器。你 fit
在训练数据上,只在测试数据上调用 predict
或 transform
。当您在管道上调用 predict_proba
时,除最后一个之外的所有估计器将仅调用 transform
,然后进一步传递数据。最后一个会打电话给predict_proba
【参考方案1】:
这也是我想不通的问题,感谢库马尔的回答。 我认为管道会导致 x_test 的新转换,但是当我尝试运行由 StandardScalar 和 LogisticRegression 组成的 Pipeline >,并使用 StandardScalar 和 LogisticRegression 运行我自己定义的函数,我发现 Pipeline 实际上使用了 transform由 x_train 安装。所以不用担心使用管道,它确实是一个方便实用的机器学习工具!
【讨论】:
以上是关于在 sklearn 中计算管道逻辑回归 predict_proba的主要内容,如果未能解决你的问题,请参考以下文章