StandardScaler make_pipeline

StandardScaler with make_pipeline

如果我使用 make_pipeline,我是否还需要使用 fittransform 函数来拟合我的模型和转换,或者它会自己执行这些函数?
此外,StandardScaler 是否也执行归一化或仅执行缩放?
解释代码:我想应用 PCA,然后用 svm 应用规范化。

pca = PCA(n_components=4).fit(X) 
X = pca.transform(X)

# training a linear SVM classifier 5-fold
from sklearn.svm import SVC
from sklearn.model_selection import cross_val_score

clf = make_pipeline(preprocessing.StandardScaler(), SVC(kernel = 'linear'))
   scores = cross_val_score(clf, X, y, cv=5)

如果我不在下面的代码中使用 fit 函数,我也会感到困惑:

from sklearn.svm import SVC
from sklearn.model_selection import cross_val_score

clf = SVC(kernel = 'linear', C = 1)
scores = cross_val_score(clf, X, y, cv=5)

StandardScaler 同时进行归一化和缩放。

cross_val_score() 将为您拟合(转换)您的数据集,因此您无需显式调用它。

一种更常见的方法是将所有步骤(StandardScale、PCA、SVC)放在一个管道中,并使用 GridSearchCV 调整超参数和选择最佳参数(估计器)。

演示:

pipe = Pipeline([
        ('scale, StandardScaler()),
        ('reduce_dims', PCA(n_components=4)),
        ('clf', SVC(kernel = 'linear', C = 1))
])

param_grid = dict(reduce_dims__n_components=[4,6,8],
                  clf__C=np.logspace(-4, 1, 6),
                  clf__kernel=['rbf','linear'])

grid = GridSearchCV(pipe, param_grid=param_grid, cv=3, n_jobs=1, verbose=2)
grid.fit(X_train, y_train)
print(grid.score(X_test, y_test))