2017-06-08 23 views
1

私は、LinearSVCを使用してデータセットに対してk折りたたみ検証を実行したいとしましょう。データの標準化はどのように行いますか?sklearnのcross_val_score()でデータを標準化する方法

私が読んだベストプラクティスは、トレーニングデータに標準化モデルを作成し、このモデルをテストデータに適用することです。 1は、簡単なtrain_test_splitを(使用しています

)我々だけで行うことができますように、これは簡単です:

X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y) 

clf = svm.LinearSVC() 

scalar = StandardScaler() 
X_train = scalar.fit_transform(X_train) 
X_test = scalar.transform(X_test) 

clf.fit(X_train, y_train) 
predicted = clf.predict(X_test) 

はどのように1がk倍クロスバリデーションをしながら、データの標準化については行くだろうか?この問題は、すべてのデータポイントがトレーニング/テスト用であるため、cross_val_score()の前にすべてを標準化することができないという問題が原因です。クロスバリデーションごとに異なる標準化が必要なのではないでしょうか?

文書では、関数内で標準化が行われているとは言いません。私はSOLですか?

EDIT:この投稿は、超便利です:Python - What is exactly sklearn.pipeline.Pipeline?

答えて

2

あなたは)プロセスの両方を兼ね備えた後、cross_val_score(にそれを送信するためにPipelineを使用することができます。

fit()がパイプラインで呼び出されると、すべての変換が順番に適合し、データが変換され、変換されたデータが最後の推定値を使用して適合されます。 predict()(パイプラインの最後のオブジェクトがエスティメータである場合にのみ使用可能、それ以外の場合はtransform())の間は、データに変換を適用し、最終的なエスティメータで予測します。このよう

scalar = StandardScaler() 
clf = svm.LinearSVC() 

pipeline = Pipeline([('transformer', scalar), ('estimator', clf)]) 

cv = KFold(n_splits=4) 
scores = cross_val_score(pipeline, X, y, cv = cv) 

はそれをよりよく理解するために、パイプラインの様々な例をチェックアウト:

があれば何の疑いも気軽に。

関連する問題