【问题标题】:Train, Test, Validate split Python. Three sets训练、测试、验证拆分 Python。三套
【发布时间】:2020-03-23 10:38:33
【问题描述】:

有人提出了一种将数据集分成三组的解决方案。我想知道这种情况下的标签在哪里。或者如何设置标签。

train, validate, test = np.split(df.sample(frac=1), [int(.6*len(df)), int(.8*len(df))])

【问题讨论】:

  • 标签是什么意思?您将返回 3 个对象,分别是 trainvalidatetest,第一个覆盖了 df 的 60%,第二个 (validate) 从 60% 到 80%,最后一个 ( test) 剩下的最后 20%。标签是数据集的一部分,在拆分时不需要区分它们。
  • @IvanLibedinsky 我的标签是指这段代码中的 y_train 和 y_test。 { X_train, X_test, y_train, y_test = train_test_split(df, y, test_size=0.2) }
  • @Curious 这些不只是变量名吗?请澄清您的问题,并小心。
  • @AlexanderCécile。我相信这个问题很清楚。下面给出答案。我不明白我应该注意什么。

标签: python pandas numpy machine-learning


【解决方案1】:

我会根据cmets来回答问题:

使用此方法进行拆分:

train, validate, test = np.split(df.sample(frac=1), [int(.6*len(df)), int(.8*len(df))])

您将获得 3 个不同的对象,其中包括来自 df 的前 60% 的数据 train,对应于 validate 的 60% 和 80% 之间的区间的数据以及最后 20% 对应的数据在test 中达到 80%-100%。标签位于这些数据框中。

train_test_split 中,您传递了两个对象 X 和 Y,它们很可能先前已从原始数据集中拆分并返回 4 个对象,其中 2 个对应于训练,两个对应于测试。请记住这一点:您首先将数据集拆分为independent variablesexplained/target variable,然后将这两个对象拆分为训练和测试。

使用np.split,您将反过来,您首先将数据集拆分为 3 个对象,训练、验证和测试,然后需要将它们单独拆分为 independent variables 通常称为 X 和 target variable known作为 Y。您正在执行相同的拆分,只是以相反的顺序。

但是,请记住,通过传递np.split 的索引,这意味着拆分不是随机执行的,而使用train_test_split 你会得到一个随机的训练和测试子集。另一方面,np.split 允许更大的灵活性,例如,正如您在示例中所证明的那样,可以创建 2 个以上的子集。

也许这会有所帮助!

【讨论】:

  • 感谢您的解释性答案。解释得很好。
【解决方案2】:

试试这个。将其中一个 train_test_split 的输出作为输入输入到第二个中

import numpy as np
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4)
X_test, X_validate, y_test, y_validate = train_test_split(X_test, y_test, test_size=0.5)

函数将2个数组随机拆分为4个数组,test_size决定了分配给测试输出vs训练的拆分大小。 y 输入是构建机器学习模型的目标,X 是模型的特征。如果您希望将它们组合起来,则只需连接等效的 X 和 y 输出。

【讨论】:

  • 就我而言,这个可以完美运行。我们可以在这个方法中添加随机种子数吗?
  • 是的,你可以使用随机种子
  • MBA Coder 那将是每一行的单独种子,对吧?
  • 好奇,你需要为每一行做一个种子
猜你喜欢
  • 1970-01-01
  • 2021-09-10
  • 2018-12-21
  • 1970-01-01
  • 2017-04-11
  • 2017-12-26
  • 2021-07-26
  • 2021-06-28
  • 2021-03-04
相关资源
最近更新 更多