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. Python 懂车帝车友圈--分析与实现
  2. oracle 27504,ora-27504 ora-27300 ora-27301 ora-27302
  3. Vulnhub靶机渗透之 AI: Web: 1
  4. 得意而忘乎形:谈葛水平的水墨画
  5. Halcon例程详解(基于卡尺工具的匹配测量方法) —— measure_stamping_part.hdev
  6. android wifi信号强度命令,Android显示wifi信号强度以及周边信号的代码
  7. 通过ssh访问git项目
  8. 计算机基础知识试题和答案
  9. 如何将word公式粘贴到动易CMS里面
  10. xlsx模块 前端_node模块之xlsx使用
  11. PostgreSQL服务端监听设置
  12. 计算机专业的会修电脑吗,常被错误理解的三大专业,计算机专业会修电脑,机械工程很是离谱...
  13. 室外管线lisp_AutoLISP语言在化工工艺室外管线设计中的应用
  14. java 生成pdf文件,添加图片
  15. CC2540\CC2541 资料整理
  16. 使用 Redux 和 Axios 获取数据
  17. html下拉框属性js,Html下拉框Js对象属性方法总结
  18. 论文笔记 | The effect of tax avoidance crackdown on corporate innovation
  19. UOS/Deepin V20 系统快捷键一览长图
  20. downsample_swc——将大脑固定在低分辨率后downsample对应的swc

热门文章

  1. Web基础(一) HTTP详解
  2. 在华为云专属月,找到开启互联网第二增长曲线的一把钥匙
  3. Python injector 依赖注入框架使用
  4. 个人计算机中的使用记录,电脑被人动过:如何查看别人在你电脑上的使用痕迹 -电脑资料...
  5. 判断过拟合 深度学习_深度学习—过拟合问题
  6. CV之FR:基于DIY人脸图像数据集(每人仅需几张人脸图片训练)利用Hog方法提取特征和改进的kNN算法实现人脸识别并标注姓名(标注文本标签)—(准确度高达100%)
  7. Python计算文本BLEU分数
  8. 【Android】用Cubism 2制作自己的Live2D——来制作动态壁纸吧!
  9. Axure RP 入门教程
  10. 【git克隆指定分支代码 到本地】