机器学习第一次练手过程,记录于此。
使用pandas的read_csv()方法加载数据,然后使用concat()的方法分别将4个训练集和4个测试集合并到一起。
- 使用head()查看测试集和训练集前5行数据,可以看出训练集比测试集数据多出【实发辐照度】和【实际功率】两列。另外,测试集【id】列只是序号,对算法模型无影响,删除即可。
- 使用scatter()绘制【实发辐照度】和【实际功率】数据的散点图,可以看出,两列数据强相关。
- 使用info()查看数据基础信息,可以看出训练集和测试集数据并无空值。但时间数据为字符格式,需要处理。
- 使用describe()查看数据统计值,可以看出训练集和测试集各列数据并无缺失值。另外可以看出,训练集【实发辐照度】和【实际功率】两列数据50%数据为近似于0,而最大值远大于0。联想夜晚并无光照,故无辐照度和功率,处理数据时可作为参考。
- 使用Excel打开训练集和测试集数据,可以看出:
- 训练集给定3年的数据,而测试集只设计1年,可猜测年份对光伏功率无影响;
- 所有数据时间秒数皆为0,可猜测其对光伏功率无影响;
- 月、日、时、分对功率的影响无法判断,可提取处理作为特征,绘制散点图或计算相关性系数查看其与功率的相关性;
根据数据探索中的分析,可初步处理数据:
- 训练集:
- 从【时间】列提取月、日、时、分信息,作为新的特征添加到数据中;
- 删除【时间】列数据,或将其设为行索引(考虑选择模型时,或可使用时间序列模型);
- 因各特征量纲不同,故进行数据归一化处理;
- 测试集:
- 去除无用的【id】列;
- 从【时间】列提取月、日、时、分信息,作为新的特征添加到数据中;
- 进行数据归一化处理;
- 数据量较小,且为回归预测型需求,初步选择SVM模型的回归类型SVR算法;
- 因【实发辐照度】为强特征,故先预测实发辐照度,将其添加到测试集中,再预测光伏功率;
- 因是比赛数据,测试集无标签,故无法计算测试集准确率;
使用pandas的to_csv()方法,按要求保存数据,然后提交到比赛网站即可。
- 机器学习算法“特征为王”的时代,好的特征工程(如异常值删除、特征过滤、特征组合等)是算法提升的必备过程;
- 可以考虑使用2种以上模型预测数据,最后进行融合;
- 从专业角度出发进行改进。如本赛题,光伏功率可以使用时间序列法和神经网络等方法进行预测。
- DC_Data是赛题提供的数据;
- main.py 为程序入口代码;
- Load_Save_Data.py 为加载和保存数据代码;
- Data_Process.py 为数据预处理(特征工程)代码;
- Train_Predict.py 为训练、预测数据代码;
- DC_PV_Power_Predict_2018.ipynb 为初步拿到数据,在jupyter notebook上进行数据探索过程;
- Task_Info.doc 为赛题要求