scikit-learn-best-practices について
scikit-learn で機械学習ワークフローを構築・評価する開発者向けの指針です。再現可能なデータ準備、パイプライン、モデル選択、評価、保存を扱います。
主な機能
- 01再現可能なデータ分割
- 02前処理とモデルのパイプライン
- 03交差検証の方法
- 04ハイパーパラメーター探索の指針
- 05モデルの評価と保存
活用シーン
- 01データ漏洩を避けたデータ準備
- 02候補モデルの比較
- 03モデルパラメーターの調整
- 04デプロイ可能なモデルパイプラインの保存
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mindrally/ skills --skill scikit-learn-best-practicesインストール後、Claude Code で/scikit-learn-best-practicesを入力して読み込まれたか確認します。
詳細
Scikit-learn のベストプラクティス
機械学習のワークフロー、モデル開発、評価、ベストプラクティスに重点を置いた、scikit-learn 開発のための専門的なガイドラインです。
コードのスタイルと構成
- 正確な Python の例を含む、簡潔で技術的な回答を作成します
- 機械学習のワークフローでは再現性を優先します
- データパイプラインには関数型プログラミングを使用します
- カスタム推定器にはオブジェクト指向プログラミングを使用します
- 明示的なループよりもベクトル化演算を優先します
- PEP 8 のスタイルガイドラインに従います
機械学習のワークフロー
データの準備
- 前処理を行う前に、必ずデータを分割します:訓練/検証/テスト
- 再現性を確保するため、
random_stateを指定してtrain_test_split()を使用します - クラスの不均衡がある分類では、分割を層化します:
stratify=y - 最終評価まで、テストセットは完全に分離しておきます
特徴量エンジニアリング
- 距離ベースのアルゴリズムでは、特徴量を適切にスケーリングします
- 正規分布の特徴量には
StandardScalerを使用します - 範囲が限定された特徴量には
MinMaxScalerを使用します - 外れ値を含むデータには
RobustScalerを使用します - カテゴリ変数をエンコードします:
OneHotEncoder、OrdinalEncoder、LabelEncoder - 欠損値を処理します:
SimpleImputer、KNNImputer
パイプライン
- 前処理とモデリングを連結するには、必ず
Pipelineを使用します - 訓練データに対してのみ変換器を適合させることで、データ漏洩を防ぎます
- コードをより簡潔で再現しやすくします
- デプロイとシリアライズを容易にします
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier
pipeline = Pipeline([
('scaler', StandardScaler()),
('classifier', RandomForestClassifier(random_state=42))
])
列変換器
- 特徴量の種類ごとに異なる前処理を適用するには、
ColumnTransformerを使用します - 数値データとカテゴリデータの前処理を、単一のパイプラインにまとめます
モデルの選択とチューニング
交差検証
- 信頼性の高い性能推定には、交差検証を使用します
- 手軽な評価には
cross_val_score()を使用します - 複数の指標を使う場合は
cross_validate()を使用します - 適切な CV 戦略を使用します:
- 回帰には
KFold - 分類には
StratifiedKFold - 時系列データには
TimeSeriesSplit - グループ化されたデータには
GroupKFold
- 回帰には
ハイパーパラメーターのチューニング
- 網羅的な探索には
GridSearchCVを使用します - パラメーター空間が大きい場合は
RandomizedSearchCVを使用します - チューニングには必ず訓練/検証データを使用し、テストデータは決して使用しません
- 並列処理を行うには
n_jobs=-1を設定します
モデルの評価
分類指標
- 問題に適した指標を使用します:
- クラスのバランスが取れている場合は
accuracy_score - クラスが不均衡な場合は
precision_score、recall_score、f1_score - ランキング能力には
roc_auc_score
- クラスのバランスが取れている場合は
- 全体像を把握するには
classification_report()を使用します - エラー分析には
confusion_matrix()を調べます
回帰指標
- 一般的な用途には
mean_squared_error(MSE) - 解釈しやすさを重視する場合は
mean_absolute_error(MAE) - 説明された分散を評価するには
r2_score
評価のベストプラクティス
- 点推定値だけでなく、信頼区間も報告します
- モデルの挙動を把握するため、複数の指標を使用します
- 意味のあるベースラインと比較します
- 最後に一度だけ、ホールドアウトしたテストセットで評価します
不均衡データの扱い
- 層化分割と交差検証を使用します
- クラスの重み付けを検討します:
class_weight='balanced' - 適切な指標を使用します(正解率ではなく F1、AUC-PR)
- ビジネス上のニーズに基づいて判定しきい値を調整します
特徴量選択
- 統計的検定とともに
SelectKBestを使用します RFE(再帰的特徴量削減)を使用します- モデルベースの選択には
SelectFromModelを使用します - ツリーベースのモデルから特徴量の重要度を調べます
モデルの永続化
- モデルの保存と読み込みには
joblibを使用します - モデルだけでなく、パイプライン全体を保存します
- モデルの成果物をバージョン管理します
- モデルのメタデータを文書化します
パフォーマンスの最適化
- 利用可能な場合は、並列処理に
n_jobs=-1を使用します - 反復学習には
warm_start=Trueを検討します - 高次元で疎なデータには、疎行列を使用します
- 大規模データには
partial_fit()による増分学習を検討します
主な規約
- サブモジュールからインポートします:
from sklearn.ensemble import RandomForestClassifier - 再現性を確保するため、
random_stateを設定します - データリークを防ぐため、パイプラインを使用します
- モデルの選択理由とハイパーパラメーターを記録します
コメント
Markdown 対応