scikit-learn初探:多种回归方法建立预测电力输出模型(一)
2015-11-23 12:15
423 查看
一年前听说scikit-learn这个机器学习库,当时正在考研,一直没有机会用一下,正好这次要写《数据挖掘》的课程论文,需要使用机器学习算法,自己写一个算法,时间根本来不及,所以就想起这个库啦。下面的内容是我整理过后的,并不是严格按照论文的思维模式写的。
整个过程如下:
Created with Raphaël 2.1.0原始数据集数据预处理原始特征集选择最优子集选择最优回归函数
数据的百度网盘地址为:http://pan.baidu.com/s/1mg6KokC。数据中给的变量有五个,如下:
(1)环境温度(AT):单位:摄氏度; 变化范围:1.81℃-37.11℃
(2)大气压(AP):单位:毫巴; 变化范围:992.89-1033.30 mbar
(3)湿度(RH):单位:百分比; 变化范围:25.56%-100.16%
(4)蒸汽压力(V):单位:cm Hg; 变化范围:25.36-81.56 cm Hg
(5)全负载电力输出(PE):单位:兆瓦特 变化范围:420.26-495.76 MW
其中(1)-(4)是输入变量,(5)为需要预测的变量
这里使用的数据并不是一手的数据,而是已经被处理过的数据。据资料显示,原始数据包括了674个sheet表中,每一张表中的数据为一天的数据。这些数据含有噪声和不完整的数据。将这些含有不完整和不正确数据集的数据过滤掉,即输出电力低于420.26MW,和一些噪声数据。将这些数据经过随机排列,放到五张sheet表中。每张sheet表中包含9568条数据,每条数据有5个属性。
这段代码#@1部分使用xlrd库读取xls数据集,xlrd.open_workbook这个函数的参数是数据的地址。关于xlrd库的安装,可以使用easy_install、pip安装都可以,至于具体安装步骤,可以问一下度娘。
这张excel表格由5个sheet表组成,#@2部分代码是将每个sheet表格的数据读取出来。
#@3处代码每张sheet1,sheet2,sheet3表中的第0、1、2 、3 、4列数据分别赋值给AT_tran、V_tran、AP_tran、RH_tran、PE_tran,这些数据做训练集,每一列数据都对应这些属性。
#@4处代码是将这些数据读取为测试集。
#@5处代码将训练集、测试集组成字典,并将这些数据返回。
注:五张sheet表可以做交叉验证使用的,而这里我为了快点将模型建立起来,就没有使用交叉验证了。我测试三次,选用不同的sheet表作为训练集、测试集,误差相差的并不是很大。
1 简介
本篇文章尝试并比较了一些机器学习回归算法拟合出一个预测模型,希望这个模型能够预测出每小时的满载电力。电厂的基本负荷运行受四个主要参数的影响,环境温度、气压、相对湿度和排汽压力。这些变量影响了电力的输出,这里电力的输出作为目标变量。这篇文章的数据来自于是一家电厂过去六年的数据,包括输入变量(影响结果的参数)和目标变量。首先,在本文中首先在所给数据中找出最优的子集,即主要的特征。接下来,找出性能最优的回归方法,通过这种回归方法能够最好的预测出满负荷电力的输出。整个过程如下:
Created with Raphaël 2.1.0原始数据集数据预处理原始特征集选择最优子集选择最优回归函数
2、预处理
1.1数据
数据我是从著名的UCI(http://archive.ics.uci.edu/ml/)上面下载的。使用的是来自一家不知名的复合式发电站的六年的数据,复合式循环发电站由燃气发电机、蒸汽涡轮发电机和热力循环系统组成。在这样一个发电站中,电能是由燃气和蒸汽发电机产生的,将这两台发电机组合在一个循环中,即将两台发电机连接在一起。复合式循环发电系统中的燃气发电机不仅仅能够产生电能,也能产生大量的热能。而这些热能可以通过水冷系统供给蒸汽涡轮发电机,由此可以生产出电力。这样燃气发电机既可以生产大量的电能,产生的热能也可以供给给蒸汽发电机,产生额外的电力。这种复合式循环发电系统意见在全球大量的应用了。热力学系统如下图:数据的百度网盘地址为:http://pan.baidu.com/s/1mg6KokC。数据中给的变量有五个,如下:
(1)环境温度(AT):单位:摄氏度; 变化范围:1.81℃-37.11℃
(2)大气压(AP):单位:毫巴; 变化范围:992.89-1033.30 mbar
(3)湿度(RH):单位:百分比; 变化范围:25.56%-100.16%
(4)蒸汽压力(V):单位:cm Hg; 变化范围:25.36-81.56 cm Hg
(5)全负载电力输出(PE):单位:兆瓦特 变化范围:420.26-495.76 MW
其中(1)-(4)是输入变量,(5)为需要预测的变量
1.2预处理
数据预处理是在数据分析和挖掘中的一个必要的步骤,预处理的好坏甚至关系到最终建模的好坏。包括数据清洗,数据整合,数据转换,数据降维。这些操作在机器学习中提高模型的准确度。数据集可能有成百上千维,这些特征有的是不相关。特征子集的选择是减少数据集唯独的一种方式,通过从原始数据集中清除不相关的数据。减少原始数据集中的特征可以让机器学习算法跑的更快更有效。因而,数据预处理能够增加机器学习算法的准确度,提高模型的综合性能。这里使用的数据并不是一手的数据,而是已经被处理过的数据。据资料显示,原始数据包括了674个sheet表中,每一张表中的数据为一天的数据。这些数据含有噪声和不完整的数据。将这些含有不完整和不正确数据集的数据过滤掉,即输出电力低于420.26MW,和一些噪声数据。将这些数据经过随机排列,放到五张sheet表中。每张sheet表中包含9568条数据,每条数据有5个属性。
1.3数据读取
我们已经有数据了,而且也已经对数据有所了解了,接下来就是将这些数据出来。代码如下:def getData(): #@1 data = xlrd.open_workbook('/home/wq/code/datamining/CCPP/ccpp.xls')#使用xlrd库读取excel文件 #@2 #读取数据,将xls中的数据读取出来 sheet1 = data.sheet_by_name('Sheet1') sheet2 = data.sheet_by_name('Sheet2') sheet3 = data.sheet_by_name('Sheet3') sheet4 = data.sheet_by_name('Sheet4') sheet5 = data.sheet_by_name('Sheet5') #@3 #训练集 AT_tran = sheet1.col_values(0) + sheet2.col_values(0) + sheet3.col_values(0) V_tran = sheet1.col_values(1) + sheet2.col_values(1) + sheet3.col_values(1) AP_tran = sheet1.col_values(2) + sheet2.col_values(2) + sheet3.col_values(2) RH_tran = sheet1.col_values(3) + sheet2.col_values(3) + sheet3.col_values(3) PE_tran = sheet1.col_values(4) + sheet2.col_values(4) + sheet3.col_values(4) #@4 #测试集 AT_test = sheet4.col_values(0) + sheet5.col_values(0) V_test = sheet4.col_values(1) + sheet5.col_values(1) AP_test = sheet4.col_values(2) + sheet5.col_values(2) RH_test = sheet4.col_values(3) + sheet5.col_values(3) PE_test = sheet4.col_values(4) + sheet5.col_values(4) #@5 tran = {'AT':AT_tran,'V':V_tran,'AP':AP_tran,'RH':RH_tran,'PE':PE_tran} test = {'AT':AT_test,'V':V_test,'AP':AP_test,'RH':RH_test,'PE':PE_test} return tran, test
这段代码#@1部分使用xlrd库读取xls数据集,xlrd.open_workbook这个函数的参数是数据的地址。关于xlrd库的安装,可以使用easy_install、pip安装都可以,至于具体安装步骤,可以问一下度娘。
这张excel表格由5个sheet表组成,#@2部分代码是将每个sheet表格的数据读取出来。
#@3处代码每张sheet1,sheet2,sheet3表中的第0、1、2 、3 、4列数据分别赋值给AT_tran、V_tran、AP_tran、RH_tran、PE_tran,这些数据做训练集,每一列数据都对应这些属性。
#@4处代码是将这些数据读取为测试集。
#@5处代码将训练集、测试集组成字典,并将这些数据返回。
注:五张sheet表可以做交叉验证使用的,而这里我为了快点将模型建立起来,就没有使用交叉验证了。我测试三次,选用不同的sheet表作为训练集、测试集,误差相差的并不是很大。
相关文章推荐
- 【转】NAS群晖DSM 5.0-4458安装教程
- 代码覆盖率工具 Istanbul 入门教程
- 顺序栈的基本操作
- QT的QSqlQuery与QSqlQueryModel RowCount只能读到256问题的解决
- CF - Profact(DFS + 剪枝)
- [转载]iOS 获取WIFI,IP地址
- Python调用shell
- macOSX下,如何永久更改Mysql的字符编码格式
- c和c++中的一维数组和二维数组的动态分配内存,以及参数传递
- 跨linux 服务器,远程ip文件共享 SSHFS
- Linux Advance--文件IO--创建一个具有空洞的文件
- asp.net mvc 中通过url字符串获取controller和action
- C语言基础第一篇--Hello world !
- Android Resource Types之String简介
- 字符串和日期的相互转换
- Linux命令date日期时间和Unix时间戳互转
- HTML5入门(1)
- 百度ueditor struts2图片上传问题解决方案
- 【学神】1-16 网络管理相关命令
- NFS学习小结