一、数据源

  变速箱故障诊断数据集包括使用SpectraQuest的变速箱故障诊断模拟器记录的振动数据集。数据集使用4个振动传感器放置在四个位置,在负载从“0”到“90%”的变化下进行记录。包括两种不同的场景:
  1)健康状况
  2)齿轮破损情况
  总共有20个文件,10个是正常变速箱的、10个是坏掉的。每个文件对应于从0%到90%的给定负载,步进为10%。
  数据免费下载地址Gearbox Fault Diagnosis

二、相关代码

  代码中提取数据特征(postprocess.get_feature.SignalFreF、postprocess.get_feature.SignalTimeF)及对各特征进行评分(postprocess.feature_selection.FeatureFisherScore)的代码直接copy的Pyhon在振动信号处理中的高级应用(一):振动信号特征(时域、频域)提取以及Pyhon在振动信号处理中的高级应用(十):监督式特征的选择方法(Fisher Score、ReliefF),涉及版权,需要的同学自行查看哈。

2.1 config文件

# Data storage location
SOURCE_DIR = 'D://datas//Gearbox_1//'
# Sample rate
FS = 30
# The size of train data
TRAIN_SIZE = 200
# The size of test data
TEST_SIZE = 20
# The length of data
LEN_DATA = 4 * FS

2.2 data_process文件

import os
import numpy as np
import pandas as pd
from config import *
from algorithm import postprocessclass data_process:def __init__(self):# import configself.source_dir = SOURCE_DIR + 'data//'self.fs = FSself.train_size = TRAIN_SIZEself.test_size = TEST_SIZEself.len_data = LEN_DATA# get datasource_files = os.listdir(self.source_dir)dfs = []for source_file in source_files:file_names = os.listdir(self.source_dir + source_file)for file_name in file_names:[state, load] = file_name.split('.')[0].split('30hz')data_file = self.source_dir + source_file + '//' + file_namedf = pd.read_csv(data_file)df['state'] = statedf['load'] = loaddfs.append(df)dfs = pd.concat(dfs).reset_index().rename(columns={'index': 'sample_index'})self.readings = dfs.melt(id_vars=['sample_index', 'state', 'load'],value_vars=['a1', 'a2', 'a3', 'a4'],var_name='sensor',value_name='reading')self.state = set(self.readings['state'].values)self.load = set(self.readings['load'].values)self.sensor = set(self.readings['sensor'].values)# helper function to filter the datasetdef rdg(self, state=None, load=None, sensor=None):df_st = self.readings[self.readings.state == state] if state is not None else self.readingsdf_lo = df_st[df_st.load == load] if load is not None else df_stdf_se = df_lo[df_lo.sensor == sensor] if sensor is not None else df_loreturn df_se# extract the features of sensor datadef cal_feature(self):dfs_train = []dfs_test = []for _state in self.state:for _load in self.load:_df = self.rdg(state=_state, load=_load)# generate training data and test dataindexs = []for i in range(self.train_size + self.test_size):while True:index = np.random.randint(len(_df)//4 - self.len_data)if index not in indexs:indexs.append(index)breakelse:passfeatures = []for _sensor in self.sensor:sig = _df[_df.sensor == _sensor].reading.values_sig = sig[index: index + self.len_data]features.append(postprocess.get_feature.SignalFreF(_sig, self.fs))features.append(postprocess.get_feature.SignalTimeF(_sig))features = np.concatenate(features)df = pd.DataFrame(np.array(features)).Tdf['state'] = _statedf['load'] = _loadif i < self.train_size:dfs_train.append(df)else:dfs_test.append(df)self.train_features = pd.concat(dfs_train).reset_index().drop(columns='index')self.test_features = pd.concat(dfs_test).reset_index().drop(columns='index')if __name__ == "__main__":data_pro = data_process()data_pro.cal_feature()data_pro.train_features.to_csv(SOURCE_DIR + 'train_data.csv')data_pro.test_features.to_csv(SOURCE_DIR + 'test_data.csv')

2.3 show_data


import numpy as np
import pandas as pd
from config import *
from algorithm import postprocess
import matplotlib.pyplot as plt
from sklearn.preprocessing import LabelEncoder
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score# encode the type
train_data = pd.read_csv(SOURCE_DIR + 'train_data.csv')
test_data = pd.read_csv(SOURCE_DIR + 'test_data.csv')
train_data = train_data.astype({'state': 'string', 'load': 'string'})
test_data = test_data.astype({'state': 'string', 'load': 'string'})
label_encoder = LabelEncoder()
# generate train_data
types_train = label_encoder.fit_transform(train_data['state'].values)
df_train = train_data.iloc[:, :-2]
df_train['type'] = types_train
# generate test_data
types_test = label_encoder.transform(test_data['state'].values)
df_test = test_data.iloc[:, :-2]
df_test['type'] = types_testscores = postprocess.feature_selection.FeatureFisherScore(df_train, 'type')
# scores.to_csv(SOURCE_DIR + 'scores.csv')
indexs = np.argsort(-scores)[:5]types = set(df_train['type'].values)
plt.figure(figsize=(10, 5))
for type, marker in zip(types, ['*', '.']):df = df_train[df_train.type == type]plt.scatter(df.iloc[:, 31], df.iloc[:, 8], marker=marker)
plt.show()model = RandomForestClassifier(n_estimators=200)
train_inputs = df_train.iloc[:, :-1].values
train_targets = df_train.iloc[:, -1].values
model.fit(train_inputs, train_targets)test_inputs = df_test.iloc[:, :-1].values
test_targets = df_test.iloc[:, -1].valuesprint("train_data: the accuracy is {:.2%}.".format(accuracy_score(model.predict(train_inputs), train_targets)))
print("test_data: the accuracy is {:.2%}.".format(accuracy_score(model.predict(test_inputs), test_targets)))

三、效果展示


故障诊断实战系列(一)齿轮箱(kaggle)故障诊断相关推荐

  1. Rasa课程、Rasa培训、Rasa面试、Rasa实战系列之Toxic Language Detection

    Rasa课程.Rasa培训.Rasa面试.Rasa实战系列之 Toxic Language Detection Toxic Language Detection Kaggle: https://www ...

  2. 【机器学习】实战系列五——天文数据挖掘实验(天池比赛)

    系列文章目录 学习笔记: [机器学习]第一章--机器学习分类和性能度量 [机器学习]第二章--EM(期望最大化)算法 [机器学习]第六章--概率无向图模型 实战系列: [机器学习]实战系列一--波士顿 ...

  3. MP实战系列(二)之集成swagger

    其实与spring+springmvc+mybatis集成swagger没什么区别,只是之前写的太不好了,所以这次决定详细写. 提到swagger不得不提rest,rest是一种架构风格,里面有对不同 ...

  4. 07.GitHub实战系列~7.Git之VS2013团队开发(如果不想了解git命令直接学这篇即可)...

    GitHub实战系列汇总:http://www.cnblogs.com/dunitian/p/5038719.html ---------------------------------------- ...

  5. 商城模块java_Java商城秒杀系统实战系列~构建SpringBoot多模块项目

    摘要:本篇博文是"Java秒杀系统实战系列文章"的第二篇,主要分享介绍如何采用IDEA,基于SpringBoot+SpringMVC+Mybatis+分布式中间件构建一个多模块的项 ...

  6. shiro实战系列(一)之入门实战

    一.什么是shiro? Apache Shiro 是一个强大而灵活的开源安全框架,它干净利落地处理身份认证,授权,企业会话管理和加密.   Apache Shiro 的首要目标是易于使用和理解.安全有 ...

  7. 【直播回顾】云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第19讲):Java Spring Cloud微服务架构模式与开发实战...

    主讲人:徐雷(云栖社区特邀Java专家) 徐雷,花名:徐雷frank:资深架构师,MongoDB中文社区联席主席,吉林大学计算机学士,上海交通大学硕士.从事了 10年+开发工作,专注于分布式架构,Ja ...

  8. Spark入门实战系列--6.SparkSQL(中)--深入了解SparkSQL运行计划及调优

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1.1  运行环境说明 1.1.1 硬软件环境 l  主机操作系统:Windows 64位, ...

  9. Skype For Business 2015实战系列6:后端数据库安装CU6补丁

    Skype For Business 2015实战系列6:后端数据库安装CU6补丁 安装好SQL Server 2014以后需要为其安装CU6补丁,以满足Skype For Business Serv ...

最新文章

  1. MySQL数据库触发器(trigger)
  2. mysql 变量is null 和 not exists区别
  3. android编程 自动裁剪图片,Android编程实现调用相册、相机及拍照后直接裁剪的方法...
  4. 观察者模式在SAP ui5修改theme实现中的应用
  5. Google Chrome 浏览器JS无法更新解决办法
  6. uos安装方法_国产UOS(统一操作系统),虚拟机安装体验
  7. hadoop--HDFS概述
  8. Redis源码分析(一)--Redis结构解析
  9. SpringMVC中RequestMethod同时支持POST和GET访问
  10. java类型的对象可以存储属性_重识JVM(一)-类与对象在JVM中是如何存储的
  11. Tomcat 修改端口
  12. 前端学习——Js(JavaScript)入门
  13. Struts2项目实战 微云盘(五):核心功能实现
  14. 【漏洞修复】SSL/TLS协议信息泄露漏洞(CVE-2016-2183)
  15. oculus 登录 错误代码 ovr40779122
  16. android中怎么播放本地视频播放器,安卓之播放本地视频讲解
  17. 带下波浪线的textView
  18. office修复找不到msi_office2013安装出错,老是出现找不到officeMUI.msi或则officeMUI.xml等,是什么原 - Microsoft Community...
  19. python代码什么时候用单引号_Python 中的单引号和双引号有什么区别?
  20. 使用gopsolver和SDPA求解库实现C++正定规划

热门文章

  1. java在线影院系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  2. pascal语言基础(三)
  3. 密码学安全性证明中的挑战者和攻击者
  4. 流媒体技术------Java实现调用本地摄像头
  5. 渲染性能优化之几种LOD层次细节总结
  6. 几种T卡座的检测方法
  7. event.initEvent()
  8. 郑州晚报百特联到尖山采摘“密二花”
  9. IBM Tivoli
  10. 2021年Q1互联网母婴行业网络关注度分析报告