官方公众号:52phm,与工业互联网人一起成长

2022-04-20 15:00:51    博客笔记    1336    当前专栏:故障预测与健康管理    分类:算法开发    本站官网:www.52phm.cn   

公众号 ...

电机状态分类预测与研究

- date: 2020-12
- author:小知
- describe:电机状态.txt数据集中最后一列是`电机状态`标签,其余列是特征。本数据集可以作为学习工业数据的分类算法使用,(1)分析不同电机状态的特征分布情况;(2)建立分类模型体验分类算法的应用。

0.数据集处理


数据集下载:http://www.52phm.cn/blog/detail/64

import pandas as pd


DATA_PATH = '../database/电机状态.txt'
SAVE_PATH = '../database/motor.csv'

fp = open(DATA_PATH)
data = [i.strip().split(' ') for i in fp.readlines()]
df = pd.DataFrame(data)
df = df.rename(columns={48: "label"})
df.to_csv(SAVE_PATH, index=False)

1.导入模块

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn import preprocessing
from sklearn import metrics
from sklearn import tree
%matplotlib inline
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False

2.配置参数

# 路径参数
DATA_PATH = '../database/motor.csv'
SAVE_PATH = ''

# 模型参数
model_params = {"criterion": "gini", 
          "splitter": "best", 
          "max_depth": None, 
          "min_samples_split": 2, 
          "min_samples_leaf": 1
}

3.加载数据集

df = pd.read_csv(DATA_PATH)
print(df.shape)
df.head()

(58509, 49)

0 1 2 3 4 5 6 7 8 9 ... 39 40 41 42 43 44 45 46 47 label
0 -3.014600e-07 8.260300e-06 -0.000012 -0.000002 -1.438600e-06 -0.000021 0.031718 0.031710 0.031721 -0.032963 ... -0.63308 2.9646 8.1198 -1.4961 -1.4961 -1.4961 -1.4996 -1.4996 -1.4996 1
1 2.913200e-06 -5.247700e-06 0.000003 -0.000006 2.778900e-06 -0.000004 0.030804 0.030810 0.030806 -0.033520 ... -0.59314 7.6252 6.1690 -1.4967 -1.4967 -1.4967 -1.5005 -1.5005 -1.5005 1
2 -2.951700e-06 -3.184000e-06 -0.000016 -0.000001 -1.575300e-06 0.000017 0.032877 0.032880 0.032896 -0.029834 ... -0.63252 2.7784 5.3017 -1.4983 -1.4983 -1.4982 -1.4985 -1.4985 -1.4985 1
3 -1.322600e-06 8.820100e-06 -0.000016 -0.000005 -7.282900e-07 0.000004 0.029410 0.029401 0.029417 -0.030156 ... -0.62289 6.5534 6.2606 -1.4963 -1.4963 -1.4963 -1.4975 -1.4975 -1.4976 1
4 -6.836600e-08 5.666300e-07 -0.000026 -0.000006 -7.940600e-07 0.000013 0.030119 0.030119 0.030145 -0.031393 ... -0.63010 4.5155 9.5231 -1.4958 -1.4958 -1.4958 -1.4959 -1.4959 -1.4959 1

5 rows × 49 columns

4.数据集维度大小

df.shape

(58509, 49)

5.数据集信息

df.info()
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 58509 entries, 0 to 58508
    Data columns (total 49 columns):
     #   Column  Non-Null Count  Dtype  
    ---  ------  --------------  -----  
     0   0       58509 non-null  float64
     1   1       58509 non-null  float64
     2   2       58509 non-null  float64
     3   3       58509 non-null  float64
     4   4       58509 non-null  float64
     5   5       58509 non-null  float64
     6   6       58509 non-null  float64
     7   7       58509 non-null  float64
     8   8       58509 non-null  float64
     9   9       58509 non-null  float64
     10  10      58509 non-null  float64
     11  11      58509 non-null  float64
     12  12      58509 non-null  float64
     13  13      58509 non-null  float64
     14  14      58509 non-null  float64
     15  15      58509 non-null  float64
     16  16      58509 non-null  float64
     17  17      58509 non-null  float64
     18  18      58509 non-null  float64
     19  19      58509 non-null  float64
     20  20      58509 non-null  float64
     21  21      58509 non-null  float64
     22  22      58509 non-null  float64
     23  23      58509 non-null  float64
     24  24      58509 non-null  float64
     25  25      58509 non-null  float64
     26  26      58509 non-null  float64
     27  27      58509 non-null  float64
     28  28      58509 non-null  float64
     29  29      58509 non-null  float64
     30  30      58509 non-null  float64
     31  31      58509 non-null  float64
     32  32      58509 non-null  float64
     33  33      58509 non-null  float64
     34  34      58509 non-null  float64
     35  35      58509 non-null  float64
     36  36      58509 non-null  float64
     37  37      58509 non-null  float64
     38  38      58509 non-null  float64
     39  39      58509 non-null  float64
     40  40      58509 non-null  float64
     41  41      58509 non-null  float64
     42  42      58509 non-null  float64
     43  43      58509 non-null  float64
     44  44      58509 non-null  float64
     45  45      58509 non-null  float64
     46  46      58509 non-null  float64
     47  47      58509 non-null  float64
     48  label   58509 non-null  int64  
    dtypes: float64(48), int64(1)
    memory usage: 21.9 MB

数据集缺失值情况

df.isnull().sum()
    0        0
    1        0
    2        0
    3        0
    4        0
    5        0
    6        0
    7        0
    8        0
    9        0
    10       0
    11       0
    12       0
    13       0
    14       0
    15       0
    16       0
    17       0
    18       0
    19       0
    20       0
    21       0
    22       0
    23       0
    24       0
    25       0
    26       0
    27       0
    28       0
    29       0
    30       0
    31       0
    32       0
    33       0
    34       0
    35       0
    36       0
    37       0
    38       0
    39       0
    40       0
    41       0
    42       0
    43       0
    44       0
    45       0
    46       0
    47       0
    label    0
    dtype: int64

数据是否均衡分布

label_counts = df['label'].value_counts().to_frame().reset_index()
plt.bar(label_counts['index'], label_counts['label'], label='各标签数量', color='r')
plt.legend()

划分训练集和验证集

X, Y = df.iloc[:, :-1], df['label'].values
x_train, x_valid, y_train, y_valid = train_test_split(X, Y, test_size=0.3)
print(x_train.shape, x_valid.shape)

(40956, 48) (17553, 48)

特征重要性分析

from sklearn import tree
m = tree.DecisionTreeClassifier()
m.fit(x_train, y_train)
imp = m.feature_importances_
print(">>> 特征重要性:", imp)
plt.figure(figsize=(16,4))
plt.bar(np.arange(len(imp)), imp, 0.9, label='FeatureImportances', color='r')
plt.xticks(np.arange(len(imp)), np.arange(1, len(imp)1).astype(str), rotation=90)
plt.xlabel('Features')
plt.ylabel('Importances')
plt.legend()
    >>> 特征重要性: [5.98440225e-04 3.08229107e-04 1.79175577e-04 1.38681841e-03
     4.76279751e-04 1.64382030e-04 1.63175566e-01 1.42651633e-02
     9.49281490e-02 2.27506770e-01 3.14778801e-02 2.20768156e-01
     1.99832800e-02 1.64328257e-03 3.79598939e-04 4.09215028e-02
     2.95897557e-04 6.24109633e-04 1.06046500e-02 6.31802097e-03
     1.44326689e-02 1.74156237e-02 5.58853781e-03 6.33530587e-03
     4.25448464e-02 2.51972101e-04 1.57817267e-04 1.22483584e-02
     1.23145170e-04 1.46994902e-04 1.71503682e-02 2.49675915e-03
     1.35631032e-03 8.04364163e-03 1.86114910e-02 3.98997444e-03
     3.14444030e-03 2.12384190e-04 8.10758828e-05 3.74770769e-03
     5.02345318e-04 2.75927645e-04 3.57242162e-04 9.54643152e-04
     1.91576281e-03 5.65266378e-04 1.13399277e-03 2.10044738e-04]

建立电机状态预测模型

def train(model):
    model.fit(x_train, y_train)
    train_acc = model.score(x_train, y_train)
    y_pred = model.predict(x_valid)
    valid_acc = metrics.accuracy_score(y_valid, y_pred)
    valid_mat = metrics.confusion_matrix(y_valid, y_pred)
    valid_report = metrics.classification_report(y_valid, y_pred)
    print(">>> 训练集准确率:{}".format(train_acc))
    print(">>> 验证集准确率:{}".format(valid_acc))
    print(">>> 验证集混淆矩阵:\n{}".format(valid_mat))
    print(">>> 验证集分类评价:\n{}".format(valid_report))
    print(">>> 训练和评估完毕....")
    return model

电机模型性能评估

dc = tree.DecisionTreeClassifier(**model_params)
model = train(model=dc)
    >>> 训练集准确率:1.0
    >>> 验证集准确率:0.9835355779638808
    >>> 验证集混淆矩阵:
    [[1542    0    0    0    0   26    0    0    8    0    0]
     [   0 1630    0    0    0    0    0    0    0   38    0]
     [   1    0 1548    2   14    0    0    1    1    0    0]
     [   0    0    3 1572    3    0    2    3    0    0    0]
     [   0    1   16    4 1523    0    0   29    0    0    0]
     [  27    0    3    0    0 1552    0    0   17    0    0]
     [   0    0    0    2    0    0 1618    0    0    0    0]
     [   0    0    0    4   24    0    0 1538    0    0    0]
     [   4    2    0    0    1   30    0    0 1595    3    0]
     [   0   20    0    0    0    0    0    0    0 1618    0]
     [   0    0    0    0    0    0    0    0    0    0 1528]]
    >>> 验证集分类评价:
                  precision    recall  f1-score   support

               1       0.98      0.98      0.98      1576
               2       0.99      0.98      0.98      1668
               3       0.99      0.99      0.99      1567
               4       0.99      0.99      0.99      1583
               5       0.97      0.97      0.97      1573
               6       0.97      0.97      0.97      1599
               7       1.00      1.00      1.00      1620
               8       0.98      0.98      0.98      1566
               9       0.98      0.98      0.98      1635
              10       0.98      0.99      0.98      1638
              11       1.00      1.00      1.00      1528

        accuracy                           0.98     17553
       macro avg       0.98      0.98      0.98     17553
    weighted avg       0.98      0.98      0.98     17553

    >>> 训练和评估完毕....



免责声明:信息来源于互联网聚合整理或者作者原创,非原创文章标示"互联网",原创文章标示"作者昵称",本文仅代表文章作者的个人观点,且文中陈述文字和内容的时效性、真实性与本站无关,请读者仅作参考,如发现有害或侵权内容,请联系我们将在第一时间进行核实处理。


[推荐] 电机状态预测数据集

2021-12-09 11:26:41    博客笔记    4382    分类:边缘感知    专栏:故障诊断   


[推荐] 大型旋转机械状态监测与故障诊断

2021-12-13 17:29:41    互联网    6176    分类:算法开发    专栏:故障诊断   


[推荐] 风电机组状态监测系统(CMS)

2021-12-19 15:22:38    互联网    681    分类:算法开发    专栏:风电机组   



转发此文章到社区


进群

让志同道合读者学习交流



机电设备故障诊断数据集

机电设备故障诊断

2021-12-09 11:27:13    博客笔记    3875    分类:边缘感知    专栏:故障诊断   


液压装置状态评估

液压装置状态评估

2021-12-05 10:27:37    博客笔记    1278    分类:边缘感知    专栏:未分组   


数据挖掘--风电机组异常数据识别与清洗

一、赛题背景(一)背景风能是一种环境友好且经济实用的可再生能源。中国是世界排名第一的风力发电国家、新装风力发电设备装机容量最大的国家,并且保持快速增长。由于风力发电正处于飞速发展阶段,风电场数量和规模不断扩大,然而受地理条件和环境因素限制,风电场多位于偏僻遥远的平原、山区或海上,因此为风电公司引入SCADA系统(数据采集与监视控制系统)对风电场群的日常运行进行集中监控、调度和管理,但风电机组受设备、环境、运行状态等因素影响,SCADA系统实时采集的风机运行数据会存在有大量异常值和缺失值,这些“脏数据”的

2021-12-19 01:00:15    互联网    941    分类:算法开发    专栏:风电机组   


风力发电机组结构

风力发电机组由风轮、叶片、主轴承、齿轮箱、发电机、电气系统、液压系统、刹车系统和偏航系统等组成[#],其结构如图1所示。风电机组通过叶轮捕获风能,通过齿轮箱传递到发电机,发电机将机械能转化为电能,通过变频器接入电网。风力发电机由风轮及变桨距系统、轮毅、结构(机舱、地基和塔架)、传动装置、齿轮箱、发电机、电气系统、控制系统、传感器、刹车系统、液压系统和偏航系统等构成。风电机组首先将风能通过风轮转换...

2021-12-19 01:12:13    互联网    334    分类:算法开发    专栏:风电机组   


(转)风力发电机组齿轮箱常见故障及预防措施

齿轮箱的常见故障有齿轮损伤、轴承损坏、断轴和渗漏油、油温高等。一、 齿轮损伤齿轮损伤的影响因素很多,包括选材、设计计算、加工、热处理、安装调试、润滑和使用维护等。常见的齿轮损伤有齿面损伤和轮齿折断两类。(一) 轮齿折...

2021-12-19 01:20:59    互联网    323    分类:算法开发    专栏:风电机组   


异常检测——常见方法分类

异常检测3——常见方法分类基于统计学极值分析对数据分布进行假设基于线性分析基于时空空间关系造成的异常时间序列上的异常基于相似性分析建立在距离度量上的异常检测建立在密度分析上的异常检测基于聚类的异常检测基于偏差高维方法其他集成异常检测监督异常检测,半监督异常检测,主动学习图中的异常检测、网络中的异常检测基于统计学极值分析往往只对单独纬度进行研究,使用上有很大的局限性【1】对数据分布进行假设...

2021-12-19 14:43:14    互联网    361    分类:算法开发    专栏:工业异常检测   


时间序列预测中特征构建

传统统计学习方法: naive approach, moving average, Holt linear, exponential smoothing, ARIMA, and Prophet现代机器学习方法: 树模型等深度学习方法: LSTM、Seq2seq、Transform-XL等树模型需要人为构建特征,同时预测值不可超越区间内取值的上限。深度学习网络,可以发现输入数据之间的交互关系,同时可以发现趋势。根据数据可以尝试不同的方法,选择较优的方法。下面是树模型的构造特征的方法。1. 时间戳特

2021-12-21 11:53:05    互联网    749    分类:算法开发    专栏:时间序列预测   


时间序列预测算法总结

时间序列算法time series data mining 主要包括decompose(分析数据的各个成分,例如趋势,周期性),prediction(预测未来的值),classification(对有序数据序列的feature提取与分类),clustering(相似数列聚类)等。时间序列的预测常用的思路:1、计算平均值2、exponential smoothing指数衰减...

2021-12-25 19:42:49    互联网    277    分类:算法开发    专栏:时间序列预测   


时间序列预测

时间序列预测基于历史数据对其后某段时间内的数据进行预测,例如通过对菜品以往的销售数据,预测未来7天不同菜品的销售量,以减少菜品脱销或备货不足。时间序列与常见的回归问题的不同点在于:1、时间序列是跟时间有关的,而线性回归模型中观察结果是独立的;2、随着上升或者下降的趋势,更多的时间序列出现季节性趋势的形式。常用按时间序列排列的一组随机变量X_1,X_2,…,X_t来表示一个随机事件序列,记为{X_t};用x_1,x_2,,...,x_n或{x_t,t=1,2,...,n}表示该随机序列的n个有序观察

2021-12-25 19:45:22    互联网    322    分类:算法开发    专栏:时间序列预测   


倒谱分析与倒谱求法

倒谱分析可检测频谱中的重复模式,使其对区分多个故障非常有用,该故障在不同的主要频谱(即FFT、阶次、包络和增强频谱)中很难看到。    最重要的行业应用与机械诊断相关,如齿轮箱分析,以及其他应用,如:1 回声检测和去除2 以及语音分析    在以下网站中:http://www.bksv.cn/Products/analysis-software/signal-a

2021-12-26 13:31:12    互联网    710    分类:算法开发    专栏:振动信号预处理