簡體   English   中英

為什么fit_transform在此sklearn Pipeline示例中不起作用?

[英]Why doesn't fit_transform work in this sklearn Pipeline example?

我是sklearn Pipeline的新手,並遵循示例代碼。 我在其他示例中看到我們可以執行pipeline.fit_transform(train_X) ,因此我在此處的pipeline.fit_transform(X)上對管道進行了同樣的嘗試,但它給了我一個錯誤

“ return self.fit(X,** fit_params).transform(X)

TypeError:fit()恰好接受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_)

在上面的示例中會出現錯誤,因為您還需要將標簽傳遞到管道。 您應該正在調用pipeline.fit_transform(X,y) pipeline的最后一步是分類器, SVC ,分類器的fit方法還需要將標簽作為必需參數。 所有分類器的fit方法也需要標簽,因為分類算法使用這些標簽來訓練分類器中的權重。

同樣,即使刪除SVC ,也仍然會出錯,因為SelectKBest類的fit方法也需要Xy

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM