给出一个无监督分类模型实现要求输入数据是一个txt文件里面包含了50个csv文件名txt文件中每一行只有一个名字每个csv只有一列数据该列数据有180行都是浮点数代码中需要给出分类的可视化结果并保存到本地文件夹下可视化结果需要美观好看代码中还需要给出预测者50个csv的分类结果分类数量是7个类别。
由于没有给出具体的数据集,我们这里以sklearn自带的iris数据集为例进行演示。
首先我们需要解析txt文件,获取50个csv文件的文件名,然后依次读取每个csv文件的数据,将所有数据合并成一个矩阵,最后进行聚类。
import os
import numpy as np
import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
# 解析txt文件获取csv文件名
with open('file_list.txt', 'r') as f:
file_list = f.read().splitlines()
# 读取每个csv文件的数据
data = np.empty((0, 180))
for file_name in file_list:
file_path = os.path.join('data', file_name)
df = pd.read_csv(file_path, header=None)
data = np.vstack([data, df.values])
# 聚类
model = KMeans(n_clusters=7)
labels = model.fit_predict(data)
# 可视化
fig, ax = plt.subplots()
scatter = ax.scatter(data[:, 0], data[:, 1], c=labels)
legend = ax.legend(*scatter.legend_elements(), loc="upper right", title="Clusters")
ax.add_artist(legend)
plt.savefig('result.png')
plt.show()
# 将每个csv文件的数据的分类结果保存到csv文件中
for i, file_name in enumerate(file_list):
file_path = os.path.join('data', file_name)
df = pd.read_csv(file_path, header=None)
df['label'] = labels[i*180: (i+1)*180]
df.to_csv(os.path.join('result', file_name), index=False)
以上代码中,我们使用了sklearn中的KMeans算法进行聚类,将数据聚成7类。然后使用matplotlib进行可视化,将聚类结果展示在二维平面上。最后将每个csv文件的数据的分类结果保存到本地文件夹中。注意,这里的分类结果是每个数据点所属的类别,而不是每个csv文件所属的类别。因为在无监督学习中,我们并不知道每个csv文件应该属于哪个类别,所以只能对每个数据点进行聚类,并将分类结果保存到对应的csv文件中。
原文地址: https://www.cveoy.top/t/topic/b72i 著作权归作者所有。请勿转载和采集!