国电投-风机叶片开裂故障预警比赛(记录)

news2024/11/13 10:08:28

1 前言

 1-1 简介

        DataFountain平台举办的比赛,赛题:风机叶片开裂故障预警。以下是比赛链接:风机叶片开裂故障预警 Competitions - DataFountain

1-2 任务背景

        SCADA是风场设备管理、监测、和控制的重要系统,通过实时收集风机运行的环境参数、工况参数、状态参数和控制参数使风场管理者能够实时了解风电装备资产的运行和健康状态。基于SCADA数据建立叶片开裂模型,对早期叶片开裂故障进行告警,可以避免风场因叶片开裂导致的更大损失,提升风机运行稳定性,提升机组发电量。本质为分类任务,根据风力发电机给出的多维度信息确定是否会在一周内发生故障。难点在于有75个维度的特征信息,所以在此次任务中,选择使用经典机器学习算法xgboost完成。        

1-3  数据介绍

        其中比赛官网给出了风力发电机75个维度的信息,部分特征属性如下所示。

轮毂转速,轮毂角度,叶片1角度,叶片2角度,叶片3角度,变桨电机1电流,变桨电机2电流
叶片1电池箱温度,叶片2电池箱温度,叶片3电池箱温度,叶片1变桨电机温度,叶片2变桨电机温度,
叶片3变桨电机温度,叶片1变频器箱温度,叶片2变频器箱温度,叶片3变频器箱温度,叶片1超级电容电压,
叶片2超级电容电压,叶片3超级电容电压,驱动1晶闸管温度,驱动2晶闸管温度,驱动3晶闸管温度,驱动1输出扭矩,驱动2输出扭矩,驱动3输出扭矩

        在大数据挖掘比赛中,除了模型的选择要到位,其特征工程的重要性也不言而喻,在特征工程中,特征选择是其中的重头戏,因为在大数据挖掘中,给出的数据特征数非常多,直接利用大量的特征开始进行模型训练,会非常耗时且效果并不好。因此特征选择就显得十分重要,特征选择需要挑选出那些有效的特征,从而代入到后面的训练模型中。而xgboost根据每个特征进行分裂构建树进行建模,检索每个属性的重要性得分。

  2 任务实现

  2-1 数据整合

        比赛官方提供了多个csv文件作为训练集存放在train文件夹中,并且单独提供了train_labels.csv 作为用户训练的标注信息。首先需要将label与训练预料进行对应。

2-1-1 导入工具库

import pandas as pd
import numpy as np 
import os
import torch
from tqdm import tqdm
from sklearn.preprocessing import scale
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
from sklearn.metrics import accuracy_score
from sklearn.metrics import recall_score
from matplotlib.font_manager import FontProperties

2-1-2 查看file_name与label

tranin_label = pd.read_csv('/home/zhenhengdong/WORk/Relation_Extraction/Jupyter_files/Codes/Untitled Folder/风机叶片开裂故障预警数据集/train_labels.csv')

        file_name字段表示的是csv的文件名,ret表示的对应文件名中所有数据的label。

   2-1-3 组合file_name与label的对应字典

file_name_label = {}
for index in tqdm(range(len(tranin_label))):
    file_name = tranin_label['file_name'][index]
    label = tranin_label['ret'][index]
    file_name_label[file_name] = label

 查看csv文件与label的字典。

2-1-4  将训练数据的csv文件全部组合

#遍历获得文件
def FilesPath(path):
    '''
    path: 目录文件夹地址
    返回值:列表,pdf文件全路径
    '''
    filePaths = [] # 存储目录下的所有文件名,含路径
    for root,dirs,files in os.walk(path):
        for file in files:
            filePaths.append(os.path.join(root,file))
    return filePaths
Total_file = FilesPath('/home/zhenhengdong/WORk/Relation_Extraction/Jupyter_files/Codes/Untitled Folder/风机叶片开裂故障预警数据集/train')
#将多个csv文件组合,并且将label字段添加
data = pd.DataFrame()
for file_path in tqdm(Total_file[:100]):
    file_name = file_path.split('/')[-1]
    label = file_name_label[file_name]
    df = pd.read_csv(file_path,encoding='utf8')
    df['label'] = [label]* len(df)
    df_data = pd.DataFrame(df)
    data = pd.concat([data,df_data])
# 重新设置索引 从0开始
data.reset_index(drop=True, inplace=True)
data.to_csv(Total_data_save_path,index = False,encoding='utf8')

未整合label字段之前的数据。 

添加label之后的数据。 

 2-2 Xgboost 任务实现

2-2-1 数据集划分

#读取数据
Total_data = pd.read_csv(Total_data_save_path)
#数据集划分并存储
train_data,test_data = train_test_split(Total_data,test_size=0.1, random_state=42)
train_data.to_csv(train_data_path,index=False,header=True,encoding="utf-8")
test_data.to_csv(test_data_path,index=False,header=True,encoding="utf-8")

2-2-2 np.loadtxt读取数据

        所有字段的数据都为数值型,可以使用np.loadtxt()读取数据。

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)

2-2-3 选取X与Y

         将数据中的75个维度作为X,最后一列作为Y。

TrainX_data = torch.from_numpy(train_XY[:, :-1]) 
TrainY_data = torch.from_numpy(train_XY[:, [-1]])# 取最后1列

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

 2-2-4 调用XGBClassifier模型

# plot learning curve
from xgboost import XGBClassifier
from sklearn.metrics import accuracy_score
from matplotlib import pyplot
# fit model no training data
model = XGBClassifier(
    max_depth=3, # 每一棵树最大深度,默认6;
    learning_rate=0.1, # 学习率,每棵树的预测结果都要乘以这个学习率,默认0.3;
    n_estimators=100,  
    objective='reg:logistic')
eval_set = [(TrainX_data, TrainY_data), (TestX_data, TestY_data)]
model.fit(TrainX_data, TrainY_data, eval_metric=["error", "logloss"], early_stopping_rounds=10,eval_set=eval_set, verbose=True)

# make predictions for test data
y_pred = model.predict(TestX_data)
predictions = [round(value) for value in y_pred]
# evaluate predictions
accuracy = accuracy_score(TestY_data, predictions)
print("Accuracy: %.2f%%" % (accuracy * 100.0))

 2-2-5  查看准召率

predictions = [round(value) for value in y_pred]
# evaluate predictions
accuracy = accuracy_score(TestY_data, predictions)
print("Accuracy: %.2f%%" % (accuracy * 100.0))

 2-2-6 查看loss

# retrieve performance metrics
results = model.evals_result()
epochs = len(results['validation_0']['error'])
x_axis = range(0, epochs)
# plot log loss
fig, ax = pyplot.subplots()
ax.plot(x_axis, results['validation_0']['logloss'], label='Train')
ax.plot(x_axis, results['validation_1']['logloss'], label='Test')
ax.legend()
pyplot.ylabel('Log Loss')
pyplot.title('XGBoost Log Loss')
pyplot.show()

 2-2-7 查看分类错误率

# plot classification error
fig, ax = pyplot.subplots()
ax.plot(x_axis, results['validation_0']['error'], label='Train')
ax.plot(x_axis, results['validation_1']['error'], label='Test')
ax.legend()
pyplot.ylabel('Classification Error')
pyplot.title('XGBoost Classification Error')
pyplot.show()

 2-2-8 查看真实值与预测值

fig = plt.gcf()
fig.set_size_inches(6, 5)
myfont = FontProperties('SimSun')
plt.title('Prediction and GroundTruth', fontproperties=myfont, fontsize=15)
plt.scatter(np.arange(len(TestY_data)), TestY_data.tolist(), label='Prediction', s=20)
plt.scatter(np.arange(len(predictions)), predictions, label='GroundTruth', s=20)
plt.xlabel('', fontproperties=myfont, fontsize=15)
plt.ylabel('Power generation', fontproperties=myfont, fontsize=15)
plt.legend()
plt.show()

2-2-9 查看重要特征

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

 3 后记

        XGboos在处理多维度X时候确实能打。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/189118.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

oracle direct path read等待事件处理案例

一 问题描述 收到短信告警,提示direct path read(110)。 直接路径读取不过SGA缓存,直接从磁盘上读数据,每次查询都会产生大量的物理读,导致IO比较高,影响数据库性能。 二 排查思路 生成AWR报告及ASH报告&#xff0…

springboot 整合mybatis-plus的自动生成代码包含service和controller

版本信息springboot&#xff1a;<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.13.RELEASE</version></parent>mybatis相关依赖版本如下&#xff1a…

压缩包文件上传导致覆盖rce

制作恶意压缩包 tgao.jsp文件内容&#xff1a; <html> <body><%out.println("zip slip getshell.");%> </body> </html>编写python脚本将jsp文件内容内容压缩至DocSystem.war中&#xff0c;并指定name为../../DocSystem/tgao.jsp&am…

ElasticSearch - RestClient查询文档

目录 查询文档-快速入门 查询文档-match查询 查询文档-精确查询 查询文档-布尔查询 查询文档-排序和分页 查询文档-高亮显示 查询文档-快速入门 文档的查询基本步骤包括&#xff1a; (1)准备Request对象(2)准备请求参数&#xff0c;构建查询条件(3)发起请求&#xff0c;得…

OpenSSL下载安装教程

OpenSSL下载 &#xff08;加急&#xff09;下载地址&#xff1a;Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions 首先&#xff0c;进入官网 Shining Light Productions - Home &#xff0c;可以看到如下界面&#xff1a; 这里演示用的版本是V1.1的版…

nodejs+vue考研信息查询系统vscode项目

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 2 第3章 系统分析 3 3.1 需求分析 3 3.2 系统可行性分析 4 3.2.1技术可行性&#xff1a;技术背景 4 3.2.2经…

2023蓝桥杯学习与刷题建议

前两天天给你们组了队&#xff0c;经过两天发现各位都有这样的问题&#xff1a; 不愿意交流。小组不会规划刷题计划。可能是因为没有人带头和具体刷题计划&#xff0c;所以都处于迷茫&#xff0c;不交流、不刷题。还有可能是大家都不认识&#xff0c;都比较羞涩。同时也有我个…

OSCP_VULHUB_DC: 2

文章目录前言信息收集Web账号密码爆破ssh登录绕过rbash限制git提权前言 kali攻击&#xff1a;192.168.132.139 目标主机&#xff1a;192.168.132.146 环境配置参照https://www.vulnhub.com/entry/dc-2,311/ 下载&#xff1a;https://download.vulnhub.com/dc/DC-2.zip 信息收…

开发第四天+第五天读书笔记

首先用C语言实现内存写入: 光是成功的让画面黑屏是不够的&#xff0c;还是要往画面上画点什么。首先修改naskfunc.nas。写成这样&#xff1a; ; naskfunc ; TAB4[FORMAT "WCOFF"] ; 创建对象文件的模式 [INSTRSET "i486p"] …

Linux进程间通信(基于管道通信)

目录 一、进程间通信 1.1 通信目的 1.2 通信发展 二、管道 2.1 管道的概念和分类 2.2 匿名管道 2.2.1 匿名管道&#xff08;基于父子血缘关系) 2.2.2 匿名管道单向性 2.2.3 匿名管道是内存级别文件 2.2.4 匿名管道指令实现 2.2.5 代码实现匿名管道&#xff08;pipe()…

一文讲清楚shell 中的变量是怎么回事

目录 变量和引用 一&#xff0c; 什么是变量 二&#xff0c; 根据数据类型分类 三&#xff0c; 根据作用域分类 1、环境变量 2、普通变量 四&#xff0c; 变量的定义 1、变量定义示例&#xff1a;变量名变量值 2、位置参数和预定义变量 五&#xff0c; shell中的引用 六&…

【GPLT 二阶题目集】L2-022 重排链表

输入格式&#xff1a; 每个输入包含1个测试用例。每个测试用例第1行给出第1个结点的地址和结点总个数&#xff0c;即正整数N (≤10^5 )。结点的地址是5位非负整数&#xff0c;NULL地址用−1表示。 接下来有N行&#xff0c;每行格式为&#xff1a; Address Data Next 其中Addres…

深拷贝和浅拷贝对比

JavaScript存储引用数据&#xff08;对象&#xff09;都是存地址的&#xff0c;存放在堆内存中的对象&#xff0c;在栈内存中存的是一个指针&#xff0c;这个指针指向堆内存一个位置。再从堆内存中取得所需的数据。 深拷贝&#xff1a;对数据进行拷贝之后&#xff0c;修改拷贝之…

Python:从协议到抽象基类

本章话题是接口&#xff1a;鸭子类型代表特征动态协议&#xff1b; 使接口更明确、能验证实现是否副了规定的抽象基类ABC(Abstact Base Class).Python语言诞生15年后&#xff0c;Python2.6中才引入了抽象基类&#xff0c;抽象基类。对于java、C#类似的语言&#xff0c;会觉得鸭…

DevSecOps敏捷安全技术金字塔V3.0正式发布

2022年12月28日&#xff0c;由悬镜安全主办&#xff0c;3S-Lab软件供应链安全实验室、Linux基金会OpenChain社区、ISC、OpenSCA社区联合协办的第二届全球DevSecOps敏捷安全大会&#xff08;DSO 2022&#xff09;已通过全球直播的形式圆满举行。本届大会以“共生敏捷进化”为主题…

HTB_Markup_xml注入读ssh私钥进程注入

文章目录信息收集xml注入ssh 私钥连接提权信息收集 使用如下参数可以探测具体版本&#xff0c;只使用-sV -v无此效果 nmap -sC -A -Pn 10.129.95.192是个登录页面 弱口令&#xff0c;只有admin-password成功登录 几个页面&#xff0c;只有order.php页面可以与后端交互并传递x…

【Kubernetes 企业项目实战】06、基于 Jenkins+K8s 构建 DevOps 自动化运维管理平台(中)

目录 一、基于 Jenkinsk8sGitDocker Hub 等技术链构建企业级 DevOps 容器云平台 1.1 安装 Jenkins 1.1.1 安装 nfs 服务 1.1.2 在 kubernetes 中部署 jenkins 1.2 配置 Jenkins ​1.2.1 获取管理员密码 1.2.2 安装插件 1.2.3 创建第一个管理员用户 1.3 测试 jenkins 的…

VMware Workstation中安装Kali 2022

VMware Workstation中安装Kali 2022 前言 开工了&#xff0c;笔记本中的相关工具该更新了&#xff0c;今天记录一下。 首先记录的是在VMware Workstation中安装kali&#xff0c;这个过程比较简单。 我只是想扩充一下自己的博客&#xff0c;另外可以给入门人员一个参考。 下载…

react的JSX语法

1.jsx基本使用 1 createElement() 的问题 繁琐不简洁。不直观&#xff0c;无法一眼看出所描述的结构。不优雅&#xff0c;用户体验不爽。 2 JSX 简介 JSX 是 JavaScript XML 的简写&#xff0c;表示在 JavaScript 代码中写 XML&#xff08;HTML&#xff09; 格式的代码。 优…

通信原理笔记—增量调制(∆M)

目录 概述&#xff1a; 简单增量调制(∆M)原理&#xff1a; 编码器与解码器 简单△M的过载问题&#xff1a; 增量总和(∆-Σ)调制 数字压扩自适应增量调制&#xff1a; 不同编码调制方式的误码性能分析&#xff1a; 概述&#xff1a; 最简单的DPCM是增量调制&#xff0c…