通过多台风机的数据预测风机的发电量。
- 数据来源:数据文件夹被命名为"区域赛训练集"。
- 数据类型:包含多台风机的时间序列数据,格式为CSV。
- 数据加载:使用Python的pandas库读取所有的CSV文件。
-
缺失值处理
:
- 使用风速数据填补'ROUND(A.WS,1)'中的缺省值。
- 其他缺失值使用前一个不为空的数据进行填充。
-
时间特征构造:从时间戳中提取小时、天、月作为新的特征。
-
延迟特征构造:对选定特征,如风速、风向等,创建它们过去几小时的值作为新的特征。
-
交互特征构造:创建特定特征之间的交互项,例如风速与风向、风速与温度和风速与压力的乘积。
-
聚合特征构造:计算过去24小时内的风速的平均值、最大值和最小值。
-
数据标准化:使用sklearn的StandardScaler对所有特征进行标准化,使其具有均值为0和标准差为1。
- 计算方法:对所有风机的特征数据进行两两的皮尔逊相关系数计算。
- 用途:衡量风机之间的特征相似性,为后续的聚类提供依据。
- 方法选择:使用sklearn的谱聚类方法。
- 聚类数量:根据皮尔逊相关系数的结果,选择将风机分为3类。
- 数据分配:根据每台风机的特征相似性,将其数据分配到相应的类别中。
- 模型选择:使用LightGBM回归模型。
- 损失函数:选择均方误差作为优化的损失函数。
- 超参数优化:使用Hyperopt库和TPE算法来搜索最佳的超参数。
- 模型保存:每个类别的训练好的模型都保存在"model"文件夹中。
- 数据预处理结果:成功地实现了特征选择、数据填充、异常值处理、特征缩放、时间特征生成、延迟特征生成、交互特征和聚合特征的方法。
- 聚类结果:根据皮尔逊相关系数,风机被成功地分为3个不同的类别。
- 预测性能:通过聚类后的独立模型训练,为不同类别的风机提供了更为精确的预测。
本实验的目标是使用预先训练的模型对风机的数据进行预测,并输出预测结果。我们将对输入数据进行一系列的处理,以确保数据准备工作符合模型的预期输入格式。
为保持模型输入的一致性,我们选定了以下特征:WINDSPEED、WINDDIRECTION、TEMPERATURE、HUMIDITY、PRESSURE。此外,还考虑了一系列扩展的特征,如时间特征和过去数据的滞后特征等。
交互特征是两个或多个特征之间的组合。我们为数据集添加了以下三个交互特征:
WINDSPEED_WINDDIRECTION: 风速与风向的乘积WINDSPEED_TEMPERATURE: 风速与温度的乘积WINDSPEED_PRESSURE: 风速与压力的乘积
为了捕捉到过去24小时的风速信息,我们添加了以下三个聚合特征:
WINDSPEED_24H_MEAN: 过去24小时的平均风速WINDSPEED_24H_MAX: 过去24小时的最大风速WINDSPEED_24H_MIN: 过去24小时的最小风速
- 数据中的缺失值使用前向填充法处理。
- 使用时间戳特征(
DATATIME)派生出小时、日、月的特征。 - 为每个选定的特征添加了最多三个的滞后特征。
- 对选择的特征进行了标准化。
我们为四个不同的模型加载了预训练的权重,这些模型使用LightGBM技术进行了训练。
对于每个加载的模型,我们都使用它进行预测。之后,我们使用给定的权重对所有模型的预测结果进行了平均,得到了最终的预测结果。
预测结果以CSV格式保存,包含风机ID、时间、预测输出等列。
结果展示:
比赛成果:
预选赛以0.78583的准确率排行第九,区域答辩晋级赛由于能力有限,不知如何对模型进行进一步的优化,最后只有0.68的准确率险入答辩赛场。