【比赛记录】国电投-光伏电站人工智能运维大数据处理分析比赛

这篇具有很好参考价值的文章主要介绍了【比赛记录】国电投-光伏电站人工智能运维大数据处理分析比赛。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

1-1 简介

        DataFountain平台举办的比赛,赛题:光伏电站人工智能运维大数据处理分析。以下是比赛链接:光伏电站人工智能运维大数据处理分析 Competitions - DataFountain

1-2 任务背景

        在分析光伏发电原理的基础上,论证了辐照度、光伏板工作温度等影响光伏输出功率的因素,通过实时监测的光伏板运行状态参数和气象参数建立预测模型,预估光伏电站瞬时发电量。其中光伏板运行状态参数包括太阳能电池板背板温度、其组成的光伏阵列的电压和电流;气象参数包括太阳能辐照度、环境温湿度、风速、风向等。本质为回归任务,通过多个维度的X去预测发电量Y。

1-3 数据介绍

 其中比赛官网给出了各个字段的详细介绍;

表格字段及含义如下:
  ID:当前记录条数; 
  板温:光伏电池板背测温度;
  现场温度:光伏电站现场温度;
  转换效率:为计算得到的平均转换效率;
  转换效率A:数据采集点A处的光伏板转换效率;
  转换效率B:数据采集点B处的光伏板转换效率;
  转换效率C:数据采集点C处的光伏板转换效率;
  转换效率D:数据采集点D处的光伏板转换效率;
  电压A:为数据采集点A处汇流箱电压值;
  电压B:为数据采集点B处汇流箱电压值;
  电压C:为数据采集点C处汇流箱电压值;
  电压D:为数据采集点D处汇流箱电压值;
  电流A:为采集点A处汇流箱电流值;
  电流B:为采集点B处汇流箱电流值;
  电流C:为采集点C处汇流箱电流值;
  电流D:为采集点D处汇流箱电流值;
  功率A:为采集点A处的功率Pa,P=UI;
  功率B:为采集点B处的功率Pb,P=UI;
  功率C:为采集点C处的功率Pc,P=UI;
  功率D:为采集点D处的功率Pd,P=UI;
  平均功率:为A、B、C三点功率的平均值:(Pa+Pb+Pc)/3;
  风速:为光伏电厂现场风速测量值;
  风向:为光伏电厂现场风的来向;
  预估发电量为:需经过参赛者分析计算得到的预测功率值;

2 任务实现

2-1 深度学习-多元线性回归

        赛题任务是根据多个自变量X(板温、温度等) 来确定唯一的因变量Y(光伏发电量),非常典型的多元线性回归任务。多元回归任务的公式如下:

        【比赛记录】国电投-光伏电站人工智能运维大数据处理分析比赛

 2-1-1 导入工具库

import pandas as pd
import numpy as np
import torch 
import torch.nn
from sklearn.preprocessing import scale
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties

2-1-2  查看数据

train_data_path = '/home/zhenhengdong/WORk/Relation_Extraction/Jupyter_files/Codes/Untitled Folder/public.train.csv'
Train_data = pd.read_csv(train_data_path)
test_data_path = '/home/zhenhengdong/WORk/Relation_Extraction/Jupyter_files/Codes/Untitled Folder/test_data.csv'
Test_data = pd.read_csv(test_data_path)

【比赛记录】国电投-光伏电站人工智能运维大数据处理分析比赛【比赛记录】国电投-光伏电站人工智能运维大数据处理分析比赛

2-1-3  读入数据

        采用np.loadtxt()方法读入数据。原始数据中每一行包含20个维度的X与一个Y,将X和Y进行分割。

#跳过表头,并且设置数据格式
train_XY  = np.loadtxt(train_data_path, delimiter=',', skiprows = 1,dtype=np.float32)
test_XY = np.loadtxt(test_data_path, delimiter=',', skiprows = 1,dtype=np.float32)

#分割多维度X和Y,取出前19列作为特征X,最后一列作为Y。
TrainX_data = torch.from_numpy(train_XY[:, 1:-1])# 除去id后 取前19列
TrainY_data = torch.from_numpy(train_XY[:, [-1]])# 取最后1列

TestX_data = torch.from_numpy(test_XY[:, 1:-1])# 除去id后 取前19列 
TestY_data = torch.from_numpy(test_XY[:, [-1]])# 取最后1列

 2-1-4 数据归一化

#训练数据归一化
TrainX_data, TrainY_data = torch.FloatTensor(scale(TrainX_data)), torch.unsqueeze(torch.FloatTensor(TrainY_data), dim=1)
#测试数据归一化
TestX_data, TestY_data = torch.FloatTensor(scale(TestX_data)), torch.unsqueeze(torch.FloatTensor(TestY_data), dim=1)

 2-1-5 定义模型结构

        由于是多元线性回归任务,在模型定义中采用线性层和激活函数搭配的方式进行构建。通过两个线性层进行变换,两个线性层之间设定激活函数,模型设计时采用Relu()函数(也可以替换为其他激活函数,比如RRelu()、Tanh()等)作为激活函数。

class Net(torch.nn.Module):
    def __init__(self, input_num, hidden_num, output_num):
        super(Net, self).__init__()
        self.net = torch.nn.Sequential(
            torch.nn.Linear(input_num, hidden_num),
            torch.nn.ReLU(),
            torch.nn.Linear(hidden_num, output_num),
            torch.nn.ReLU()
        )
    def forward(self, input):
        return self.net(input)

2-1-6 实例化模型

        模型实例化中,将模型的输入维度设定为19,采用了数据中的19个维度(除去设备id),并借助中间层进行过渡,将19个维度的信息转换为10维度,之间采用激活函数进行变换,最后将10维度的数据转换为1维,得到最终的预测结果。

【比赛记录】国电投-光伏电站人工智能运维大数据处理分析比赛

net = Net(input_num=19, hidden_num=10, output_num=1)

【比赛记录】国电投-光伏电站人工智能运维大数据处理分析比赛

 2-1-7 设置超参数

        将训练轮次、学习率、batch_size和每次训练的step进行设置。

epochs = 500
learning_rate = 0.001
batch_size = 10
total_step = int(TrainX_data.shape[0] / batch_size)

2-1-8 定义优化器与损失函数  

        采用Adam优化器,Adam优化器结合了AdaGrad和RMSProp两种优化算法的优点。对梯度的一阶矩估计(First Moment Estimation,即梯度的均值)和二阶矩估计(Second Moment Estimation,即梯度的未中心化的方差)进行综合考虑,计算出更新步长。

        损失函数测量输入x和目标y中每个元素之间的均方误差。

optimizer = torch.optim.Adam(net.parameters(), lr=learning_rate)
loss_func = torch.nn.MSELoss()

2-1-9 定义参数重置函数

        保证每次重新执行for循环时从开始训练。

def weight_reset(m):
    if isinstance(m, torch.nn.Conv2d) or isinstance(m, torch.nn.Linear):
        m.reset_parameters()

2-1-10 开始训练

%%time
net.apply(weight_reset)
epoch_train_loss_value = []
step_train_loss_value = []
epoch_valid_loss_value = []

for i in range(epochs):
    for step in range(total_step):
        xs = TrainX_data[step * batch_size:(step + 1) * batch_size, :]
        ys = TrainY_data[step * batch_size:(step + 1) * batch_size]
        prediction = net(xs)
        loss = loss_func(prediction, ys)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        step_train_loss_value.append(loss.cpu().detach().numpy())
    valid_loss = loss_func(net(TestX_data), TestY_data)
    epoch_valid_loss_value.append(valid_loss)
    epoch_train_loss_value.append(np.mean(step_train_loss_value))
    if i%50==0:
        print('epoch={:3d}/{:3d}, train_loss={:.4f}, valid_loss={:.4f}'.format(i + 1,
                                                                    epochs,
                                                                    np.mean(step_train_loss_value),
                                                                    valid_loss))

【比赛记录】国电投-光伏电站人工智能运维大数据处理分析比赛

2-1-11 损失值可视化 

new_epoch_valid_loss_value = []
for valid_loss_item in epoch_valid_loss_value:
    new_epoch_valid_loss_value.append(valid_loss_item.detach().numpy().tolist())
#画图
fig = plt.gcf()
fig.set_size_inches(10, 5)

plt.xlabel('Epochs', fontsize=15)
plt.ylabel('Loss', fontsize=15)
plt.plot(epoch_train_loss_value, 'blue', label='Train loss')
plt.plot(new_epoch_valid_loss_value, 'red', label='Valid loss')
plt.legend(loc='best')
plt.title('Training and Validation loss', fontsize=15)
plt.show()

【比赛记录】国电投-光伏电站人工智能运维大数据处理分析比赛

2-1-12 模型预测可视化

#生成预测值
prediction = []
for i in range(TestX_data.shape[0]):
    prediction.append(net(TestX_data[i, :]).item())
#对真实值处理,由Tensor转化为list
new_TestY_data = []
for TestY_data_item in TestY_data:
    new_TestY_data.append(TestY_data_item.detach().numpy().tolist()[0][0][0])
#画图
fig = plt.gcf()
fig.set_size_inches(10, 5)

myfont = FontProperties('SimSun')

plt.title('Prediction and GroundTruth', fontproperties=myfont, fontsize=15)
plt.scatter(np.arange(len(prediction)), prediction, label='Prediction', s=20)
plt.scatter(np.arange(len(prediction)), new_TestY_data, label='GroundTruth', s=20)
plt.xlabel('', fontproperties=myfont, fontsize=15)
plt.ylabel('Power generation', fontproperties=myfont, fontsize=15)
plt.legend()
plt.show()

【比赛记录】国电投-光伏电站人工智能运维大数据处理分析比赛【比赛记录】国电投-光伏电站人工智能运维大数据处理分析比赛

 【比赛记录】国电投-光伏电站人工智能运维大数据处理分析比赛

 2-1-13 计算方差得分

        采用方差得分作为评价指标。explained_variance_score()方法解释回归模型的方差得分,其值取值范围是[0,1],越接近于1说明自变量越能解释因变量的方差变化,值越小则说明效果越差。

from sklearn.metrics import explained_variance_score
score = explained_variance_score(prediction, new_TestY_data)

【比赛记录】国电投-光伏电站人工智能运维大数据处理分析比赛

 2-2  机器学习-xgboost

        XGBoost(eXtreme Gradient Boosting)又叫极度梯度提升树,是boosting算法的一种实现方式。针对分类或回归问题,有非常好的效果。

2-2-1 导入工具库

import xgboost as xgb
from sklearn.metrics import explained_variance_score

 2-2-2 导入数据

train_XY  = np.loadtxt(train_data_path, delimiter=',', skiprows = 1,dtype=np.float32)
test_XY = np.loadtxt(test_data_path, delimiter=',', skiprows = 1,dtype=np.float32)
TrainX_data = torch.from_numpy(train_XY[:, 1:-1])# 除去id后 取前19列 
TrainY_data = torch.from_numpy(train_XY[:, [-1]])# 取最后1列

TestX_data = torch.from_numpy(test_XY[:, 1:-1])# 除去id后 取前19列 
TestY_data = torch.from_numpy(test_XY[:, [-1]])# 取最后1列

2-2-3 构建模型

        参数详解

max_depth=3 每一棵树最大深度,默认6;
learning_rate=0.1 学习率,每棵树的预测结果都要乘以这个学习率,默认0.3;
n_estimators=100 使用多少棵树来拟合,也可以理解为多少次迭代。默认100;
objective='reg:linear' 此默认参数与 XGBClassifier 不同;
booster='gbtree' 有两种模型可以选择gbtree和gblinear。gbtree使用基于树的模型进行提升计算,gblinear使用线性模型进行提升计算。默认为gbtree;
gamma=0 叶节点上进行进一步分裂所需的最小"损失减少"。默认0;
min_child_weight=1 可以理解为叶子节点最小样本数,默认1;
subsample=1     训练集抽样比例,每次拟合一棵树之前,都会进行该抽样步骤。默认1,取值范围(0, 1];
subsample=1 训练集抽样比例,每次拟合一棵树之前,都会进行该抽样步骤。默认1,取值范围(0, 1];
colsample_bytree=1 每次拟合一棵树之前,决定使用多少个特征,参数默认1,取值范围(0, 1];
reg_alpha=0 默认为0,控制模型复杂程度的权重值的 L1 正则项参数,参数值越大,模型越不容易过拟合;
reg_lambda=1     默认为1,控制模型复杂度的权重值的L2正则化项参数,参数越大,模型越不容易过拟合;
random_state=0)           随机种子;
model = xgb.XGBRegressor(max_depth=3,          # 每一棵树最大深度,默认6;
                        learning_rate=0.1,      # 学习率,每棵树的预测结果都要乘以这个学习率,默认0.3;
                        n_estimators=100,        # 使用多少棵树来拟合,也可以理解为多少次迭代。默认100;
                        objective='reg:linear',   # 此默认参数与 XGBClassifier 不同
                        booster='gbtree',         # 有两种模型可以选择gbtree和gblinear。gbtree使用基于树的模型进行提升计算,gblinear使用线性模型进行提升计算。默认为gbtree
                        gamma=0,                 # 叶节点上进行进一步分裂所需的最小"损失减少"。默认0;
                        min_child_weight=1,      # 可以理解为叶子节点最小样本数,默认1;
                        subsample=1,              # 训练集抽样比例,每次拟合一棵树之前,都会进行该抽样步骤。默认1,取值范围(0, 1]
                        colsample_bytree=1,       # 每次拟合一棵树之前,决定使用多少个特征,参数默认1,取值范围(0, 1]。
                        reg_alpha=0,             # 默认为0,控制模型复杂程度的权重值的 L1 正则项参数,参数值越大,模型越不容易过拟合。
                        reg_lambda=1,            # 默认为1,控制模型复杂度的权重值的L2正则化项参数,参数越大,模型越不容易过拟合。
                        random_state=0)           # 设定随机种子
model.fit(TrainX_data,TrainY_data)
test_predict=model.predict(TestX_data)
train_predict = model.predict(TrainX_data)

2-2-4  计算方差得分

【比赛记录】国电投-光伏电站人工智能运维大数据处理分析比赛

2-2-5 查看重要特征

from xgboost import plot_importance
plot_importance(model)
plt.show()

【比赛记录】国电投-光伏电站人工智能运维大数据处理分析比赛

 2-2-6 模型预测可视化

new_TestY_data = []
for TestY_data_item in TestY_data:
    new_TestY_data.append(TestY_data_item.detach().numpy().tolist()[0])
#画图
fig = plt.gcf()
fig.set_size_inches(10, 5)

myfont = FontProperties('SimSun')

plt.title('Prediction and GroundTruth', fontproperties=myfont, fontsize=15)
plt.scatter(np.arange(len(new_TestY_data)), test_predict.tolist(), label='Prediction', s=20)
plt.scatter(np.arange(len(new_TestY_data)), new_TestY_data, label='GroundTruth', s=20)
plt.xlabel('', fontproperties=myfont, fontsize=15)
plt.ylabel('Power generation', fontproperties=myfont, fontsize=15)
plt.legend()
plt.show()

【比赛记录】国电投-光伏电站人工智能运维大数据处理分析比赛文章来源地址https://www.toymoban.com/news/detail-432164.html

到了这里,关于【比赛记录】国电投-光伏电站人工智能运维大数据处理分析比赛的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 人工智能生成内容(AIGC)总览记录(认知篇)!!!

    一、AIGC 引入 1.1 AIGC 定义 qquad AIGC 又称生成式 AI (Generative AI) 或人工智能生成内容,是继专业生产内容、用户生产内容 之后的新型内容创作方式,可以在 对话 、 故事 、 图像 、 视频 和 音乐制作 等方面,打造新的 数字内容生成与交互 形式。 与所有人工智能技术一样,A

    2024年02月16日
    浏览(46)
  • 人工智能与大数据技术导论-13011知识点记录

    2024年开始,因自考改革,新增了《人工智能与大数据技术导论》科目(豆瓣链接:https://book.douban.com/subject/30765078/) 下面是我依据考纲整理的知识点: 第1章“人工智能概述” 需要掌握:AI概念和历史发展;AI技术的成熟度;AI与云计算和大数据的关系。 1.1、AI概念: 人工智

    2024年03月24日
    浏览(35)
  • 【概念记录】什么是 行最简形 矩阵?| 人工智能 面试题:解释一下集成学习(Ensemble Learning)的概念和优势。| 集成学习 概念,优势,方法

      “生活不是电影,生活比电影苦。”     🎯作者主页: 追光者♂🔥          🌸个人简介:   💖[1] 计算机专业硕士研究生💖   🌿[2] 2023年城市之星领跑者TOP1(哈尔滨)🌿   🌟[3] 2022年度博客之星人工智能领域TOP4🌟   🏅[4] 阿里云社区特邀专家博主🏅   🏆[5] CSD

    2024年02月06日
    浏览(40)
  • 含光伏发电的变电站供电系统设计

    面对全球日趋严重的能源危机问题,可再生能源的开发和利用得到了人们的高度重视。其中辐射到地球太阳能资源是十分富饶的,绿色清洁的太阳能不会危害我们的生存环境,因而受到了人们的广泛利用。光伏发电作为可再生能源被广泛的应用,技术不断革新。为了提高光伏

    2024年02月05日
    浏览(28)
  • 无人机巡检技术革命性变革光伏电站运维管理

    在中国广袤的大地上,光伏电站如雨后春笋般崛起,晶体硅组件板在阳光下熠熠生辉,为人们带来了源源不断的绿色能源。然而,随着光伏产业的迅猛发展,电站运维管理面临着前所未有的挑战。而无人机巡检技术的引入,为光伏电站的运维管理带来了革命性的变革。 相比传

    2024年04月14日
    浏览(38)
  • 含风电-光伏-光热电站电力系统N-k安全优化调度模型

    目录 1 主要内容 2 部分程序 3 部分结果 4 下载链接 该程序参考《光热电站促进风电消纳的电力系统优化调度》光热电站模型,主要做的是考虑N-k安全约束的含义风电-光伏-光热电站的电力系统优化调度模型,从而体现光热电站在调度灵活性以及经济性方面的优势。同时代码

    2024年04月13日
    浏览(25)
  • 【记录】终端如何 进入conda环境,如何退出 conda(base)环境,终端快速进入Jupyter notebook的方法 | 人工智能面试题:什么是聊天机器人(Chatbot)?列举一些常用的

      “一个人走向末路往往是因为不遗余力地寻找捷径。”     🎯作者主页: 追光者♂🔥          🌸个人简介:   💖[1] 计算机专业硕士研究生💖   🌿[2] 2023年城市之星领跑者TOP1(哈尔滨)🌿   🌟[3] 2022年度博客之星人工智能领域TOP4🌟   🏅[4] 阿里云社区特邀专家博

    2024年02月07日
    浏览(44)
  • 什么是狭义人工智能、通用人工智能和超级人工智能?

    人工智能 (AI) 是一种机器智能,它模仿人类思维的解决问题和决策能力来执行各种任务。 。 人工智能使用机器学习和深度学习等算法和技术来学习、发展并在分配的任务中逐渐做得更好。根据人工智能可以复制的人类特征、现实世界的应用和心智理论的先决条件,人工智能

    2024年02月11日
    浏览(39)
  • 探索人工智能:深度学习、人工智能安全和人工智能编程(文末送书)

    人工智能知识对于当今的互联网技术人来说已经是刚需。但人工智能的概念、流派、技术纷繁复杂,选择哪本书入门最适合呢? 这部被誉为人工智能“百科全书”的《人工智能(第3版)》,可以作为每个技术人进入 AI 世界的第一本书。 购书链接,限时特惠5折 这本书是美国

    2024年02月03日
    浏览(76)
  • 【人工智能】人工智能和双曲几何

            作为人工智能技术的理论支撑,几何学是必不可少的;目前直接的几何技术有:计算几何--对集合体如点云处理有用;射影几何--对3d重构有用;双曲几何--在自然语言的词嵌入做基础数学模型,另外深度学习国外有双曲网络在应用。本文针对双曲几何进行探讨。

    2024年02月09日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包