分割数据集以逐行训练和测试

时间:2018-10-10 08:13:11

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

我想根据年份将数据集分为训练和测试数据集。想法是将年份范围从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))

1 个答案:

答案 0 :(得分:0)

对于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)

这不是最好的方法。会回来编辑答案,但这足以让您暂时离开。