我已经从包含特定城市的 911 次火灾呼叫的数据集中删除了趋势和季节性,每小时记录一次,超过 17 年。然后我用一个线性回归器拟合它,并尝试预测即将到来的 24 小时期间的值。但是,我的 R^2 值通常接近 0(通常为负),并且我的预测值都在彼此相差万分之一(或更小)的范围内,因此在绘制时,它基本上看起来像一条大致反映平均值的水平线.
我究竟做错了什么?
这是我的代码:
from datetime import timedelta
def run_regression(df, dependent, label):
cut_datetime = df[dependent].max()-timedelta(hours=26) #24 hour lag plus 4 hours to predict
train = df[df[dependent] < cut_datetime][['julian_datetime', label]].dropna(how='any') #train == data before cut_datetime
test = df[df[dependent] >= cut_datetime][['julian_datetime', label]].dropna(how='any') #test == data after cut_datetime
regress = sklearn.linear_model.LinearRegression().fit(
X = train[['julian_datetime']],
y = train[label])
test['predicted_value'] = regress.predict(
X = test[['julian_datetime']])
#Plots
(test[label] - test['predicted_value']).plot()
test[[label, 'predicted_value']].plot()
#Metrics
print('MSE: ', sklearn.metrics.mean_squared_error(test[label], test['predicted_value']))
print('R^2: ', sklearn.metrics.r2_score(test[label], test['predicted_value']))
print('Sample of predicted values: ', '\n', test['predicted_value'][:10])
run_regression(exp_model_df, 'incident_hour', 'label')
incident_hourjulian_date-->函数开头引用的日期时间格式
这是数据集的示例:
incident_hour julian_datetime label
0 2003-11-07 09:00:00 2452950.87500000 6.696136
1 2003-11-07 10:00:00 2452950.91666667 -5.293884
2 2003-11-07 11:00:00 2452950.95833333 5.679681
3 2003-11-07 12:00:00 2452951.00000000 4.411278
4 2003-11-07 13:00:00 2452951.04166667 5.837476
5 2003-11-07 14:00:00 2452951.08333333 6.469543
这是结果图:
慕尼黑的夜晚无繁华
慕森王
相关分类