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时候确实能打。

【比赛记录】国电投-风机叶片开裂故障预警比赛相关推荐

  1. 数据科学比赛经历分享——风机开裂故障预警比赛

    首先介绍一下比赛背景.这个比赛是中电投的一个关于风机开裂故障分析的预警的比赛. 训练数据有将近5万个样本,测试数据有将近9万个样本.数据来自于SCADA采集系统.采集了10分钟之内的75个特征值的数据 ...

  2. 地平线战投后 这家智能驾驶“新星”又获国电投“大平台”强劲助力

    智能驾驶国产供应链企业的市场机遇已经凸显. 国家交通运输部公开发布相关政策显示"鼓励结合需求开展自动驾驶载货示范应用",进一步推动商用车自动驾驶的商业化落地进程. 同时,车路协同示 ...

  3. 国电智深dcs c语言编程,国电智深DCS培训总结

    <国电智深DCS培训总结>由会员分享,可在线阅读,更多相关<国电智深DCS培训总结(17页珍藏版)>请在人人文库网上搜索. 1.总结本总结是以在北京学习课程的安排为依据,进行的 ...

  4. 伟世盾安助国电高级培训中心实现一网双管

    国电高级培训中心(国家电力高级培训中心)是一个正局级实施各类高级管理人员岗位培训和继续教育的基地,早在2002年就建成了具备国内一流信息化网络设备和管理系统.作为电力系统高级人才岗位培训和继续教育基地 ...

  5. lol 服务器维护 看不了比赛记录,LOL无法连接到比赛记录【解决方法】

    LOL无法连接到比赛记录原因 玩英雄联盟提示无法连接到比赛记录怎么办?其实出现这种问题大多则是因为系统服务器比赛记录出现故障所导致的问题,有时并非是玩家自身的问题,但不排除某些玩家因自身网络问题而导致 ...

  6. (不眠者①队)国电-F题:智能送药小车,广东赛区一等奖,推国赛,开源(代码+设计方案)

    国电 -- F题: 智能送药小车,所有源码暂时开源 目录 国电 -- F题: 智能送药小车,所有源码暂时开源 前言 一.题目 二.硬件部分 材料清单: 材料实物图: 设计方案: 三.代码部分 数字识别 ...

  7. 【arc101】比赛记录

    这场还好切出了D,rt应该能涨,然而这场的题有点毒瘤,700分的D没多少人切,更别说EF了.(暴打出题人)既然这样,干脆就水一篇博客,做个简单的比赛记录. C - Candles 这题是一道一眼题,花 ...

  8. 通信系统的monte carl仿真_深国电公司电力物联仿真检测系统建成投运

    5月25日,深国电公司电力线通信应用技术实验室(以下简称"深国电实验室")电力物联仿真检测系统建成投运,标志着深国电在电力物联网实用化方面迈出重要一步. 为了满足电力用户对电网质量 ...

  9. 报名国电没有计算机二级,想进入国电,捧起“铁饭碗”?没问题,这几个专业助你成功...

    公务员.事业编制以外,比较稳定的工作是国有企业和央企业,与公务员和事业单位的竞争压力相比,中国国有企业和央企业每年招工的人数比较多,而且手续也没那么复杂,在许多国营企业中,国家电网是电力行业的领头羊. ...

最新文章

  1. jvm二:类加载,连接,初始化
  2. 如何自学Android--转
  3. AKI-H8串口通信
  4. c语言删掉注释,c语言删除注释
  5. 腾讯的一道链表笔试题【总结】
  6. Java 虚拟机学习笔记 | 运行时数据区总结
  7. 广西科技大学计算机考研,广西科技大学研究生院
  8. python数据分析师工资待遇_预测python数据分析师的工资
  9. 怎样在接口地址中添加请求头参数_jmeter5.3做soap接口性能测试配置
  10. Sigmod/Softmax变换
  11. HDU1176:免费馅饼(dp,数字三角形的应用)
  12. Java中必须了解的常用类
  13. 简单的POST sql注入
  14. python如何调用dll库中的函数_Python调用DLL动态库函数读写CPU卡
  15. [Java]批量生成二维码
  16. editplus文本编辑器添加语法高亮
  17. SpringBoot整合Redis + SpringCache + Protobuf,优雅地实现key-value键值对存储DEMO。
  18. Base64与Gzip编解码插件
  19. YOLOV3—进行车辆检测
  20. opporeno3详细参数_opporeno3pro参数配置详情-opporeno3pro手机性能评测

热门文章

  1. 视频提取gif如何操作?教你用gif制作工具快速截取gif
  2. AI Studio 精品项目 | PP-OCR的ONNXRunTime部署
  3. 【Linux编程】二、Linux常见工具和项目开发(思维导图总结)
  4. IOS 改变图片尺寸和大小方法
  5. 网站做SEO优化需要建立自己的词库
  6. BLEU score 是什么评估指标?
  7. 跆拳道考级换带内容(WTF)
  8. 用FME创建AutoCAD的尺寸注记
  9. Linux iptables命令详解
  10. strcpy实现代码