コンテンツにスキップ

DataSplitノード

DataSplitノードは、データセットを訓練セットとテストセットに分割します。これは、未知のデータでモデル性能を評価するための重要なステップです。

プロパティ
タイプ処理ノード
入力DataFrame(DataLoaderから)
出力分割インデックス(訓練/テスト)
ライブラリscikit-learn

テスト用に保持するデータの割合。

訓練テスト用途
0.190%10%大きなデータセット(10万行以上)
0.280%20%標準(デフォルト)
0.370%30%小さなデータセット、追加検証
0.460%40%非常に小さなデータセット
0.550%50%最大の検証

スライダーで調整(10%-50%範囲、5%刻み)。

再現性のためのシード。毎回同じ分割を得るには固定値(例:42)を設定。

  • デフォルト: 42
  • 範囲: 任意の整数

訓練セットとテストセットの両方でクラス比率を維持するために層化分割を有効化。

層化を使用すべき場合:

  • 不均衡な分類問題
  • 稀なクラスがある場合
  • クラス分布が重要な場合

設定:

  • Stratify — オン/オフ切り替え
  • Stratify Column — 層化に使用するターゲットカラム(有効時のみ表示)

例:データセットが90%のクラスAと10%のクラスBを持つ場合、層化により訓練セットとテストセットの両方でこの90/10の比率が維持されます。

  1. 接続されたDataLoaderからデータを読み込み
  2. random stateを使用してデータをシャッフル
  3. 訓練/テストインデックスに分割
  4. インデックスを作業ディレクトリのsplit_indices.jsonに保存
  5. 下流のTrainerがこれらのインデックスを訓練に使用
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
X, y,
test_size=0.2,
random_state=42,
stratify=y # 層化が有効な場合
)
方向ノードタイプ
入力元DataLoader
出力先Trainer

必要なパイプライン構造:

DataLoader → DataSplit → Trainer → Evaluator

ノードは以下を検証:

  • DataLoaderに接続されている必要がある
  • 層化が有効な場合、カラム名を指定する必要がある
  • 分割比率は0.1から0.5の間である必要がある

DataSplitノードは分割インデックスを以下に保存:

~/mlops-work/split_indices.json

このファイルには以下が含まれます:

{
"train_indices": [0, 1, 3, 5, ...],
"test_indices": [2, 4, 6, ...],
"random_state": 42,
"test_size": 0.2,
"stratified": true,
"stratify_column": "target"
}

Trainerノードはこのファイルを読み込んで同じ分割を使用します。

Trainerノードには組み込みのテスト分割がありますが、DataSplitの使用が推奨されます:

  • 関心事の分離(分割と訓練)
  • パイプラインで分割設定が可視化される
  • 層化サンプリングが可能
  • 再実行時の再現性
データセットサイズ推奨分割
1,000行未満0.2-0.3
1,000-10,0000.2
10,000-100,0000.15-0.2
100,000以上0.1-0.15

小さなデータセットでは信頼性のある評価のために大きなテストセットが必要です。

特に以下の場合、分類タスクでは常に層化を有効に:

  • 不均衡なクラス
  • マルチクラス問題
  • 小さなデータセット

「層化カラムが見つかりません」

Section titled “「層化カラムが見つかりません」”

カラム名は完全に一致する必要があります(大文字小文字を区別)。DataLoaderプレビューで正しいカラム名を確認してください。

「各クラスのサンプルが不足しています」

Section titled “「各クラスのサンプルが不足しています」”

クラスのサンプルが非常に少ない場合、層化が失敗する可能性があります。オプション:

  • 層化を無効化
  • 稀なクラスを統合
  • より多くのデータを収集

再現可能な分割のために固定のrandom_state(例:42)を設定してください。

  • DataLoader — 分割前にデータを読み込み
  • Trainer — 分割されたデータで訓練