DTW-KNN 用于液压故障检测(python)

1 介绍

本文提取特征,然后用于液压故障检测,每一条特征都是时间序列问题,所以使用了DTW-KNN模型,该模型的原来不做解释,大家可以自行查找。

2 数据集介绍

所有数据都在文件夹下,这是一个公开数据集,其中profile.txt是类别标签,我们只取其中的一列,而其他的是特征,我们只用PS这些文件。
在这里插入图片描述

3 数据处理

读取所有PS的文件,然后取平均值作为特征

dir_path = '液压data'def get_files(dir_path, filename):return pd.read_csv(os.path.join(dir_path, filename), sep='\t', header=None)PS1 = get_files(dir_path=dir_path, filename='PS1.txt')
PS2 = get_files(dir_path=dir_path, filename='PS2.txt')
PS3 = get_files(dir_path=dir_path, filename='PS3.txt')
PS4 = get_files(dir_path=dir_path, filename='PS4.txt')
PS5 = get_files(dir_path=dir_path, filename='PS5.txt')
PS6 = get_files(dir_path=dir_path, filename='PS6.txt')def mean_conversion(df):#df1 = pd.DataFrame()df1 = df.mean(axis = 1)return df1

读取profile做完标签

# 读取标签
profile = get_files(dir_path=dir_path, filename='profile.txt')
y = pd.DataFrame(profile.iloc[:, 3])
#

显示出每个特征,通过图像我们看到还是有些不同的,并且每个线都有波动的地方。
在这里插入图片描述

4 搭建多个模型

4.1 普通KNN模型

knn = KNeighborsClassifier(metric='euclidean')
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
print(classification_report(y_test, y_pred, digits=3))

在这里插入图片描述

4.2 dtw-knn 模型

重新定义距离函数,详情见文档

dtw_knn = KNeighborsClassifier(metric=cal_dtw_distance)
# 重新定义距离函数,详情见Q 59520206
dtw_knn.fit(X_train, y_train)
y_pred = dtw_knn.predict(X_test)
print(classification_report(y_test, y_pred, digits=3))
pd.DataFrame(classification_report(y_test, y_pred, digits=3,output_dict=True)).transpose().to_csv('结果/DTW-KNN.csv', index=True)

通过结果看出来效果确实有点提升。
在这里插入图片描述

4.3 通过交叉验证,优化模型参数

# 创建GridSearchCV对象
param_grid = {'n_neighbors': [1,2,3,4,5,6,7]}grid_search = GridSearchCV(KNeighborsClassifier(metric=cal_dtw_distance), param_grid, cv=5, scoring='accuracy')# 在数据集上拟合GridSearchCV
grid_search.fit(X_train, y_train)# 获取交叉验证结果
means = grid_search.cv_results_['mean_test_score']
stds = grid_search.cv_results_['std_test_score']
params = grid_search.cv_results_['params']print("最好的参数K为:")
print(grid_search.best_params_)
print("精度为:")
print(grid_search.best_score_)

在这里插入图片描述
最后我们选择k=1,重新训练模型,得到的结果如下:
在这里插入图片描述
发现效果确实变好了。

5 结论

另外,我们可以用其他分类算法,例如:svm,随机森林等做。通过实验,我们发现dwt-knn效果要好,提供详细的代码,python版本,数据可视化图像,结果保存等。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PFA(可溶性聚四氟乙烯)弯嘴洗瓶

PFA材质,又称可溶性聚四氟乙烯,是进口的高纯原材料,耐强酸强碱耐腐蚀和各种有机溶剂。 常用规格:30ml/60ml/100ml/250ml/500ml 产品特性 1、耐高低温:使用温度可达-200~260℃; 2、可打刻度,高度透明&#x…

【Linux】自定义协议+序列化+反序列化

自定义协议序列化反序列化 1.再谈 "协议"2.Cal TCP服务端2.Cal TCP客户端4.Json 喜欢的点赞,收藏,关注一下把! 1.再谈 “协议” 协议是一种 “约定”。在前面我们说过父亲和儿子约定打电话的例子,不过这是感性的认识&a…

捷途山海T2正式开启预售,新能源方盒子SUV仅售18.49万起

4月2日,捷途汽车宣布,定位为“旅行越野超混SUV”的山海T2正式开启预售。新车共计将推出3款不同配置车型,预售价格区间为18.49万-21.69万元。同时,预售期间捷途官方还将为用户推出7重预售礼。 山海T2是捷途山海系列第二款产品&…

testbench中一些常用的系统命令

前言 记录一下自己仿真过程中用到过的一些用于testbench的系统命令,根据自己用到的情况不定时进行补充。 文件操作 $fopen 用于打开文件的命令,格式如下 file $fopen("file_name","mode") file_name:要打开的文件…

innovus:add text脚本

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 genPinText text.rpt -cells [dbGet top.name] set in [split [exec cat text.rpt] "\n"] foreach line $in { lassign $line name x y layer cell set pt_x [str…

linux监控命令全

1.1 top 1.1.1 命令说明 Top 命令能够实时监控系统的运行状态,并且可以按照cpu、内存和执行时间进行排序 1.1.2 用法 top -hv | -bcisSHM -d delay -n iterations [-u user | -U user] -p pid [,pid ...] 1.1.3 参数说明 命令行启动参数: -b : 批次…

小白的第一次sql注入实战

前言 当时最初接触安全的时候拿下的第一个shell,还是比较兴奋的,忽略一下文章写的很水。 有id尝试sql注入 找这种sql注入的站用sql检索就行了,但是最好挂代理用谷歌搜索,百度的话搜sql注入的很多被别人打过了,导致链…

go入门到精通

初识Go语言 Go语言介绍 Go语言是什么 2009年11月10日,Go语言正式成为开源编程语言家庭的一员。 Go语言(或称Golang)是云计算时代的C语言。Go语言的诞生是为了让程序员有更高的生产效率,Go语言专门针对多处理器系统应用程序的编…

pytorch yolov5+Deepsort实现目标检测和跟踪+单目测距

最近一直在整理单目测距的内容,想着检测单目测距都写完了,顺手也写个检测跟踪单目测距,算是总结下这部分内容吧,如果有错误,还请不吝赐教!! 参考文献: YOLOv5DeepSort实现目标跟踪 pytorch yolo…

标准版IP地址证书

IP地址证书是一种网络安全工具,用于确保互联网通信中IP地址的所有权和真实性。它类似于为网站颁发的SSL/TLS证书,但专门针对IP地址。这种证书由受信任的第三方机构(如证书颁发机构)签发,包含公钥、所有者信息和有效期。…

低噪声、低电压、低功耗运放,提供轨到轨输出能力的芯片D722介绍

产品简介 D722是低噪声、低电压、低功耗运放,应用广泛。D722具有9MHz的高增益带宽积,转换速率为8.5V/μs,静态电流为1.7mA(5V电源电压)。 D722具有低电压、低噪声的特点,并提供轨到轨输出能力,D…

BGP联盟、对等体组、按组打包

BGP联盟 将大的AS划分为几个子AS(成员AS),每个子AS内部建立全连接的IBGP邻居,子AS之间建立EBGP邻接关系。 联盟AS:大AS,就是常说的AS号,一般使用公有AS号。 成员AS:小AS&#xff…