【问题标题】:Plot-Error with multidimensional "X" and "y" that have only one dimension仅具有一维的多维“X”和“y”的绘图误差
【发布时间】:2018-11-30 11:09:34
【问题描述】:

我想建立一个模型来预测将租用多少辆自行车。因此我正在使用 DecisionTreeRegressor 但我遇到了问题。我无法绘制这个,因为“ValueError:x 和 y 必须是相同的大小”。如果我将 X 和 y 与 len() 进行比较,我得到相同的长度。问题是我的 X 有 10 列而 y 只有 1 列。这就是我收到此错误的原因。 我想用我的情节得到以下图片:

有什么办法可以纠正这个问题吗?

X = df_day.drop(["date", "total_rides"], axis = 1)
y = df_day["total_rides"]
#X has something like 10 columns and y has only 1 column

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 43, test_size = 0.25)

dtc = DecisionTreeRegressor(max_depth = None)
dtc.fit(X_train, y_train)
#dtc.score(X_test, y_test)

#Prediction
y_pred2 = dtc.predict(X_test)
plt.scatter(X, y)
plt.plot(X_test, y_pred2)
plt.show()

【问题讨论】:

  • 如果 x 有 10 列,你如何在 2d 图中将它与 y 绘制?你想通过绘制这些数据来实现什么?
  • 我仍然无法理解您的问题到底是什么。你能否修改示例数据来说明你得到了什么以及你想要什么? (为简单起见,可能不是 10 天,而是 3 天,不是 24 小时,而是 4 小时)

标签: python matplotlib data-science


【解决方案1】:

就像您的错误所说的那样,您只能绘制具有相同大小的数组(即一个 x 列和一个 y 列或十个 x 列和十个 y 列,都具有相同的行数)。要将它们全部绘制在一起,您应该重复每列的 y 值。天真:

for i in range(X.shape[0]):
    plt.scatter(X[:,i], y)
    plt.plot(X_test[:,i], y_pred2)

plt.show()

请注意,这些列可能都在不同的尺度上,这个图可能毫无意义。但代码应该显示您希望看到的内容。

【讨论】:

  • 您好,谢谢您的回答!我做错了。我想绘制一段时间内的 y(total_bikes = 已售出的自行车数),所以 x["date"].但是我现在收到以下错误“float()参数必须是字符串或数字,而不是'时间戳'”。也许你能帮我?
  • 没有看到代码就忍不住了。您能否说明您要运行的线路是什么?
  • 下面你可以看到我模型的代码: X = df_day.drop(["total_rides"], axis = 1) y = df_day["total_rides"] X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 43, test_size = 0.25) dtc = DecisionTreeRegressor(max_depth = None) dtc.fit(X_train, y_train)
  • 现在我想构建一个图表,显示一段时间内租用自行车的真实数量(X_test,y_test)和预测曲线(X_test,y_predicted)。下面你可以看到我的代码得到两条曲线并出现以下错误 - “TypeError:float()参数必须是字符串或数字,而不是'时间戳'” y_predicted = dtc.predict(X_test)plt.plot(X_test [“日期"], y) plt.plot(X_test["date"], y_pred2) plt.show() 如何显示我的曲线?你觉得我的机器学习模型怎么样?我应该选择另一个吗?
  • 您的 X["date"] 列似乎是 Timestamp 类型,matplotlib 不支持。试试这个:plt.plot(X_test["date"].dt.to_pydatetime(), y); plt.plot(X_test["date"].dt.to_pydatetime(), y_pred2); plt.show()。尽管您可能不应该在训练数据中包含原始日期,但这也可能会给您带来麻烦。
猜你喜欢
  • 2020-05-10
  • 2021-06-05
  • 2017-08-20
  • 2017-10-23
  • 1970-01-01
  • 2020-05-06
  • 1970-01-01
  • 2013-06-07
  • 1970-01-01
相关资源
最近更新 更多