带有make_pipeline

时间:2018-04-21 12:50:21

标签: machine-learning scikit-learn svm normalization pca

如果我使用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)

1 个答案:

答案 0 :(得分:2)

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))