2

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

1 回答 1

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)

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

于 2018-10-10T09:42:33.990 回答