mcpField
M
ml-model-training

ml-model-training

github.com/secondskyデータ・データベース240465 回インストール5 週間前に更新
リポジトリ

ml-model-training について

scikit-learn、PyTorch、TensorFlow/Kerasを使う機械学習実践者向けのモデル学習スキルです。データ準備から評価までを扱い、よくある学習上の問題を避ける方法も示します。

主な機能

  1. 01データ準備と特徴量エンジニアリング
  2. 02scikit-learnとPyTorchの例
  3. 03TensorFlow/Kerasの参考パターン
  4. 04分類・回帰の評価指標
  5. 05データリークと過学習の防止

活用シーン

  1. 01モデル学習ワークフローの計画
  2. 02分類・回帰モデルの評価
  3. 03データリークや過学習の回避

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/secondsky/claude-skills --skill ml-model-training

インストール後、Claude Code で/ml-model-trainingを入力して読み込まれたか確認します。

同梱ファイルreferences/pytorch-training.mdreferences/tensorflow-keras.md

詳細

機械学習モデルのトレーニング

適切なデータ処理と評価を行い、機械学習モデルをトレーニングします。

トレーニングのワークフロー

  1. データ準備 → 2. 特徴量エンジニアリング → 3. モデル選択 → 4. トレーニング → 5. 評価

データ準備

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler, LabelEncoder

# Load and clean data
df = pd.read_csv('data.csv')
df = df.dropna()

# Encode categorical variables
le = LabelEncoder()
df['category'] = le.fit_transform(df['category'])

# Split data (70/15/15)
X = df.drop('target', axis=1)
y = df['target']
X_train, X_temp, y_train, y_temp = train_test_split(X, y, test_size=0.3)
X_val, X_test, y_val, y_test = train_test_split(X_temp, y_temp, test_size=0.5)

# Scale features
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_val = scaler.transform(X_val)
X_test = scaler.transform(X_test)

Scikit-learn によるトレーニング

from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, accuracy_score

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

y_pred = model.predict(X_val)
print(classification_report(y_val, y_pred))

PyTorch によるトレーニング

import torch
import torch.nn as nn

class Model(nn.Module):
    def __init__(self, input_dim):
        super().__init__()
        self.layers = nn.Sequential(
            nn.Linear(input_dim, 64),
            nn.ReLU(),
            nn.Dropout(0.3),
            nn.Linear(64, 32),
            nn.ReLU(),
            nn.Linear(32, 1),
            nn.Sigmoid()
        )

    def forward(self, x):
        return self.layers(x)

model = Model(X_train.shape[1])
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
criterion = nn.BCELoss()

for epoch in range(100):
    model.train()
    optimizer.zero_grad()
    output = model(X_train_tensor)
    loss = criterion(output, y_train_tensor)
    loss.backward()
    optimizer.step()

評価指標

タスク指標
分類Accuracy、Precision、Recall、F1、AUC-ROC
回帰MSE、RMSE、MAE、R²

フレームワークの完全な使用例

  • PyTorch:トレーニングの完全な例については、references/pytorch-training.md を参照してください。以下の内容が含まれます。

    • BatchNorm と Dropout を使用したカスタムモデルクラス
    • アーリーストッピングを含むトレーニング/検証ループ
    • 学習率のスケジューリング
    • モデルのチェックポイント保存
    • 分類レポートを含む完全な評価
  • TensorFlow/Keras:references/tensorflow-keras.md では、以下の内容を確認できます。

    • Sequential モデルアーキテクチャ
    • コールバック(EarlyStopping、ReduceLROnPlateau、ModelCheckpoint、TensorBoard)
    • トレーニング履歴の可視化
    • モバイル環境へのデプロイ向け TFLite 変換
    • カスタムトレーニングループ

ベストプラクティス

推奨事項:

  • 堅牢な評価のために交差検証を使用します
  • MLflow で実験を記録します
  • モデルのチェックポイントを定期的に保存します
  • 過学習を監視します
  • ハイパーパラメーターを記録します
  • 70/15/15 のトレーニング/検証/テスト分割を使用します

避けるべき事項:

  • 検証用データなしでトレーニングしないでください
  • クラスの不均衡を無視しないでください
  • 特徴量のスケーリングを省略しないでください
  • ハイパーパラメーターの調整にテストセットを使用しないでください
  • 乱数シードの設定を忘れないでください

既知の問題の予防

1. データリーク

問題:データを分割する前にスケーリングまたは変換を行うと、テストセットの情報がトレーニングデータに漏洩します。

解決策:必ず最初にデータを分割し、その後、トランスフォーマーをトレーニングデータのみに適合させます。

# ✅ Correct: Fit on train, transform train/val/test
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_val = scaler.transform(X_val)  # Only transform
X_test = scaler.transform(X_test)  # Only transform

# ❌ Wrong: Fitting on all data
X_all = scaler.fit_transform(X)  # Leaks test info!
2. クラスの不均衡を無視する

問題:不均衡なデータセット(例:クラス A が 95%、クラス B が 5%)でトレーニングすると、多数派のクラスのみを予測するモデルになります。

解決策:クラスの重み付けまたはリサンプリングを使用します。

from sklearn.utils.class_weight import compute_class_weight

# Compute class weights
class_weights = compute_class_weight('balanced', classes=np.unique(y_train), y=y_train)
model = RandomForestClassifier(class_weight='balanced')

# Or use SMOTE for oversampling minority class
from imblearn.over_sampling import SMOTE
smote = SMOTE()
X_resampled, y_resampled = smote.fit_resample(X_train, y_train)
3. 正則化を行わないことによる過学習

問題:複雑なモデルはトレーニングデータを記憶し、検証セットやテストセットでの性能が低下します。

解決策:正則化の手法を追加します。

# Dropout in PyTorch
nn.Dropout(0.3)

# L2 regularization in scikit-learn
RandomForestClassifier(max_depth=10, min_samples_split=20)

# Early stopping in Keras
from tensorflow.keras.callbacks import EarlyStopping
early_stop = EarlyStopping(monitor='val_loss', patience=10, restore_best_weights=True)
model.fit(X_train, y_train, validation_data=(X_val, y_val), callbacks=[early_stop])
4. 乱数シードを設定しない

問題:実行のたびに結果が再現されず、デバッグや比較ができなくなります。

解決策:すべての乱数シードを設定します。

import random
import numpy as np
import torch

random.seed(42)
np.random.seed(42)
torch.manual_seed(42)
if torch.cuda.is_available():
    torch.cuda.manual_seed_all(42)
5. ハイパーパラメーターの調整にテストセットを使用する

問題:テストセットでハイパーパラメーターを最適化すると、テストデータに対する過学習が発生します。

解決策:調整には検証セットを使用し、テストセットは最終評価のみに使用します。

from sklearn.model_selection import GridSearchCV

# ✅ Correct: Tune on train+val, evaluate on test
param_grid = {'n_estimators': [50, 100, 200], 'max_depth': [5, 10, 15]}
grid_search = GridSearchCV(RandomForestClassifier(), param_grid, cv=5)
grid_search.fit(X_train, y_train)  # Cross-validation on training set
best_model = grid_search.best_estimator_

# Final evaluation on held-out test set
final_score = best_model.score(X_test, y_test)

参照資料を読み込むタイミング

以下が必要な場合は、参照ファイルを読み込んでください。

  • PyTorch の実装詳細:アーリーストッピング、学習率のスケジューリング、チェックポイント保存を含む完全なトレーニングループについては、references/pytorch-training.md を読み込みます
  • TensorFlow/Keras のパターン:コールバックの使用方法、カスタムトレーニングループ、TFLite を使ったモバイル環境へのデプロイについては、references/tensorflow-keras.md を読み込みます

コメント