用語比較
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 と predict | fit と 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どこで迷っているかを切り分ける
StandardScaler に predict を呼んでエラーになった人
変換器には predict メソッドがありません。StandardScaler は fit したあと transform でデータを変換するもので、予測するのは LogisticRegression などの推定器です。
前処理とモデルを別々に書いて、手順が増えてしまった人
Pipeline を使うと、変換器と推定器を1つのオブジェクトにまとめられます。パイプラインは通常の推定器と同じ API を持つので、fit と predict で使えます。
テストデータの情報が学習に混ざるのを避けたい人
公式は、パイプラインを使うとデータリーク(テストデータの一部の情報が学習データに漏れること)を防げると説明しています。
具体例で使い分ける
例 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
返したいものを確認する
目的値の予測なら推定器の predict、変換した特徴量の行列なら変換器の transform です。
- 2
predict の有無を確認する
変換器には predict メソッドがありません。predict を持つのは推定器(予測器)です。
- 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 を持つことを説明できる
関連ページで確認する
同じ資格で次に知りたいこと
- fit_transformとtransformの違い|テストデータにfitしない理由(Python3データ分析)
scikit-learnのfit_transformとtransformの違いを、学習用とテスト用の使い分け、データリーク、Pipelineで整理します。scikit-learn公式で照合した例と確認問題つき。
- NumPyのビューとコピーの違い|スライスは元の配列と共有、copyは共有しない(Python3データ分析)
NumPyのビュー(view)とコピー(copy)の違いを、データの共有、base属性、スライス、deep copyの動きで整理します。NumPy公式のQuickstartで照合した、スライスへの代入で元の配列が変わる例と確認問題つき。
- astypeとto_numericの違い|変換できない値の扱いとerrors(pandas・Python3データ分析)
pandasのastypeとto_numericの違いを、変換できる型、変換できない文字列の扱い(errors='coerce')、downcastで整理します。pandas公式で照合した例と確認問題つき。
よくある質問
Qscikit-learnの変換器と推定器の違いは?
推定器は fit のあと predict で目的値を予測します。変換器には predict がなく、変換した特徴量の行列を返す transform を持ちます。どちらも同じ API で、BaseEstimator を継承しています。
QPipeline は何のために使いますか?
変換器と推定器を1つのオブジェクトにまとめ、fit と predict で使えるようにします。公式は、データリークを防げることも説明しています。
Q特徴量ごとに別の前処理をしたいときは?
ColumnTransformer を使います。
Qデータ分析試験の範囲?
本サイトの第6章scikit-learnの「変換器とパイプライン」で扱います。出題の形式や範囲は、受験前に公式の案内で確認してください。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: AI資格ドリル編集部(運営者情報を見る)
