使用K均值算法对心电信号进行无监督分类
使用K均值算法对心电信号进行无监督分类
本文提供了一个Python实现的K均值聚类模型,用于对869个心电信号数据进行无监督分类,每个信号数据包含361个点,并将聚类结果可视化并保存到本地。
1. 导入必要的库和模块
import os
import csv
import numpy as np
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
2. 定义数据加载函数
def load_data(file_path):
'''
从CSV文件中加载数据
:param file_path: CSV文件路径
:return: 二维数组,每行代表一个样本,每列代表一个特征
'''
data = []
with open(file_path, 'r') as f:
reader = csv.reader(f)
for row in reader:
data.append(float(row[0]))
return np.array(data).reshape(-1, 1)
3. 加载数据集
data_dir = 'Abnormal'
file_list = os.listdir(data_dir)
X = np.zeros((len(file_list), 361))
for i, file_name in enumerate(file_list):
file_path = os.path.join(data_dir, file_name)
X[i] = load_data(file_path).T
4. 训练模型
kmeans = KMeans(n_clusters=5, random_state=0).fit(X)
5. 可视化聚类结果
colors = ['r', 'g', 'b', 'c', 'm']
markers = ['o', 's', 'D', '^', 'x']
fig, ax = plt.subplots()
for i in range(X.shape[0]):
cluster_idx = kmeans.labels_[i]
ax.scatter(i, X[i], c=colors[cluster_idx], marker=markers[cluster_idx])
ax.set_xlabel('Sample Index')
ax.set_ylabel('Heart Signal')
ax.set_title('K-Means Clustering')
plt.savefig('clustering_result.png')
plt.show()
6. 存储聚类结果
cluster_result = kmeans.labels_
with open('cluster_result.txt', 'w') as f:
for i in cluster_result:
f.write(str(i) + '\n')
完整代码如下:
import os
import csv
import numpy as np
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
def load_data(file_path):
'''
从CSV文件中加载数据
:param file_path: CSV文件路径
:return: 二维数组,每行代表一个样本,每列代表一个特征
'''
data = []
with open(file_path, 'r') as f:
reader = csv.reader(f)
for row in reader:
data.append(float(row[0]))
return np.array(data).reshape(-1, 1)
data_dir = 'Abnormal'
file_list = os.listdir(data_dir)
X = np.zeros((len(file_list), 361))
for i, file_name in enumerate(file_list):
file_path = os.path.join(data_dir, file_name)
X[i] = load_data(file_path).T
kmeans = KMeans(n_clusters=5, random_state=0).fit(X)
colors = ['r', 'g', 'b', 'c', 'm']
markers = ['o', 's', 'D', '^', 'x']
fig, ax = plt.subplots()
for i in range(X.shape[0]):
cluster_idx = kmeans.labels_[i]
ax.scatter(i, X[i], c=colors[cluster_idx], marker=markers[cluster_idx])
ax.set_xlabel('Sample Index')
ax.set_ylabel('Heart Signal')
ax.set_title('K-Means Clustering')
plt.savefig('clustering_result.png')
plt.show()
cluster_result = kmeans.labels_
with open('cluster_result.txt', 'w') as f:
for i in cluster_result:
f.write(str(i) + '\n')
聚类结果可视化图和聚类结果txt文件将分别保存在当前目录下的clustering_result.png和cluster_result.txt文件中。
原文地址: https://www.cveoy.top/t/topic/nrmz 著作权归作者所有。请勿转载和采集!