【问题标题】:Splitting dataset for training and testing row wise拆分数据集以按行进行训练和测试
【发布时间】:2019-03-15 02:09:19
【问题描述】:

我想根据年份将我的数据集拆分为训练和测试数据集。这个想法是将 2009-2017 年的行放在训练数据集中,将 2018 年的数据放在测试数据集中。在大多数情况下,拆分数据集很容易,但我的模型引发了很多索引问题。

X = ((df[df['Year'] < 2018]))
X_train = np.array(X.drop(['Usage'], 1))
X_test = np.array(X['Usage'])
y =((df[df['Year'] > 2017]))
y_train = np.array(y.drop(['Usage'], 1))
y_test = np.array(y['Usage'])

这就是我计划拆分数据的方式。使用列是我的预测列,包含连续值。应用一个简单的 RandomForestRegressor() 作为回报给了我这个错误

ValueError: Number of labels=14495 does not match number of samples=382772

aditya 我的回归模型非常基本,但我以任何方式附加代码。 X 中传递的列如下:X= [Cust_Id', 'Usage', 'Plan_Group', 'Contract_Type', 'Cust_Status','Premise_Zip', 'Year', 'Month']

model = RandomForestRegressor()

model.fit(X_train, y_train)

y_pred = model.predict(X_test)
# evaluate predictions
print(model.score(X_test, y_test))
# accuracy = accuracy_score(y_test, (y_pred < 0.5).astype(int))

【问题讨论】:

  • 你的问题是什么?
  • 我想按行拆分数据集进行训练和测试。通常你定义一个列作为你的预测列,并在 y_test 和 y_train 中传递它。在这种情况下,我想按行拆分它。我的目标是通过在 2009-2017 年数据上训练模型来预测“2018 年的使用值”
  • @FareenWalani 添加更多代码 - 可能是您调用 RandomForestRegressor() 的行。我发现了你在这里造成的错误,但让我们更正式地采用堆栈溢出方式。我有兴趣了解您如何使用这些参数。并从一开始就了解 X 包含哪些类型的数据。您对 X 和 y 的理解有点不可靠 - 这就是问题的根源。
  • @Aditya 我已在下面的答案中添加了您想要的代码

标签: python machine-learning time-series train-test-split


【解决方案1】:

对于 sklearn 堆栈中的大多数算法,您都有一个标准符号: X,大写字母,通常是一个数组(即使有一个特征),以向量的形式表示每个数据点。 y,小写字母,通常是表示标签的向量,例如类标签或回归元素的值。

您将 X 和 y 创建为由 Year 属性生成的数据框。相反,您必须拆分为 X_train 和 X_test。

X = df.drop(['Usage'],1)
X_train = df[df['Year'] < 2018]
X_test = df[df['Year'] > 2017]
y_train = df[df['Year'] < 2018]
y_test = df[df['Year'] > 2017]
y_train = y_train['Usage']
y_test = y_test['Usage']

然后你在X_train和y_train的基础上训练

model = RandomForestRegressor()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)

虽然这不是最好的方法。会回来编辑答案,但这应该足以让你现在开始。

【讨论】:

  • 难以置信!这对我来说很神奇。你能解释一下我在这里做错了什么吗?你做对了什么?我想得到它,但我有点不明白
  • 我明白了。您可能正在学习一个写得不好的教程。请记住 - X 是一个矩阵,y 是一个向量。 X 是数据特征,y 是标签。 X 是输入,y 是输出。 sklearn 中的任何 model.fit() 都需要两个参数——输入和输出。 clf.fit(X, y) 是标准方式。
  • 另一个stackoverflow的东西,如果你喜欢这个答案,记得给它点赞。如果答案是线程中最好的答案,请接受它作为最好的(你已经做过的)。这两者都很重要,因为它们可以帮助我们保持 stackoverflow 上的内容质量。点赞和接受是表达感谢的最佳方式,让我们有动力在工作日之外帮助其他同龄人。
  • 我知道 adn 会这样做。不过,还有一件事,我在这里同时应用了 model.score 和 accuracy_score。 model_score 给了我相当不错的结果,但是 accuracy_score 是 0.0。我在这里做错了什么还是模型不支持accuracy_score?
  • 在回归中,你需要 R^2 分数什么的。 model.score(X_test, y_test) 就是这样做的。我不明白accuracy_score()。你怎么称呼它?
猜你喜欢
  • 2016-02-27
  • 2019-06-20
  • 1970-01-01
  • 2018-06-04
  • 1970-01-01
  • 2017-09-27
  • 2019-12-11
  • 2017-11-01
  • 2018-01-21
相关资源
最近更新 更多