2016-06-27 2 views
0

Я новичок в sklearn Pipeline и следую примеру кода. Я видел в других примерах, что мы можем сделать pipeline.fit_transform(train_X), так что я попробовал то же самое на трубопроводе здесь pipeline.fit_transform(X), но он дал мне .transform ошибкуПочему в файле sklearn Pipeline не работает функция fit_transform?

"Возвращение self.fit (X, ** fit_params) (X)

TypeError: годный() занимает ровно 3 аргумента (2 дано)»

Если удалить SVM часть и определил, как трубопровод pipeline = Pipeline([("features", combined_features)]), я до сих пор видел ошибку.

Кто знает, почему fit_transform не работает здесь?

from sklearn.pipeline import Pipeline, FeatureUnion 
from sklearn.grid_search import GridSearchCV 

from sklearn.svm import SVC 
from sklearn.datasets import load_iris 
from sklearn.decomposition import PCA 
from sklearn.feature_selection import SelectKBest 

iris = load_iris() 

X, y = iris.data, iris.target 

# This dataset is way to high-dimensional. Better do PCA: 
pca = PCA(n_components=2) 

# Maybe some original features where good, too? 
selection = SelectKBest(k=1) 

# Build estimator from PCA and Univariate selection: 

combined_features = FeatureUnion([("pca", pca), ("univ_select", selection)]) 

# Use combined features to transform dataset: 
X_features = combined_features.fit(X, y).transform(X) 

svm = SVC(kernel="linear") 

# Do grid search over k, n_components and C: 

pipeline = Pipeline([("features", combined_features), ("svm", svm)]) 

param_grid = dict(features__pca__n_components=[1, 2, 3], 
        features__univ_select__k=[1, 2], 
        svm__C=[0.1, 1, 10]) 

grid_search = GridSearchCV(pipeline, param_grid=param_grid, verbose=10) 
grid_search.fit(X, y) 
print(grid_search.best_estimator_) 
+0

В примерах, которые я вижу, они всегда предоставляют также некоторые параметры для 'GridSearchCV'. Может быть, это те, которых нет? – Bakuriu

+0

В какой строке это исключение происходит? – miindlek

+0

Это произошло, если я запустил 'конвейер.fit_transform (X)' после 'pipe = Pipeline ([(" features ", combination_features), (" svm ", svm)]) –

ответ

0

В приведенном выше примере вы получите сообщение об ошибке, поскольку вам также необходимо передать этикетки в ваш конвейер. Вы должны позвонить pipeline.fit_transform(X,y). Последним шагом в вашем pipeline является классификатор SVC, а метод классификатора fit также требует, чтобы метки были обязательным аргументом. Метод fit всех классификаторов также требует ярлыков, потому что алгоритмы классификации используют эти метки для обучения весов в вашем классификаторе.

Точно так же, даже если вы удалите SVC, вы получите сообщение об ошибке, потому что fit метод SelectKBest класса также требует как X и y.