基于机器学习的变频器故障诊断方法(MATLAB,Python)

变频器故障数据由MATLAB Simulink生成。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay, classification_report
from sklearn.preprocessing import StandardScaler, LabelEncoder, MinMaxScaler
from sklearn.impute import SimpleImputer
from sklearn.model_selection import train_test_split, cross_validate, cross_val_score, GridSearchCV, KFold
from sklearn.metrics import accuracy_score, roc_curve, roc_auc_score, precision_score
from sklearn.pipeline import make_pipeline, Pipeline
from sklearn.compose import make_column_transformer
data = pd.read_excel("All Data.xlsx", header=0)
new_df = data.drop('Unnamed: 0', axis='columns')
new_df.head(10)

new_df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 40040 entries, 0 to 40039
Data columns (total 10 columns):
 #   Column                           Non-Null Count  Dtype  
---  ------                           --------------  -----  
 0   Tn (Rated Torque) N*m            40040 non-null  float64
 1   k (constant of proportionality)  40040 non-null  float64
 2   time (sec)                       40040 non-null  float64
 3   Ia (Amp)                         40040 non-null  float64
 4   Ib (Amp)                         40040 non-null  float64
 5   Ic (Amp)                         40037 non-null  float64
 6   Vab (V)                          40040 non-null  float64
 7   Torque (N*m)                     40040 non-null  float64
 8   Speed (rad/s)                    40040 non-null  float64
 9   Category                         40040 non-null  object 
dtypes: float64(9), object(1)
memory usage: 3.1+ MB
new_df.describe()

new_df.isnull().sum()
Tn (Rated Torque) N*m              0
k (constant of proportionality)    0
time (sec)                         0
Ia (Amp)                           0
Ib (Amp)                           0
Ic (Amp)                           3
Vab (V)                            0
Torque (N*m)                       0
Speed (rad/s)                      0
Category                           0
dtype: int64
new_df.Category.value_counts()# data set is balanced to some extent. No need for corrective measures
Category
NOM     13013
PTPF     7007
PTGF     7007
OVF      5005
OLF      5005
UVF      3003
Name: count, dtype: int64
sns.catplot(data=new_df, x='Category', kind='count', height=4, aspect=2)

sns.catplot(data=new_df, x='Category', y='Tn (Rated Torque) N*m', kind='box', height=6, aspect=3)

sns.catplot(data=new_df, x='Category', y='k (constant of proportionality)', kind='box', height=6, aspect=3)

sns.catplot(data=new_df, x='Category', y='time (sec)', kind='box', height=6, aspect=3)

sns.catplot(data=new_df, x='Category', y='Ia (Amp)', kind='box', height=6, aspect=3)

sns.catplot(data=new_df, x='Category', y='Ib (Amp)', kind='box', height=6, aspect=3)

sns.catplot(data=new_df, x='Category', y='Ic (Amp)', kind='box', height=6, aspect=3)

sns.catplot(data=new_df, x='Category', y='Vab (V)', kind='box', height=6, aspect=3)

sns.catplot(data=new_df, x='Category', y='Torque (N*m)', kind='box', height=6, aspect=3)

sns.catplot(data=new_df, x='Category', y='Speed (rad/s)',kind='box', height=6, aspect=3)

sns.relplot(data=new_df, x="time (sec)", y="Torque (N*m)", kind="line", height = 5, aspect=3)

sns.relplot(data=new_df, x="time (sec)", y="Vab (V)", kind="line", height = 5, aspect=3)

sns.relplot(data=new_df, x="time (sec)", y="Speed (rad/s)", kind="line", height = 5, aspect=3)

sns.relplot(data=new_df, x="time (sec)", y="k (constant of proportionality)", kind="line", height = 5, aspect=3)

sns.relplot(data=new_df, x="time (sec)", y="Ia (Amp)", kind="line", height = 5, aspect=3)

sns.relplot(data=new_df, x="time (sec)", y="Ib (Amp)", kind="line", height = 5, aspect=3)

sns.relplot(data=new_df, x="time (sec)", y="Ic (Amp)", kind="line", height = 5, aspect=3)

label_category = LabelEncoder()
new_df['Category'] = label_category.fit_transform(new_df['Category'])
new_df.head()

new_df['Category'].unique()
array([0, 4, 3, 5, 2, 1])
new_df.Category.value_counts(
Category
0    13013
4     7007
3     7007
2     5005
1     5005
5     3003
Name: count, dtype: int64
plt.figure(figsize=(8,6))
dataplot = sns.heatmap(new_df.corr(), cmap="YlGnBu", annot=True) 
# Correlation plot showing the correlation between continuous features and the target label

new_df = new_df.drop(['time (sec)','Torque (N*m)'], axis=1)
new_df

x = new_df.drop(['Category'], axis=1)
x.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 40040 entries, 0 to 40039
Data columns (total 7 columns):
 #   Column                           Non-Null Count  Dtype  
---  ------                           --------------  -----  
 0   Tn (Rated Torque) N*m            40040 non-null  float64
 1   k (constant of proportionality)  40040 non-null  float64
 2   Ia (Amp)                         40040 non-null  float64
 3   Ib (Amp)                         40040 non-null  float64
 4   Ic (Amp)                         40037 non-null  float64
 5   Vab (V)                          40040 non-null  float64
 6   Speed (rad/s)                    40040 non-null  float64
dtypes: float64(7)
memory usage: 2.1 MB
y = new_df['Category']
y.info()
<class 'pandas.core.series.Series'>
RangeIndex: 40040 entries, 0 to 40039
Series name: Category
Non-Null Count  Dtype
--------------  -----
40040 non-null  int32
dtypes: int32(1)
memory usage: 156.5 KB
numeric_transformer = make_pipeline(
    SimpleImputer(strategy = "mean"),
    MinMaxScaler()
)
numeric_transformer.fit(x)
Pipeline(steps=[('simpleimputer', SimpleImputer()),
                ('minmaxscaler', MinMaxScaler())])

X = numeric_transformer.transform(x)
X = pd.DataFrame(X, columns = x.columns)
X.head()

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42, test_size=0.2) 
# splitting the dataset into training and testing subset
cv = KFold(n_splits=5)
params = [{'n_neighbors': np.arange(1, 50, 2),
           'weights': ['uniform', 'distance'],
           'p': [1,2],
           'n_jobs': [-1]
          }]
knn_clf = KNeighborsClassifier()
clf = GridSearchCV(knn_clf,
                      param_grid=params,
                      scoring='accuracy',
                      cv=cv)
clf.fit(X_train,y_train)
GridSearchCV(cv=KFold(n_splits=5, random_state=None, shuffle=False),
             estimator=KNeighborsClassifier(),
             param_grid=[{'n_jobs': [-1],
                          'n_neighbors': array([ 1,  3,  5,  7,  9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33,
       35, 37, 39, 41, 43, 45, 47, 49]),
                          'p': [1, 2], 'weights': ['uniform', 'distance']}],
             scoring='accuracy')
clf.best_params_
{'n_jobs': -1, 'n_neighbors': 27, 'p': 1, 'weights': 'uniform'}
knn_clf = KNeighborsClassifier(n_neighbors=23, weights='uniform', p=1, n_jobs=-1 )
cv = KFold(n_splits=10)
scores_knn = pd.DataFrame(cross_validate(knn_clf, X_train, y_train, scoring= 'accuracy', cv=cv, n_jobs=-1, 
error_score='raise', return_train_score=True))
scores_knn.mean()
fit_time       0.062957
score_time     0.256770
test_score     0.933348
train_score    0.944663
dtype: float64
knn_clf.fit(X_train, y_train)
knn_pred=knn_clf.predict(X_test)
accuracy_score(y_test, knn_pred)
0.9313186813186813
cm = confusion_matrix(y_test, knn_pred, normalize='all')
disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=["NOM", "PTPF","PTGF", "OVF", "OLF", "UVF"])
sns.set_style("white")
plt.rc('font', size=10)
disp.plot()
plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/716137.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

UniVue更新日志:使用Carousel组件实现轮播图效果

github仓库 稳定版本仓库&#xff1a;https://github.com/Avalon712/UniVue 开发版本仓库&#xff1a;https://github.com/Avalon712/UniVue-Develop UniVue扩展框架-UniVue源生成器仓库&#xff1a;https://github.com/Avalon712/UniVue-SourceGenerator 更新说明 今天的更…

【面试干货】String、StringBuilder、StringBuffer 的区别

【面试干货】String、StringBuilder、StringBuffer 的区别 1、String2、StringBuffer3、StringBuilder4、性能对比5、使用建议 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java中&#xff0c;String、StringBuilder和StringBuffer是用…

是否要把展会客户引到国际站等付费平台?

有人问我&#xff1a;那些在展会来的客户&#xff0c;如果让我们发网站链接&#xff0c;是否要发公司的付费平台&#xff0c;比如阿里&#xff0c;中国制造网等&#xff1f; 我的建议是不要发&#xff0c;最好是发公司的官网链接。接着她说公司在付费平台上更新得比较频繁&…

湖北省小学毕业学籍照片采集流程及教师手机拍摄方法说明

随着教育信息化的不断推进&#xff0c;学籍管理也越来越规范和便捷。湖北省小学毕业学籍照片采集作为学籍管理的重要组成部分&#xff0c;对于确保学生信息的准确性和完整性具有重要意义。本文将详细介绍湖北省小学毕业学籍照片采集的流程&#xff0c;并提供教师使用手机拍摄照…

KKT基础知识

KKT条件定义 KKT条件(Karush–Kuhn–Tucker conditions)是最优化&#xff08;特别是非线性规划&#xff09;领域最重要的成果之一&#xff0c;是判断某点是极值点的必要条件。 最优化问题 要选择一组参数&#xff08;变量&#xff09;&#xff0c;在满足一定的限制条件&…

个人云服务器已经被安全合规等卡脖子 建议不要买 买了必定后悔 安全是个大问题 没有能力维护

我的想法 自己买一个云服务器&#xff0c;先自己边做边学习&#xff0c;向往硅谷精神&#xff0c;财富与自由。如果能赚钱&#xff0c;就开个公司。这次到期就放弃了。 我前前后后6年花6000多元买云服务器。业余花了无数的精力&#xff0c;从2018到现在 &#xff0c;也没有折…

【代码随想录——动态规划——第三周】

1.目标和 这里设置背包的最大长度为2100即可&#xff0c;因为题目中有说数组之和小于1000.但考虑到我们需要实行jnums[i]所以保守起见我们设置的数应该稍大于2000即可&#xff0c;这里我们设置为2100。 1.1 我的解法&#xff08;粗糙了&#xff09; func findTargetSumWays(n…

VMware安装Debian,Debian分区,虚拟机使用NAT模式联网,Linux设置静态IP

官网 https://www.debian.org/download stable是稳定版 win下amd64就行&#xff0c;macOs装arm架构的 安装Debian虚拟机 教程里没有的只管往下点就完了 哪个都行 选镜像 选安装位置 别超过宿主机内核就行 看你需求 NAT模式 虚拟 看你需求 其他的也检查一下 图形安装 选中文 继…

MoneyPrinterPlus:AI自动短视频生成工具,详细使用教程

MoneyPrinterPlus是一款使用AI大模型技术,一键批量生成各类短视频,自动批量混剪短视频,自动把视频发布到抖音,快手,小红书,视频号上的轻松赚钱工具。 之前有出过一期基本的介绍&#xff0c;但是后台收到有些小伙伴说&#xff0c;不知道如何使用。 今天我将会手把手的详细介绍…

1.动手学习深度学习课程安排及深度学习数学基础

视频资源B站&#xff1a;动手学习深度学习——李沐 目录 目标内容将学到什么1.N维数组样例2.访问2维数组元素3.数据操作4.线性代数5.矩阵计算6.自动求导 目标 介绍深度学习景点和最新模型 LeNet AlexNet VGG ResNet LSTM BERT… 机器学习基础 损失函数&#xff0c;目标函数&a…

抖音矩阵系统搭建,AI剪辑短视频,一键管理矩阵账号

目录 前言&#xff1a; 一、抖音矩阵系统有哪些功能&#xff1f; 1.AI智能文案 2.多平台账号授权 3.多种剪辑模式 4. 矩阵一键发布&#xff0c;智能发布 5.抖音爆店码功能 6.私信实时互动 7.去水印及外链 二、抖音矩阵系统可以解决哪些问题&#xff1f; 总结&#xff…

如何将接口返回/n替换为react.js中的换行符

将每个/n替换为ReactJS中的一个<br>标记。cpa_ability为后端返回的字段名

[js] 数字分开显示

<div id"number-container" class"number-container"></div>const number 123.45; // 要拆分的数字&#xff08;包括小数&#xff09; const numberContainer document.getElementById(number-container);// 将数字转换为字符串&#xff0c;…

IT架构思想---架构抽象

引言 架构的抽象思维这个概念很难解释&#xff0c;希望不会翻车&#xff0c;因为太抽象了.....&#xff0c;只能尽所能了。&#xff08;为了方便说明文章中的架构均指IT架构&#xff09; 抽象的定义 抽象是从众多的事物中抽取出共同的、本质性特征&#xff0c;而舍弃…

【二维差分】2132. 用邮票贴满网格图

本文涉及知识点 二维差分 LeetCode2132. 用邮票贴满网格图 给你一个 m x n 的二进制矩阵 grid &#xff0c;每个格子要么为 0 &#xff08;空&#xff09;要么为 1 &#xff08;被占据&#xff09;。 给你邮票的尺寸为 stampHeight x stampWidth 。我们想将邮票贴进二进制矩…

租房项目之并发缺失数据问题

前奏&#xff1a;本项目是一个基于django的租房信息获取项目。本次博客牵扯到两个版本&#xff0c;集中式分布以及分布式部署&#xff08;两个版本的ui不同&#xff0c;集中式用的是老版ui&#xff0c;分布式使用的是新版ui&#xff09;&#xff1b; 项目链接&#xff1a;http…

【C++提高编程-09】----C++ STL之常用排序算法

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

04 翼型和机翼、尾翼几何选择

04 翼型和机翼、尾翼几何选择 4 -1 引言4-2 翼型的选择4-2-1 翼型的几何4-2-2 翼型的升力和阻力4-2-3 翼型选择与设计4-2-4 设计升力系数4-2-5 失速4-2-6 翼型厚度比4-2-7 关于翼型其他方面的考虑 4-3 机翼几何外形4-3-1 展弦比4-2-3 机翼后掠角4-3-3 机翼稍根比4-3-4 机翼扭转…

echarts学习:使用dataset管理数据

前言 在我们公司的组件库中有许多echarts图表相关的组件&#xff0c;这些组件在使用时&#xff0c;只需将图表数据以特定的格式传入组件中&#xff0c;十分方便。因此当我得知echarts 可以使用dataset集中管理数据时&#xff0c;我就决定自己一定要搞懂它&#xff0c;于是在最…

第2章 Rust初体验6/8:Option枚举及其变体:能避免空指针异常问题:猜骰子冷热游戏

讲动人的故事,写懂人的代码 2.6 故事4: 一直让玩家不断猜 我们全班要一起用三种语言来写第4个故事啦。这可能是我们所有故事中最复杂的一个了。不过别担心,贾克强已经把这个故事的需求都用投影仪展示出来了。 程序会提示玩家猜两个骰子的点数之和。如果玩家第一次输入点数之…