【发布时间】: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
标签: scikit-learn pipeline pca logistic-regression predict