我想在 Pandas 資料幀上進行測驗、訓練、驗證,但我不想生成新的資料幀。相反,我想添加一個名為“Split”的新列 where Split = ['train','valid','test']。我想'train','valid','test'將分布在整個64%,16%以及20%該行的隨機,分別。
我知道 scikit learn 的 train_test_split,但同樣,我不想要新框架。所以我可以嘗試:
from sklearn.model_selection import train_test_split
train, test = train_test_split(df, test_size=0.2)
但我只想要一列“拆分”,其中包含 train、valid 和 test 的值作為標簽。這是用于機器學習目的,所以我想確保拆分是完全隨機的。
有誰知道這怎么可能?
uj5u.com熱心網友回復:
這是使用建議的一種方法numpy.random.choice:
import pandas as pd
import numpy as np
# Set up a little example
data = np.ones(shape=(100, 3))
df = pd.DataFrame(data, columns=['x1', 'x2', 'y'])
df['split'] = pd.NA
# Split
split = ['train', 'valid', 'test']
df['split'] = df['split'].apply(lambda x: np.random.choice(split, p=[0.64, 0.16, 0.20]))
# Verify
df['split'].value_counts()
對于一次給定的運行,這產生了
train 64
valid 19
test 17
Name: split, dtype: int64
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/347334.html
上一篇:SQL 算術運算子和比較運算子
