機械学習の3つの種類

種類 概要
教師あり学習 ラベル付きデータで学習 スパム判定・価格予測
教師なし学習 ラベルなしで構造発見 顧客セグメント・異常検知
強化学習 報酬を最大化する行動学習 ゲームAI・ロボット制御

scikit-learnの基本パターン

scikit-learnは一貫したAPIで様々なアルゴリズムを提供します。

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score

# データ分割
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

# 前処理
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test  = scaler.transform(X_test)

# モデル学習・予測(共通パターン)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print(accuracy_score(y_test, y_pred))

分類(Classification)

from sklearn.ensemble import RandomForestClassifier

model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)

# 特徴量重要度
importances = pd.Series(model.feature_importances_, index=features)
importances.sort_values().plot(kind='barh')

回帰(Regression)

from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
import numpy as np

model = LinearRegression()
model.fit(X_train, y_train)

y_pred = model.predict(X_test)
rmse = np.sqrt(mean_squared_error(y_test, y_pred))
print(f"RMSE: {rmse:.2f}")

クラスタリング(Clustering)

from sklearn.cluster import KMeans

kmeans = KMeans(n_clusters=3, random_state=42)
clusters = kmeans.fit_predict(X)

# エルボー法でクラスター数を決定
inertias = []
for k in range(1, 11):
    km = KMeans(n_clusters=k).fit(X)
    inertias.append(km.inertia_)

モデル選択のガイドライン

データが少ない → ロジスティック回帰・SVM
解釈性重要   → 決定木・線形モデル
精度重視     → ランダムフォレスト・XGBoost
非構造データ  → ディープラーニング(scikit-learn外)

過学習の防止

  • 交差検証cross_val_scoreで汎化性能確認
  • 正則化:Ridge・Lasso(線形モデル)
  • 早期終了:勾配ブースティング
  • データ増強:訓練データを人工的に増やす

Kaggleの入門コンペで実データを触ることが機械学習上達の最速ルートです。