gpt4 book ai didi

python - 如何按照某些标准将数据集拆分为子集?

转载 作者:行者123 更新时间:2023-12-01 01:18:50 25 4
gpt4 key购买 nike

虽然我使用机器学习相关的术语,但我的问题是100%工程主题,与统计和数学无关。因此我在这个论坛上询问,而不是交叉验证。

这是我的示例数据,我将用它来评论我的问题:

X = pd.DataFrame(columns=["F1","F2"], 
data=[[23,0.8],
[11,5.35],
[24,19.18],
[15,10.25],
[10,11.30],
[55,44.85],
[15,33.88],
[12,45.30],
[14,22.20],
[15,15.80],
[83,0.8],
[51,5.35],
[34,30.28],
[35,15.25],
[60,13.30],
[75,44.80],
[35,30.77],
[62,40.33],
[64,23.40],
[14,11.80]])

y = pd.DataFrame(columns=["y"],
data=[[0],
[0],
[1],
[0],
[2],
[2],
[2],
[1],
[0],
[1],
[0],
[0],
[1],
[0],
[1],
[0],
[1],
[1],
[0],
[2]])

我应该将数据分为训练集和测试集。经典的方法是使用 sklearn 的 train_test_split 函数:

X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.25)

但我想指定分配给训练和测试集的记录的百分比。更多详细信息如下所述。

在我的例子中,我处理一个多类分类问题,其中 y 可能采用 3 个不同值之一:0、1、2。值为 2 的记录非常罕见(在我的真实数据集中,大约占整个数据集的 3%)。因此这是一个不平衡的分类问题。

由于这是一个不平衡的分类问题,稀有类的记录非常重要。因此,我想更新 model_selection.train_test_split 如下:我想为训练和测试集分配每个类的记录百分比。 例如,<50%, 60%, 90%> 表示 90% 的稀有类记录分配给训练集。

在我的示例中,我希望在训练集中获得 3 条等于 2y 记录 (X_trainy_train),以及测试集中的 1 条记录。

我用谷歌搜索了类似的问题,但没有找到任何东西。

为了解决这个任务,我打乱了初始数据框:

df = pd.concat([X, y], axis=1)

df = df.sample(frac=1).reset_index(drop=True)

但是,我不知道如何继续完成其余的任务。也许有一些 sklearn 内置函数或一些库可以解决这个问题?

最佳答案

train_test_split 中有一个名为 stratify 的选项。也看看这个kind of similar question

要实现您需要的比例,您可以使用 numpy 中的 np.random.choice:

import numpy as np
df = pd.concat([X,y], axis = 1)

#get index values for y = 0
i0 = np.random.choice(df.loc[df.y==0].index.values,
round(len(df.loc[df.y==0])*.5), replace = False)

i1 = np.random.choice(df.loc[df.y==1].index.values,
round(len(df.loc[df.y==1])*.6), replace = False)

i2 = np.random.choice(df.loc[df.y==2].index.values,
round(len(df.loc[df.y==1])*.9), replace = False)

df_train = df.loc[df.index.isin(np.concatenate([i1,i2,i0]))]
df_test = df.loc[~df.index.isin(np.concatenate([i1,i2,i0]))]

关于python - 如何按照某些标准将数据集拆分为子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54043734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com