0Pricing
Python Academy · レッスン

scikit-learn API: fit、transform、predict

推定器インターフェースと、訓練データとテストデータに分けるワークフローを理解します。

「scikit-learn API: fit、transform、predict」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。

scikit-learnとは

scikit-learnは、古典的な機械学習で広く使われているPythonライブラリです。一貫したAPIを提供しており、すべてのestimatorが fit() を備え、多くのestimatorが predict() または transform() を備えています。

from sklearn.linear_model import LinearRegression
import numpy as np

X = np.array([[1],[2],[3],[4],[5]])
y = np.array([2, 4, 6, 8, 10])

model = LinearRegression().fit(X, y)
print(model.predict([[6]]))   # [12.]

訓練データとテストデータの分割

モデルが未知のデータにどの程度汎化できるかを評価するため、必ず訓練前にデータを分割します。

from sklearn.model_selection import train_test_split
import numpy as np

X = np.random.rand(100, 5)
y = (X[:,0] > 0.5).astype(int)

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)
print(X_train.shape, X_test.shape)   # (80,5) (20,5)

fit() — 訓練

estimator.fit(X, y) は、X(特徴量)とy(ラベル)を使ってモデルを訓練します。教師なし学習の手法では、Xだけを渡します。

from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification

X, y = make_classification(n_samples=200, random_state=0)
model = LogisticRegression()
model.fit(X, y)
print("Trained:", model.classes_)

predict()とpredict_proba()

predict(X) はクラスラベルを返し、predict_proba(X) は分類器のクラス確率を返します。

from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification

X, y = make_classification(random_state=0)
model = LogisticRegression().fit(X, y)

print(model.predict(X[:5]))          # [0 1 0 ...]
print(model.predict_proba(X[:2]))    # [[0.7 0.3] ...]

Transformer: fitとtransform

Transformer(スケーラーやエンコーダー)は fit(X) + transform(X) を備えています。必ず訓練データだけでfitしてから、訓練データとテストデータの両方をtransformします。

from sklearn.preprocessing import StandardScaler
import numpy as np

X_train = np.array([[1,2],[3,4],[5,6]])
X_test  = np.array([[2,3],[4,5]])

scaler = StandardScaler()
X_train_s = scaler.fit_transform(X_train)   # fit + transform
X_test_s  = scaler.transform(X_test)        # transform only (using train stats)

Pipeline

Pipeline はTransformerとestimatorを1つのオブジェクトに連結します。交差検証の中で変換を正しく適用することで、データリークを防ぎます。

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC

pipe = Pipeline([
    ("scaler", StandardScaler()),
    ("clf", SVC())
])
pipe.fit(X_train, y_train)
print(pipe.score(X_test, y_test))

正解率とその他の指標

分類器を評価するには、accuracy_score、f1_score、classification_report を使います。

from sklearn.metrics import accuracy_score, classification_report

y_pred = model.predict(X_test)
print(accuracy_score(y_test, y_pred))
print(classification_report(y_test, y_pred))

交差検証

cross_val_score は、データを手動で分割せずにk分割交差検証を使ってモデルを評価します。

from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification

X, y = make_classification(random_state=0)
scores = cross_val_score(LogisticRegression(), X, y, cv=5)
print(f"CV scores: {scores.mean():.3f} ± {scores.std():.3f}")

GridSearchCVによるハイパーパラメーター調整

GridSearchCV は交差検証を使ってパラメーターグリッドを網羅的に検索し、最適なハイパーパラメーターを見つけます。

from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
from sklearn.datasets import make_classification

X, y = make_classification(random_state=0)
param_grid = {"C": [0.1, 1, 10], "kernel": ["rbf", "linear"]}
gs = GridSearchCV(SVC(), param_grid, cv=5)
gs.fit(X, y)
print(gs.best_params_, gs.best_score_)

前処理: LabelEncoderとOneHotEncoder

カテゴリラベルのエンコードには LabelEncoder を、カテゴリ特徴量のエンコードには OneHotEncoder または ColumnTransformer を使います。

from sklearn.preprocessing import LabelEncoder, OneHotEncoder
import numpy as np

le = LabelEncoder()
print(le.fit_transform(["cat","dog","cat","fish"]))   # [0 1 0 2]

ohe = OneHotEncoder(sparse_output=False)
print(ohe.fit_transform([["red"],["green"],["blue"]]))

モデルの保存と読み込み

訓練済みモデルは joblib で保存します(NumPy配列ではpickleより高速です)。

import joblib
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification

X, y = make_classification(random_state=0)
model = LogisticRegression().fit(X, y)

joblib.dump(model, "model.joblib")
loaded = joblib.load("model.joblib")
print(loaded.predict(X[:3]))

確認問題

scaler.fit() をテストデータではなく訓練データだけに対して呼び出すべきなのはなぜですか。

復習

scikit-learnの統一されたAPIでは、fit() が訓練し、predict() が推論し、transform() が前処理を行います。手順の連結には Pipeline を使います。train_test_split でデータを分割し、cross_val_score で評価し、GridSearchCV で調整します。

よくある質問

「scikit-learn API: fit、transform、predict」レッスンは無料ですか?

はい。「scikit-learn API: fit、transform、predict」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。

「scikit-learn API: fit、transform、predict」で何を学びますか?

推定器インターフェースと、訓練データとテストデータに分けるワークフローを理解します。 ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Python Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「scikit-learn API: fit、transform、predict」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPython Academyレッスンでコードを書いて実行できますか?

はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. scikit-learn API: fit、transform、predict
  2. 線形モデル: 回帰と分類
  3. 木ベースモデル: 決定木とランダムフォレスト
  4. モデル評価と交差検証
← Python Academyに戻る