機械学習の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の入門コンペで実データを触ることが機械学習上達の最速ルートです。





