如果我使用make_pipeline
,我是否仍需要使用fit
和transform
函数来适应我的模型和转换,否则它将自行执行这些功能?
此外,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)
答案 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))