python - 如何在matplotlib的x轴上正确绘制回归输出与正确的日期时间索引?
问题描述
我有空气污染时间序列数据,需要进行远期估计。为此,我使用随机森林回归器scikit-learn
进行预测,并且我想可视化预测输出,但我无法可视化 x 轴必须显示正确时间索引的回归输出。可以建议我如何为下面的回归方法获得更好的可视化?有没有更好的方法来实现这一点?任何的想法?
我的尝试
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestRegressor
url = "https://gist.githubusercontent.com/jerry-shad/36912907ba8660e11cd27be0d3e30639/raw/424f0891dc46d96cd5f867f3d2697777ac984f68/pollution.csv"
df = pd.read_csv(url, parse_dates=['date'])
df.date = pd.DatetimeIndex(df.date)
# df.sort_values(by='date').reset_index(drop=True)
df.drop(columns=['Unnamed: 0'],axis=1,inplace=True)
resultsDict={}
predictionsDict={}
split_date ='2017-12-01'
df_training = df.loc[df.date <= split_date]
df_test = df.loc[df.date > split_date]
## exclude pollution_index columns from training and testing data
df_tr = df_training.drop(['pollution_index'],axis=1)
df_te = df_test.drop(['pollution_index'],axis=1)
## scaling features
scaler = StandardScaler()
scaler.fit(df_tr)
X_train = scaler.transform(df_tr)
y_train = df_training['pollution_index']
X_test = scaler.transform(df_te)
y_test = df_test['pollution_index']
X_train_df = pd.DataFrame(X_train,columns=df_tr.columns)
X_test_df = pd.DataFrame(X_test,columns=df_te.columns)
reg = RandomForestRegressor(max_depth=2, random_state=0)
reg.fit(X_train, y_train)
yhat = reg.predict(X_test)
resultsDict['Randomforest'] = evaluate(df_test['eyci'], yhat)
predictionsDict['Randomforest'] = yhat
## print out prediction from RandomForest
print(predictionsDict['Randomforest'])
plt.plot(df_test['pollution_index'].values , label='Original')
plt.plot(yhat,color='red',label='predicted')
plt.legend()
当前尝试的输出
在这次尝试中,我尝试使用随机森林回归器进行回归,并打算制作简单的绘图,但绘图没有在 x 轴上显示时间?为什么?有谁知道如何做到这一点?有什么想法吗?谢谢
想要的情节
理想情况下,在训练模型之后,我想进行前向周期估计,这是我想从上述尝试中得出的可能图:
任何人都可以向我建议对回归输出进行正确可视化的可能方法吗?有什么想法吗?
解决方案
您需要将日期明确提供给matplotlib.pyplot.plot()
.
plt.plot(df_test['date'],df_test['pollution_index'].values , label='Original')
plt.plot(df_test['date'],yhat,color='red',label='predicted')
您还可以使用matplotlib
基于 - 的绘图功能pandas
:
df_test['yhat'] = yhat
df_test.plot(x='date',y=['pollution_index','yhat'])
它会自动绘制标题、x/y 标签和图例。
推荐阅读
- host - 主机文件攻击
- javascript - 如何从登录名中导出异步变量
- haskell - Haskell Monad 定律是如何从 Monoid 定律推导出来的?
- prisma - 删除具有默认值的列时,Prisma db push 错误
- java - 无需等待列表完全填充即可访问列表项
- java - 四舍五入到最接近的整数
- regex - 将 URL 与正则表达式匹配
- ios - 在具有免费开发者帐户的物理 IOS 设备上测试?
- python-3.x - Django3 Nginx Gunicorn Supervisor 未记录错误
- android - 我的应用程序在尝试将其连接到 firebase kotlin 后不断崩溃