python用支持向量机回归(SVR)模型分析用电量预测电力消费 | 您所在的位置:网站首页 › BP神经网络python代码 › python用支持向量机回归(SVR)模型分析用电量预测电力消费 |
gray = '#737373' red = '#ff3700' 我在这个模型中使用的数据是通过公寓中安装的智能电表中获得的。 USAGE "字段给出了该小时内的用电度数。 elec.head(3) Out[5]: 天气数据提取。 weather.head() 预处理合并电力和天气 首先,我们需要将电力数据和天气数据合并到一个数据框中,并去除无关的信息。 # 合并成一个Pandas数据框架 pd.merge(weather, elec,True, True) # 从数据框架中删除不必要的字段 del elec['tempm'], elec['cost'] # 将风速转换为单位 elec['wspdm'] * 0.62 elec.head() fig = plt.figure(figsize=[14,8]) elecweather['USAGE'].plot 我想将典型的工作日与周末、假日和在家工作的日子区分开来。所以现在所有的正常工作日都是0,所有的假期、周末和在家工作的日子都是1。 点击标题查阅往期内容 【视频】R语言广义相加模型(GAM)在电力负荷预测中的应用 左右滑动查看更多 01 02 03 04 分类变量:平日与周末/假期/在家工作日## 将周末和节假日设置为1,否则为0 elecwea['Day'] = np.zeros # 周末 elecwea['Atypical_Day'][(elecwea.index.dawe==5)|(elecwea.index.dawe==6)] = 1 # 假期,在家工作日 假期 = ['2014-01-01','2014-01-20'] workhome = ['2014-01-21','2014-02-13','2014-03-03','2014-04-04'] for i in range(len(holiday)): elecwea['Day'][elecwea.index.date==np.datetime64(holidays[i])] = 1 for i in range(len(workhome)): elecwea['Day'][elecwea.index.date==np.datetime64(workhome[i]) ] = 1 elecwea.head(3) 更多的分类变量:一周中的一天,小时在这种情况下,一天中的每个小时是一个分类变量,而不是连续变量。做分析时,需要对一天中的每一个小时进行 "是 "或 "否 "的对应。 # 为一天中的每个小时创建新的列,如果index.hour是该列对应的小时,则分配1,否则分配0 for i in range(0,24): elecweat[i] = np.zeros(len(elecweat['USAGE')) elecweat[i][elecweat.index.hour==i] = 1 # 例子 3am elecweat[3][:6] 时间序列:需要附加上以前的用电需求的历史窗口由于这是一个时间序列,如果我们想预测下一小时的能耗,训练数据中任何给定的X向量/Y目标对都应该提供当前小时的用电量(Y值,或目标)与前一小时(或过去多少小时)的天气数据和用量(X向量)。 # 在每个X向量中加入历史用量 # 设置预测的提前小时数 hours = 1 # 设置历史使用小时数 hourswin = 12 for k in range(hours,hours+hourswin): elec_weat['USAGE-%i'% k] = np.zero(len(elec_weat['USAGE']) for i in range(hours+hourswi,len(elecweat['USAGE']))。) for j in range(hours,hours+hourswin): elec_weat['USAGE-%i'% j][i] = elec_weat['USAGE]i-j] 。 elec_weat.head(3) 分成训练期和测试期由于这是时间序列数据,定义训练期和测试期更有意义,而不是随机的零星数据点。如果它不是一个时间序列,我们可以选择一个随机的样本来分离出一个测试集。 # 定义训练和测试期 train_start = '18-jan-2014'(训练开始)。 train_end = '24-march-2014'. test_start = '25-march-2014'(测试开始)。 test_end = '31-march-2014'。 # 分成训练集和测试集(仍在Pandas数据帧中)。 xtrain = elec_and_weather[train_start:train_end]。 del xtrain['US'] del xtrain['time_end'] ytrain = elec_and_weather['US'][train_start:train_end] 。 将训练集输出成csv,看得更清楚。 X_train_df.to_csv('training_set.csv') scikit-learn包接收的是Numpy数组,而不是Pandas DataFrames,所以我们需要进行转换。 # 用于sklearn的Numpy数组 X_train = np.array(X_train_df) 标准化变量所有的变量都需要进行标准化。该算法不知道每个变量的尺度是什么。换句话说,温度一栏中的73的值看起来会比前一小时的千瓦时使用量中的0.3占优势,因为实际值是如此不同。sklearn的预处理模块中的StandardScaler()将每个变量的平均值去除,并将其标准化为单位方差。当模型在按比例的数据上进行训练时,模型就会决定哪些变量更有影响力,而不是由任意的比例/数量级来预先决定这种影响力。 训练SVR模型将模型拟合训练数据! SVR_model = svm.SVR(kernel='rbf',C=100,gamma=.001).fit(X_train_scaled,y_train) print 'Testing R^2 =', round(SVR_model.score(X_test_scaled,y_test),3) 预测和测试计算下一小时的预测(预测!)我们预留了一个测试数据集,所以我们将使用所有的输入变量(适当的缩放)来预测 "Y "目标值(下一小时的使用率)。 # 使用SVR模型来计算预测的下一小时使用量 SVRpredict(X_test_scaled) # 把它放在Pandas数据框架中,以便于使用 DataFrame(predict_y) 绘制测试期间的实际和预测电力需求的时间序列。 # 绘制预测值和实际值 plt.plot(index,y_test_df,color='k') plt.plot(predictindex,predict_y) 重新取样的结果为每日千瓦时 ### 绘制测试期间的每日总千瓦时图 y_test_barplot ax.set_ylabel('每日总用电量(千瓦时)') # Pandas/Matplotlib的条形图将x轴转换为浮点,所以需要找回数据时间 ax.set_xticklabels([dt.strftime('%b %d') for dt in 误差测量以下是一些精度测量。 len(y_test_df) 均方根误差这实际上是模型的标准误差,其单位与预测变量(或这里的千瓦时)的单位相同。 calcRMSE(predict_y, y_test_df) 平均绝对百分比误差用这种方法,计算每个预测值和实际值之间的绝对百分比误差,并取其平均值;计量单位是百分比。如果不取绝对值,而模型中又没有什么偏差,你最终会得到接近零的结果,这个方法就没有价值了。 errorsMAPE(predict_y, y_test_df) 平均偏置误差平均偏差误差显示了模型的高估或低估情况。初始SVM模型的平均偏差误差为-0.02,这表明该模型没有系统地高估或低估每小时的千瓦时消耗。 calcMBE(predict_y, y_test_df) 变异系数这与RMSE类似,只是它被归一化为平均值。它表明相对于平均值有多大的变化。 这与RMSE类似,只是它被归一化为平均值。它表明相对于平均值有多大的变化。 plot45 = plt.plot([0,2],[0,2],'k') 点击文末 “阅读原文” 获取全文完整资料。 本文选自《python用支持向量机回归(SVR)模型分析用电量预测电力消费》。 点击标题查阅往期内容 R语言进行支持向量机回归SVR和网格搜索超参数优化 逻辑回归、随机森林、SVM支持向量机预测心脏病风险数据和模型诊断可视化 R语言梯度提升机 GBM、支持向量机SVM、正则判别分析RDA模型训练、参数调优化和性能比较可视化分析声纳数据 R语言量化交易RSI策略:使用支持向量机SVM 基于随机森林、svm、CNN机器学习的风控欺诈识别模型 Matlab建立SVM,KNN和朴素贝叶斯模型分类绘制ROC曲线 基于ARIMA、SVM、随机森林销售的时间序列预测 基于数据挖掘SVM模型的pre-incident事故预防预测 R语言用rle,svm和rpart决策树进行时间序列预测Python中基于网格搜索算法优化的深度学习模型分析糖尿病数据 随机森林优化贝叶斯预测分析汽车燃油经济性 Python基于粒子群优化的投资组合优化研究 matlab使用贝叶斯优化的深度学习:卷积神经网络CNN R语言深度学习:用keras神经网络回归模型预测时间序列数据 Matlab用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类 R语言KERAS深度学习CNN卷积神经网络分类识别手写数字图像数据(MNIST) MATLAB中用BP神经网络预测人体脂肪百分比数据 Python中用PyTorch机器学习神经网络分类预测银行客户流失模型 R语言实现CNN(卷积神经网络)模型进行回归数据分析 SAS使用鸢尾花(iris)数据集训练人工神经网络(ANN)模型 【视频】R语言实现CNN(卷积神经网络)模型进行回归数据分析 Python使用神经网络进行简单文本分类 R语言用神经网络改进Nelson-Siegel模型拟合收益率曲线分析 R语言基于递归神经网络RNN的温度时间序列预测 R语言神经网络模型预测车辆数量时间序列 R语言中的BP神经网络模型分析学生成绩 matlab使用长短期记忆(LSTM)神经网络对序列数据进行分类 R语言实现拟合神经网络预测和结果可视化 用R语言实现神经网络预测股票实例 使用PYTHON中KERAS的LSTM递归神经网络进行时间序列预测 python用于NLP的seq2seq模型实例:用Keras实现神经网络机器翻译 用于NLP的Python:使用Keras的多标签文本LSTM神经网络分类返回搜狐,查看更多 |
CopyRight 2018-2019 实验室设备网 版权所有 |