【发布时间】:2020-11-12 15:59:34
【问题描述】:
我正在使用一些时间序列的功耗数据并尝试对其进行线性回归分析。
数据有以下列:
日期,Denmark_consumption,Germany_consumption,Czech_consumption,Austria_consumption。
它是以小时为频率的时间序列数据。
然而,每一列的值都是 NaN 的 我的目标是创建一个线性回归模型 对没有空值的数据子集进行训练和测试,然后尝试预测丹麦消费列的值,例如当前具有 NaN 值的值。
我计划使用我的训练/测试功能一个国家的消费列以及序数值的日期来尝试预测第二个国家的消费值。
这是一个数据示例。
Date Denmark Germany Czech Austria
2018-01-01 00:00:00 1607.0 42303.0 5520 6234.0
2018-01-01 01:00:00 1566.0 41108.0 5495 6060.0
2018-01-01 02:00:00 1460.0 40554.0 5461 5872.0
2018-01-01 03:00:00 1424.0 38533.0 5302 5564.0
2018-01-01 04:00:00 1380.0 38494.0 5258 5331.0
我做了几件事。
-
我删除了任何空值的行来创建我的训练和测试数据集。
-
我将日期列设置为数据框索引。
-
我将数据从每小时上采样到每周。我用 默认的 'mean' 聚合函数。
-
我将日期作为一列添加到训练和测试数据中,并将其转换为序数值。
-
因为各种消费值都是高度相关的,所以我只对X_train和X_test数据集使用了德国消费列
我使用 sklearn 创建了一个线性回归模型,并使用德国消费和有序日期作为我的“X”和丹麦消费作为我的“Y”来拟合数据。
我试图通过散点图和线绘制输出,但得到的图形如下所示:
为什么我的情节看起来像是有人在上面乱涂乱画?我期待的是某种单行。
这是我的 x_train 数据集的示例
Germany Date
consumption
Date
2018-07-08 44394.125000 736883
2019-01-16 66148.125000 737075
2019-08-03 45718.083333 737274
2019-06-09 41955.250000 737219
2020-03-04 61843.958333 737488
这是我的 y_train 数据集的示例。
Date
2018-01-01 1511.083333
2018-01-02 1698.625000
2018-01-03 1781.291667
2018-01-04 1793.458333
2018-01-05 1796.875000
Name: Denmark_consumption, dtype: float64
这是实际的相关代码。
lin_model = LinearRegression()
lin_model.fit(X_train,y_train)
y_pred = lin_model.predict(X_test)
plt.scatter(X_test['Date'].map(dt.datetime.fromordinal),y_pred,color='black')
plt.plot(X_test['Date'],y_pred)
系数、R 平方和均方误差分别为:
Coefficients:
[0.01941453 0.01574128]
Mean squared error: 14735.12
Coefficient of determination: 0.51
有人可以告诉我我做错了什么吗?另外,我的方法准确吗?尝试有意义吗 并根据第二个国家的消费 + 日期的组合来预测消费值?
任何帮助表示赞赏。
【问题讨论】:
-
X_test 排序了吗?
标签: python pandas linear-regression sklearn-pandas