基于K均值算法的心电信号无监督分类模型实现
基于K均值算法的心电信号无监督分类模型实现
本模型实现了一个基于K均值算法的心电信号无监督分类模型,能够将869个心电信号数据进行聚类,并生成可视化结果,最终将每个信号数据所属类别存储到本地。
1. 数据预处理
首先需要将所有csv文件读入内存,并将数据转换为numpy数组,以便后续处理。
import numpy as np
import pandas as pd
# 读入所有csv文件并保存到字典中
data_dict = {}
with open('abnormal_list.txt', 'r') as f:
for line in f:
filename = line.strip()
data = pd.read_csv('Abnormal/' + filename, header=None).values.flatten()
data_dict[filename] = data
# 合并所有数据为一个大矩阵
X = np.vstack(list(data_dict.values()))
2. 模型训练
使用sklearn库中的KMeans模型进行训练,聚类数量为5。
from sklearn.cluster import KMeans
# KMeans模型训练
kmeans = KMeans(n_clusters=5, random_state=42)
y_pred = kmeans.fit_predict(X)
3. 可视化结果
使用matplotlib库将聚类结果可视化,并保存到本地。
import matplotlib.pyplot as plt
# 可视化聚类结果
fig, ax = plt.subplots()
for i in range(5):
mask = y_pred == i
ax.scatter(X[mask, 0], X[mask, 1], label=f'Cluster {i+1}')
ax.legend()
plt.savefig('cluster_result.png')
plt.show()
4. 存储每个csv文件的类别结果
将聚类结果按照每个csv文件的顺序进行存储。
# 存储每个csv文件的类别结果
with open('result.txt', 'w') as f:
for filename, data in data_dict.items():
idx = int(np.where((X == data).all(axis=1))[0])
cluster = y_pred[idx]
f.write(f'{filename},{cluster}\n')
完整代码如下:
import numpy as np
import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
# 读入所有csv文件并保存到字典中
data_dict = {}
with open('abnormal_list.txt', 'r') as f:
for line in f:
filename = line.strip()
data = pd.read_csv('Abnormal/' + filename, header=None).values.flatten()
data_dict[filename] = data
# 合并所有数据为一个大矩阵
X = np.vstack(list(data_dict.values()))
# KMeans模型训练
kmeans = KMeans(n_clusters=5, random_state=42)
y_pred = kmeans.fit_predict(X)
# 可视化聚类结果
fig, ax = plt.subplots()
for i in range(5):
mask = y_pred == i
ax.scatter(X[mask, 0], X[mask, 1], label=f'Cluster {i+1}')
ax.legend()
plt.savefig('cluster_result.png')
plt.show()
# 存储每个csv文件的类别结果
with open('result.txt', 'w') as f:
for filename, data in data_dict.items():
idx = int(np.where((X == data).all(axis=1))[0])
cluster = y_pred[idx]
f.write(f'{filename},{cluster}\n')
注意:
由于本模型涉及到比较多的数据处理,代码较长,因此只能给出核心代码,具体实现请根据需要自行编写。
原文地址: https://www.cveoy.top/t/topic/nrmL 著作权归作者所有。请勿转载和采集!