[解決済み】データを3つのセット(トレーニング、検証、テスト)に分割する方法とは?)
2022-04-13 03:45:57
質問
pandasのdataframeを3つのセットに分けたいのですが、どうすればいいですか?私は
訓練・試験・スプリット
から
sklearn.cross_validation
を使えば、データを2つのセット(trainとtest)に分けることができます。しかし、データを3つの集合に分けるという解決策は見つかりませんでした。できれば、元データのインデックスが欲しいです。
回避策としては
train_test_split
を2回実行し、何らかの方法でインデックスを調整します。しかし、データを2セットではなく3セットに分割する、より標準的な/ビルトインの方法はありますか?
どのように解決するのですか?
Numpyによる解決。まずデータセット全体をシャッフルします(
df.sample(frac=1, random_state=42)
)に分割し、その後、データセットを以下の部分に分割します。
- 60% - 訓練セット。
- 20% - バリデーションセット
- 20% - テストセット
In [305]: train, validate, test = \
np.split(df.sample(frac=1, random_state=42),
[int(.6*len(df)), int(.8*len(df))])
In [306]: train
Out[306]:
A B C D E
0 0.046919 0.792216 0.206294 0.440346 0.038960
2 0.301010 0.625697 0.604724 0.936968 0.870064
1 0.642237 0.690403 0.813658 0.525379 0.396053
9 0.488484 0.389640 0.599637 0.122919 0.106505
8 0.842717 0.793315 0.554084 0.100361 0.367465
7 0.185214 0.603661 0.217677 0.281780 0.938540
In [307]: validate
Out[307]:
A B C D E
5 0.806176 0.008896 0.362878 0.058903 0.026328
6 0.145777 0.485765 0.589272 0.806329 0.703479
In [308]: test
Out[308]:
A B C D E
4 0.521640 0.332210 0.370177 0.859169 0.401087
3 0.333348 0.964011 0.083498 0.670386 0.169619
[int(.6*len(df)), int(.8*len(df))]
- は
indices_or_sections
の配列です。
numpy.split()
.
の小さなデモを紹介します。
np.split()
20 要素の配列を 80%, 10%, 10% に分割してみましょう。
In [45]: a = np.arange(1, 21)
In [46]: a
Out[46]: array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20])
In [47]: np.split(a, [int(.8 * len(a)), int(.9 * len(a))])
Out[47]:
[array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]),
array([17, 18]),
array([19, 20])]
関連
-
[解決済み】ピアソン相関計算中に「ValueError: Connectenation axis のすべての入力配列寸法は正確に一致しなければなりません」を取り除くには?
-
pandas 基本特性メソッド ランダム整理(3つ) --- 記述統計 / 重複排除カウント / グループソート
-
pandasがDataframeやSeriesを扱うとき、カラム名なしでデータのカラムを受け取る。
-
pandasを使ってexcelのvlookup関数を実装する
-
Pandasシリーズ関連トランスフォーム
-
[解決済み] Pythonのdictをdataframeに変換する
-
[解決済み] pandasで1つのデータフレームからテストとトレーニングのサンプルを作成するにはどうすればよいですか?
-
[解決済み】iPython NotebookでDataFrameをテーブルとして表示する。
-
[解決済み】データを3つのセット(トレーニング、検証、テスト)に分割する方法とは?)
-
[解決済み】データフレームの文字列列を2つの列に分割する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ImportError: IProgress が見つかりませんでした。インストールされていますが、jupyterとipywidgetsをアップデートしてください。
-
[解決済み] モジュール 'pandas' には属性 'Panel' がありません。
-
pandas DataFrame を日付比較に変換するとき、datetimelike 値の .dt アクセッサしか使用できないエラーが発生しました。
-
pandas 基本特性メソッド ランダム整理(3つ) --- 記述統計 / 重複排除カウント / グループソート
-
pandasを使ってexcelのvlookup関数を実装する
-
Pandasシリーズ関連トランスフォーム
-
[解決済み】iPython NotebookでDataFrameをテーブルとして表示する。
-
[解決済み] PandasのDataFrame apply()で全コアを使用するようにするか?
-
[解決済み] Alpine LinuxでPandasのインストールに時間がかかる理由
-
[解決済み] pandasのデータフレームでNoneをNaNに置き換える