我有一個如下圖所示的資料集。我想將其拆分以在標簽上進行分層訓練和測驗。同時,我不希望同一個球員同時出現。
例如,當我拆分它時 train:test=1:1。
| 玩家 | 話語 | 標簽 |
|---|---|---|
| 鮑勃 | ... | 1 |
| 約翰 | ... | 1 |
| 瑪麗 | ... | 0 |
| 凱西 | ... | 1 |
| 杰克 | ... | 1 |
| 約翰 | ... | 0 |
| 約翰 | ... | 1 |
| 瑪麗 | ... | 1 |
→
火車(標簽 0 : 標簽 1 = 1 : 3)
| 玩家 | 話語 | 標簽 |
|---|---|---|
| 鮑勃 | ... | 1 |
| 約翰 | ... | 1 |
| 約翰 | ... | 0 |
| 約翰 | ... | 1 |
→
測驗(標簽 0:標簽 1 = 1:3)
| 玩家 | 話語 | 標簽 |
|---|---|---|
| 瑪麗 | ... | 0 |
| 瑪麗 | ... | 1 |
| 凱西 | ... | 1 |
| 杰克 | ... | 1 |
uj5u.com熱心網友回復:
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
grouped = df.groupby('player')
l=[grouped.get_group(x) for x in grouped.groups] # I have split dataframe via groupby
train,test = train_test_split(l,test_size=0.5)
while len(pd.concat(train)) != len(pd.concat(test)):
train,test = train_test_split(l,test_size=0.5) # I've split it so that each contains an equal number of elements.
train = pd.concat(train)
test = pd.concat(test)
uj5u.com熱心網友回復:
受到 tako0707 回答的啟發,我將我的資料分成訓練、有效和測驗,如下所示。
幸運的是,train 的、valid 的和 test 的標簽幾乎是分層的。
import pandas as pd
grouped = df.groupby('player')
groups = [grouped.get_group(x) for x in grouped.groups]
i = 0
train, train_size = [groups[i]], len(groups[i])
while train_size < len(labels) * 0.8:
i = 1
train_size = len(groups[i])
train.append(groups[i])
test, test_size = [groups[i]], len(groups[i])
while test_size < len(labels)* 0.1:
i = 1
test_size = len(groups[i])
test.append(groups[i])
valid, valid_size = [groups[i]], len(groups[i])
while valid_size < len(labels) * 0.1:
i = 1
valid_size = len(groups[i])
valid.append(groups[i])
train.extend(groups[i 1:])
train, valid, test = pd.concat(train), pd.concat(valid), pd.concat(test)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/393683.html
標籤:Python 熊猫 机器学习 scikit-学习 数据集
上一篇:當我使用com.databricks.spark.avro時,為什么必須添加org.apache.spark.avro依賴項才能在Spark2.4中讀/寫avro檔案?
