使用 .predict() 方法时,sklearn 中的管道对象是否会转换测试数据?

use*_*r42 9 python machine-learning scikit-learn

当我使用管道对象时,

  1. 当我使用该方法时,管道对象是否适合并转换训练数据.fit()?或者我应该使用该.fit_transform()方法?两者有什么区别?

  2. .predict()当我在测试数据上使用该方法时,管道对象是否会转换测试数据然后才进行预测?也就是说,我应该.transform()在使用该方法之前使用该方法转换测试数据吗.predict()

这是我的代码:

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.feature_selection import SelectKBest, f_classif
from sklearn.decomposition import PCA
from sklearn.tree import DecisionTreeClassifier



#creating some data
X, y = np.ones((50, 1)), np.hstack(([0] * 45, [1] * 5))

#creating the pipeline
steps = [('scaler', StandardScaler()), ('SelectKBest', SelectKBest(f_classif, k=3)), ('pca', PCA(n_components=2)), ('DT', DecisionTreeClassifier(random_state=0))]
model = Pipeline(steps=steps)

#splitting the data
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.33, random_state=42)

model.fit(X_train,y_train)

model.predict(X_test)
Run Code Online (Sandbox Code Playgroud)

Ant*_*uis 13

Pipeline 对象公开了其最后一步的方法。由于您的最后一步是 a DecisionTreeClassifier(估计器),因此管道不会有 a但估计器函数,fit_transform()例如、等。fit()predict()score()

使用时fit(),管道将调用fit_transform()所有变压器,最后fit()调用估计器。

使用predict()管道时将transform()所有数据然后调用predict()估计器。

如图所示:(图片来自 Raschka, Sebastian。Python 机器学习。英国伯明翰:Packt Publishing,2015。打印)

在此输入图像描述

  • 抱歉,我用来源更新了我的答案。 (2认同)
  • 进行交叉验证时怎么样?验证折叠会进行 fit_transformed 还是仅进行转换? (2认同)