液压系统的状态监测

算法-xgboost

关于xgboost的原理网络上的资源很少,大多数还停留在应用层面,通过学习陈天奇博士的PPT地址和xgboost导读和实战 地址,希望读者可以对xgboost原理进行深入理解。

xgboost算法:用来评价各传感器之间的相关性,并且分析影响液压系统各部分(冷却系统、阀门状况、泵泄漏、液压蓄能器状况)的重要因素。本文利用xgboost算法对液压系统状态进行预测并进行分析,找出影响液压系统各功能正常运行的重要因素。

数据集

  • 液压系统状态监测数据集

数据集信息

数据集通过液压试验台实验获得。该试验台由一个主要工作和一个二次冷却过滤回路组成,它们通过油箱连接。系统循环重复恒定负载循环(持续时间60秒)并测量过程值,例如压力,体积流量和温度,同时定量改变四个液压部件(冷却器,阀门,泵和蓄能器)的状态。

属性信息

数据集包含原始过程传感器数据(即没有特征提取),这些数据被构造为矩阵(制表符分隔),其中行表示数据在循环内的循环和列。涉及的传感器有:

传感器名称 传感器
压力棒 PS1、PS2、PS3、PS4、PS5、PS6
电机功率 EPS1
振动 VS1
效率系数 SE
体积流量 FS1、FS2
温度 TS1、TS2、TS3、TS4
冷却效率 CE、CP

目标条件值在“profile.txt”(制表符分隔)中以循环方式注释。和以前一样,行号代表循环数。

列数 含义
冷却器条件 3:接近总故障 20:效能降低 100:全效能
阀门条件 100:最佳的切换状态 90:小滞后 80:重度滞后 73:接近完全失效
内部泵泄漏 0:无泄漏 1:弱泄漏 2:严重泄漏
液压蓄能器/杆 130:最佳压力 115:轻微减压 100:严重减压 90:接近完全失效
稳定标志 0:条件稳定 1:可能尚未达到静态条件

数据分析

加载数据

__author__ = "fpZRobert"
​
"""Hydraulic_system_status_monitoring-xgboost
"""
import os
import datetime
import numpy as np
import pandas as pd
import seaborn as sns
import xgboost as xgb
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.decomposition import PCA
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import LabelBinarizer
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import confusion_matrix, classification_report, f1_score
​
"""加载数据
"""
base_dir = r"Hydraulic_system_status_monitoring\data"
​
# 读取文件
def get_files(dir_path, filename):return pd.read_csv(os.path.join(dir_path, filename), sep="\t", header=None)
​
​
# 平均周期数据
def mean_conversion(df):df1 = pd.DataFrame()df1 = df.mean(axis=1)return df1
​
​
# 加载所有压力传感器数据(sensor data)
pressureFile1 = get_files(dir_path=base_dir, filename='PS1.txt')
pressureFile2 = get_files(dir_path=base_dir, filename='PS2.txt')
pressureFile3 = get_files(dir_path=base_dir, filename='PS3.txt')
pressureFile4 = get_files(dir_path=base_dir, filename='PS4.txt')
pressureFile5 = get_files(dir_path=base_dir, filename='PS5.txt')
pressureFile6 = get_files(dir_path=base_dir, filename='PS6.txt')
​
# 加载卷流数据(volume flow data)
volumeFlow1 = get_files(dir_path=base_dir, filename='FS1.txt')
volumeFlow2 = get_files(dir_path=base_dir, filename='FS2.txt')
​
# 加载温度传感器数据(temperature data)
temperature1 = get_files(dir_path=base_dir, filename='TS1.txt')
temperature2 = get_files(dir_path=base_dir, filename='TS2.txt')
temperature3 = get_files(dir_path=base_dir, filename='TS3.txt')
temperature4 = get_files(dir_path=base_dir, filename='TS4.txt')
​
# 加载其余数据:泵效率,振动,冷却效率,冷却功率,效率因数
pump1 = get_files(dir_path=base_dir, filename='EPS1.txt')
vibration1 = get_files(dir_path=base_dir, filename='VS1.txt')
coolingE1 = get_files(dir_path=base_dir, filename='CE.txt')
coolingP1 = get_files(dir_path=base_dir, filename='CP.txt')
effFactor1 = get_files(dir_path=base_dir, filename='SE.txt')
​
# 从配置文件导入标签数据(profile data)
profile = get_files(dir_path=base_dir, filename='profile.txt')
​
# 将配置文件拆分为相关传感器的标签
y_coolerCondition = pd.DataFrame(profile.iloc[:, 0])
y_valveCondition = pd.DataFrame(profile.iloc[:, 1])
y_pumpLeak = pd.DataFrame(profile.iloc[:, 2])
y_hydraulicAcc = pd.DataFrame(profile.iloc[:, 3])
y_stableFlag = pd.DataFrame(profile.iloc[:, 4])
​
PS1 = pd.DataFrame(mean_conversion(pressureFile1))
PS2 = pd.DataFrame(mean_conversion(pressureFile2))
PS3 = pd.DataFrame(mean_conversion(pressureFile3))
PS4 = pd.DataFrame(mean_conversion(pressureFile4))
PS5 = pd.DataFrame(mean_conversion(pressureFile5))
PS6 = pd.DataFrame(mean_conversion(pressureFile6))
​
PS1.columns = ['PS1']
PS2.columns = ['PS2']
PS3.columns = ['PS3']
PS4.columns = ['PS4']
PS5.columns = ['PS5']
PS6.columns = ['PS6']
​
FS1 = pd.DataFrame(mean_conversion(volumeFlow1))
FS2 = pd.DataFrame(mean_conversion(volumeFlow2))
​
FS1.columns = ['FS1']
FS2.columns = ['FS2']
​
TS1 = pd.DataFrame(mean_conversion(temperature1))
TS2 = pd.DataFrame(mean_conversion(temperature2))
TS3 = pd.DataFrame(mean_conversion(temperature3))
TS4 = pd.DataFrame(mean_conversion(temperature4))
​
TS1.columns = ['TS1']
TS2.columns = ['TS2']
TS3.columns = ['TS3']
TS4.columns = ['TS4']
​
P1 = pd.DataFrame(mean_conversion(pump1))
VS1 = pd.DataFrame(mean_conversion(vibration1))
CE1 = pd.DataFrame(mean_conversion(coolingE1))
CP1 = pd.DataFrame(mean_conversion(coolingP1))
SE1 = pd.DataFrame(mean_conversion(effFactor1))
​
P1.columns = ['P1']
VS1.columns = ['VS1']
CE1.columns = ['CE1']
CP1.columns = ['CP1']
SE1.columns = ['SE1']
​
# 合并所有dataframes
X = pd.concat([PS1, PS2, PS3, PS4, PS5, PS6, FS1, FS2, TS1, TS2, TS3, TS4, P1, VS1, CE1, CP1, SE1], axis=1)

数据可视化

"""传感器数据可视化
"""
# 绘制每个传感器的直方图
X.hist(bins=50, figsize=(20, 15))
plt.show()

数据分析

传感器相关性分析

"""各种传感器参数之间的相关矩阵
"""
corr_matrix = X.corr()
mask = np.zeros_like(corr_matrix, dtype=np.bool)
mask[np.triu_indices_from(mask)] = True
f, ax = plt.subplots(figsize=(11, 9))
​
# 绘制热图并校正纵横比
cmap = sns.diverging_palette(220, 10, as_cmap=True)
sns.heatmap(corr_matrix, mask=mask, cmap=cmap, vmax=.3, center=0, annot=True,square=True, linewidths=.5, cbar_kws={"shrink": .5})
plt.show()

一些传感器似乎高度相关。 让我们规范化这些参数并进行PCA。应用PCA来对集群中的数据进行可视化, 找到解释的方差和n_components。

"""数据归一化
"""
X_normalize = StandardScaler().fit_transform(X)
# 应用PCA可视化集群中的数据
from sklearn.decomposition import PCA
​
# 找到解释的方差和n_components
pca = PCA()
pca.fit(X_normalize)
plt.figure(figsize=(15, 10))
plt.plot(pca.explained_variance_, linewidth=2)
plt.axis('tight')
plt.xlabel('n_components')
plt.ylabel('explained_variance_')
plt.ylim(-0.5, 2)
plt.title('PCA explained variance vs. n componets')
plt.show()

# 当n_components = 2时观察分布
pca_2 = PCA(2)
projected = pca_2.fit_transform(X_normalize)
print(X.shape)
print(projected.shape)
plt.figure(figsize=(15, 10))
plt.scatter(projected[:, 0], projected[:, 1])
plt.xlabel('PCA (Dim=1)')
plt.ylabel('PCA (Dim=2)')
plt.title('Clustering of data when PCA dimension =2')
plt.show()

预测液压系统各部分(冷却系统、阀门状况、泵泄漏、液压蓄能器状况)状态

def predict_pump_performance(X, y, predictType):x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=24)
​x_test, x_val, y_test, y_val = train_test_split(x_test, y_test, test_size=0.5, random_state=24)
​# 使用xgboost进行分类seed = 24xgb1 = xgb.sklearn.XGBClassifier(learning_rate=0.1, n_estimators=100, max_depth=5, min_child_weight=11, gamma=0.1, subsample=0.8, colsample_bytree=0.7, objective='multi:softprob', n_jobs=-1, scale_pos_weight=1, seed=seed)
​xgb1.fit(x_train, y_train)y_pred = xgb1.predict(x_val)
​# 混淆矩阵和分类结果cm = confusion_matrix(y_val, y_pred)print("混淆矩阵(confusion_matrix): ", classification_report(y_val, y_pred))
​fig, ax = plt.subplots(figsize=(15, 10))ind = np.arange(17)width = 0.15feature_importtance = xgb1.feature_importances_rect1 = ax.bar(ind + width, feature_importtance)ax.set_xticks(ind + width / 2)ax.set_xticklabels(('PS1', 'PS2', 'PS3', 'PS4', 'PS5', 'PS6', 'FS1', 'FS2', 'TS1', 'TS2', 'TS3', 'TS4', 'P1', 'VS1', 'CE1', 'CP1', 'SE1'))ax.set_ylabel('Importance')ax.set_xlabel('Measurements')ax.set_title('Relative importance of various measurements to predict ' + predictType)plt.show()
​
​
# 预测冷却系统状态
predict_pump_performance(X_normalize, y_coolerCondition, 'cooling failure')
​
# 预测阀门状况
predict_pump_performance(X_normalize, y_valveCondition, 'valve condition')
​
# 预测泵泄漏
predict_pump_performance(X_normalize, y_pumpLeak, 'pump leaks')
​
# 预测液压蓄能器状况
predict_pump_performance(X_normalize, y_hydraulicAcc, 'hydraulic accumulator condition')

分析影响液压液压系统各部分(冷却系统、阀门状况、泵泄漏、液压蓄能器状况)的重要因素评价

  • 冷却系统影响因素分析

  • 阀门状况影响因素分析

  • 泵泄漏影响因素分析

  • 液压蓄能器影响因素分析

利用xgboost算法对液压系统的状态进行预测并分析影响因素重要性相关推荐

  1. ML之XGBoost:利用XGBoost算法对波士顿数据集回归预测(模型调参【2种方法,ShuffleSplit+GridSearchCV、TimeSeriesSplitGSCV】、模型评估)

    ML之XGBoost:利用XGBoost算法对波士顿数据集回归预测(模型调参[2种方法,ShuffleSplit+GridSearchCV.TimeSeriesSplitGSCV].模型评估) 目录 ...

  2. ML之xgboost:利用xgboost算法对breast_cancer数据集实现二分类预测并进行graphviz二叉树节点图可视化

    ML之xgboost:利用xgboost算法对breast_cancer数据集实现二分类预测并进行graphviz二叉树节点图可视化 目录 实现结果 实现代码 实现结果

  3. ML之xgboost:利用xgboost算法(自带,特征重要性可视化+且作为阈值训练模型)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)

    ML之xgboost:利用xgboost算法(自带,特征重要性可视化+且作为阈值训练模型)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测) 目录 输出结果 ...

  4. ML之xgboost:利用xgboost算法(sklearn+GridSearchCV)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)

    ML之xgboost:利用xgboost算法(sklearn+GridSearchCV)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测) 目录 输出结果 ...

  5. ML之xgboost:利用xgboost算法(sklearn+7CrVa)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)

    ML之xgboost:利用xgboost算法(sklearn+7CrVa)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测) 目录 输出结果 设计思路 核心 ...

  6. ML之xgboost:利用xgboost算法(sklearn+3Split+调参曲线+EarlyStop)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)

    ML之xgboost:利用xgboost算法(sklearn+3Spli+调参曲线+EarlyStop)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测) ...

  7. ML之xgboost:利用xgboost算法(sklearn+3Split+调参曲线)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)

    ML之xgboost:利用xgboost算法(sklearn+3Split+调参曲线)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测) 目录 输出结果 设 ...

  8. ML之xgboost:利用xgboost算法(sklearn+3Split)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)

    ML之xgboost:利用xgboost算法(sklearn+3Split)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测) 目录 输出结果 设计思路 核 ...

  9. ML之xgboost:利用xgboost算法(结合sklearn)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)

    ML之xgboost:利用xgboost算法(结合sklearn)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测) 目录 输出结果 设计思路 核心代码 输 ...

最新文章

  1. 富文本编辑_博客的后台富文本编辑和阅读计数
  2. 《AI系统周刊》第2期:硬件支持的Tensor-train分解与高效数据处理、清华吴文斐研究组获得NSDI最佳论文奖
  3. Android官方开发文档Training系列课程中文版:通知用户之构建通知
  4. 操作系统(二十三)生产者消费者问题
  5. 跟angular2学一键开启项目--关于上个react-redux项目的一键调试
  6. Android2D绘图四
  7. php yaf框架和icon,php中Yaf框架是什么?
  8. 2021年提升效率的7个新vue实战技巧!
  9. js中while死循环语句_如何检测JavaScript中的死循环?
  10. 基于http live streaming, 使用vlc + mediastreamsegmenter + apache 实现iOS视频直播
  11. vb adodc连接mysql_VB中用ADODC控件连接ACCESS数据库
  12. 软件观念革命:交互设计精髓_2021年中国传媒大学设计学考研招生分析、参考书目、复试线、真题回忆、考研经验指南篇...
  13. 通讯录管理系统(简洁版 课程设计)
  14. java分布式事务框架_Java分布式事务,及解决方案
  15. LOTO课6:一只三极管的输出特性曲线的测绘
  16. 你TM管这着玩意儿叫H5编辑器?????
  17. 人工智能学习培训哪家好
  18. 【C语言】Linux 下C程序的内存镜像
  19. 计算机协会财务部部长职责,社团财务部部长职责.doc
  20. 寒假思雨姐摸底E题,题解

热门文章

  1. ElementUI Tab 右边加按钮
  2. 计算机中浮点数的表示方法
  3. java中dao层命名规范_Dao层 · java开发规范 · 看云
  4. distinct 去重复,group by 数据分组,还是说拿起就用篇--2(嗯算是吧。)
  5. 10.智能快递柜(源码下载)
  6. android notifydatasetchanged 刷新错误,Android中适配器的notifyDataSetChanged()为何有时不刷新...
  7. 输入url到页面加载都发生了什么事情?(一道软件测试面试题)
  8. RBL 列表查询网址
  9. 【EXLIBRIS】宏阅读计划
  10. 突然无法连接亚马逊ec2虚拟机