AI資格ドリル
資格を選ぶ

用語比較

scikit-learnの変換器と推定器の違い|transformとpredictの使い分け(Python3データ分析)

scikit-learnの推定器は fit で学習し、predict で新しいデータの目的値を予測します。変換器には predict メソッドがなく、新しく変換した特徴量の行列 X を返す transform メソッドを持ちます。

どちらも同じ API に従い、BaseEstimator クラスを継承しています。Pipeline で、前処理の変換器と最後の予測器を1つの推定器のようにまとめられます。

この記事の根拠と出典

各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。

推定器(予測器)と変換器(前処理器)の要点

推定器(予測器)

fit で学習し、predict で新しいデータの目的値を予測する。公式の例は RandomForestClassifier で、再学習は不要。

変換器(前処理器)

predict ではなく transform を持ち、変換した特徴量の行列 X を返す。公式の例は StandardScaler で、fit したあと transform する。

違いを表で確認

比較軸推定器(予測器)変換器(前処理器)
主なメソッドfit と predictfit と transform(predict は持たない)
返すもの新しいデータの目的値の予測(例: クラスの array)新しく変換した特徴量の行列 X
公式の例RandomForestClassifier(random_state=0)。X=[[1,2,3],[11,12,13]]、y=[0,1] で fit し、predict([[4,5,6],[14,15,16]]) が array([0, 1])StandardScaler()。X=[[0,15],[1,-10]] に fit したあと transform すると array([[-1., 1.],[1., -1.]])
処理の流れでの位置最後の予測器(final predictor)。目的値を予測する前処理の段階。データを変換または補完する
特徴量ごとに処理を変えたいとき該当しない。予測器は最後に置くColumnTransformer を使う

Python3エンジニア認定データ分析試験の学習に使う書籍(Amazon)

PR

ほかの資格を含む参考書・問題集の一覧を見る

どこで迷っているかを切り分ける

01

StandardScaler に predict を呼んでエラーになった人

変換器には predict メソッドがありません。StandardScaler は fit したあと transform でデータを変換するもので、予測するのは LogisticRegression などの推定器です。

02

前処理とモデルを別々に書いて、手順が増えてしまった人

Pipeline を使うと、変換器と推定器を1つのオブジェクトにまとめられます。パイプラインは通常の推定器と同じ API を持つので、fit と predict で使えます。

03

テストデータの情報が学習に混ざるのを避けたい人

公式は、パイプラインを使うとデータリーク(テストデータの一部の情報が学習データに漏れること)を防げると説明しています。

具体例で使い分ける

例 1

推定器: fit のあと predict で予測する

公式の例のとおり、RandomForestClassifier(random_state=0) を、X=[[1,2,3],[11,12,13]]、y=[0,1] で fit します。

  • 推定器は fit メソッドでデータに当てはめます。
  • 当てはめたあと、predict([[4,5,6],[14,15,16]]) で新しいデータのクラスを予測すると、array([0, 1]) になります。
  • 公式は、当てはめ済みの推定器は再学習なしで新しいデータの目的値を予測できると説明しています。

結論: 推定器は predict で目的値を返します。

例 2

変換器: fit のあと transform で変換する

公式の例のとおり、X=[[0,15],[1,-10]] を StandardScaler().fit(X).transform(X) で変換します。

  • StandardScaler は変換器で、predict ではなく transform を持ちます。
  • 結果は array([[-1., 1.],[1., -1.]]) で、新しく変換した行列 X が返ります。
  • 返るのは目的値の予測ではなく、変換後の特徴量です。

結論: 変換器は transform で変換後の X を返します。

例 3

Pipeline で変換器と推定器をつなぐ

公式の例のとおり、make_pipeline(StandardScaler(), LogisticRegression()) でパイプラインを作り、Iris データを train_test_split(X, y, random_state=0) で学習用とテスト用に分けます。

  • pipe.fit(X_train, y_train) で、前処理の変換器と最後の推定器をまとめて学習します。
  • パイプラインは通常の推定器と同じ API を持つので、pipe.predict(X_test) で予測できます。
  • accuracy_score(pipe.predict(X_test), y_test) は 0.97... になります。

結論: Pipeline は、変換器と推定器を1つの推定器のように扱えます。

問題文から答えを選ぶ手順

  1. 1

    返したいものを確認する

    目的値の予測なら推定器の predict、変換した特徴量の行列なら変換器の transform です。

  2. 2

    predict の有無を確認する

    変換器には predict メソッドがありません。predict を持つのは推定器(予測器)です。

  3. 3

    並びを確認する

    典型的なパイプラインは、データを変換または補完する前処理の段階と、目的値を予測する最後の予測器でできています。

試験での見分け方

  • 1変換器には predict メソッドがなく、新しく変換した行列 X を返す transform メソッドがある。
  • 2当てはめ済みの推定器は、再学習なしで predict により新しいデータの目的値を予測できる。
  • 3変換器と推定器は同じ API に従い、BaseEstimator クラスを継承している。
  • 4Pipeline は通常の推定器と同じ API を持ち、fit と predict で使える。データリークを防げる。
  • 5特徴量ごとに違う変換をしたいときは ColumnTransformer を使う。

誤答しやすい選択肢

StandardScaler で predict を呼べると考える

修正: 変換器には predict メソッドがありません。StandardScaler は fit のあと transform を使います。

transform が目的値を返すと考える

修正: transform が返すのは新しく変換した特徴量の行列 X です。目的値を返すのは推定器の predict です。

Pipeline は変換器と推定器で API が別になると考える

修正: 公式は、パイプラインは通常の推定器と同じ API を持ち、fit と predict で使えると説明しています。

確認問題

Q1変換器が持たないメソッドは、predict と transform のどちらか?

答え: predict

変換器には predict メソッドがなく、新しく変換した行列 X を返す transform メソッドがあります。

Q2StandardScaler().fit(X).transform(X) を X=[[0,15],[1,-10]] に行った結果は?

答え: array([[-1., 1.],[1., -1.]])

公式の例の結果です。変換器は変換後の特徴量の行列を返します。

Q3特徴量ごとに異なる変換を適用したいときに使うものは?

答え: ColumnTransformer

公式は、特徴量ごとに別の変換が必要な場面のために ColumnTransformer が設計されていると説明しています。

Q4Pipeline を使うと、テストデータの情報が学習データに漏れる問題をどうできるか?

答え: データリークを防げる

公式は、パイプラインを使うとデータリークを防げると説明しています。

到達チェック

  • 推定器の fit と predict の役割を説明できる
  • 変換器が predict ではなく transform を持つことを言える
  • StandardScaler の公式の例の結果を答えられる
  • Pipeline が通常の推定器と同じ API を持つことを説明できる

同じ資格で次に知りたいこと

よくある質問

Qscikit-learnの変換器と推定器の違いは?

A

推定器は fit のあと predict で目的値を予測します。変換器には predict がなく、変換した特徴量の行列を返す transform を持ちます。どちらも同じ API で、BaseEstimator を継承しています。

QPipeline は何のために使いますか?

A

変換器と推定器を1つのオブジェクトにまとめ、fit と predict で使えるようにします。公式は、データリークを防げることも説明しています。

Q特徴量ごとに別の前処理をしたいときは?

A

ColumnTransformer を使います。

Qデータ分析試験の範囲?

A

本サイトの第6章scikit-learnの「変換器とパイプライン」で扱います。出題の形式や範囲は、受験前に公式の案内で確認してください。

次に見る比較

執筆: AI資格ドリル編集部(運営者情報を見る)