【问题标题】:Python plot 1D arrayPython绘制一维数组
【发布时间】:2021-10-18 15:16:33
【问题描述】:

我想绘制每个点之间的差异。

我有一个系列y_test,它是一维的,包含连续值。索引有点古怪 (7618, 276, 7045, 6095, 2296, 7191, 1213, 2408...)。

我还有另一个 numpy 数组 ypred,它是一维的,包含 y_test 的预测。我想看看使用图表预测的每个值的差异。

我试过了:

fig, ax1 = plt.subplots(figsize = (20,5))
ax1.bar(y_test, y_test.index color = 'tab:orange')
ax1.set_ylabel('Actual',color = 'tab:orange')
ax2 = ax1.twinx()
ax2.bar(y_pred, y_test.index, color = 'tab:blue')
ax2.set_ylabel('Predicted',color = 'tab:blue')
plt.title('XGBoost Regression Performance')
fig.tight_layout()
plt.show()

但它返回错误:

ValueError: shape mismatch: objects cannot be broadcast to a single shape

bar/scatter/anything 都很好,我只是想一起看看所有的值。

这样我可以对最佳预测值进行分组,以了解我的原始数据中的哪些特征值最容易预测。

顺便说一句,如果有人可以推荐获取该信息的最佳 XGBoost 方式,请也告诉我。

这是一些数据:

ypred: 
[10.410029 ,   4.4897604,  29.77089  ,  23.548471 ,  27.415161 ,
        56.28772  ,  13.083108 ,  38.086662 ,  19.128792 ,  42.49037  ,
        65.15919  ,  47.172436 ,  39.517883 ,  13.782948 , 121.52351  ,
         8.388838 ,  49.625607 ,  24.28464  ,  49.55232  ,  34.797436] 

y_test:
7618      9.88
276       2.69
7045     26.93
6095     23.49
2296     24.79
7191     57.09
1213     15.90
2408     46.26
5961     18.60
275      41.03
1707     66.25
2333     53.50
5717     40.60
1497     12.34
4937    121.93
2654      7.97
7442     53.65
7157     25.93
2141     54.28
4339     36.93

谢谢

【问题讨论】:

  • 尝试使用提供的数据运行您的代码,修复明显的语法错误后,给我TypeError: only size-1 arrays can be converted to Python scalars
  • 请发布正确的minimal reproducible example 并提供完整的错误回溯
  • @MadPhysicist 关于语法错误,您是对的!我已经批准了一个答案,但谢谢。我不确定您为什么会收到该类型错误。

标签: python numpy matplotlib plot data-visualization


【解决方案1】:

plt.scatter(y_test, y_pred)?

靠近等分线(对角线)的点多表示预测好,远离表示预测不好。

【讨论】:

  • 感谢您的回答!这实际上是我尝试的第一件事,虽然它完成了工作,但我希望表示在文档目的上更直观。
【解决方案2】:

我假设 y_test 有一个 'val' 列,其中存储了您要绘制的值。
也许这会有所帮助?
您在 x 轴上有索引,在 y 轴上有预测值和真实值。

fig, ax1 = plt.subplots(figsize = (20,5))

ax1.plot(y_test.index, y_test['val'], color = 'tab:orange')
ax1.set_ylabel('Actual',color = 'tab:orange')
ax2 = ax1.twinx()
ax2.plot(y_test.index, y_pred, color = 'tab:blue')
ax2.set_ylabel('Predicted',color = 'tab:blue')
plt.title('XGBoost Regression Performance')
fig.tight_layout()

plt.show()

【讨论】:

  • 太棒了!正是我想要的。我使用了 scatter 而不是 line 只是因为索引不是按顺序排列的,所以这条线有点奇怪。反正。谢谢!我显然是在累的时候编码,因为这是一个非常简单的解决方案:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-11
  • 2018-09-04
相关资源
最近更新 更多