以下是 DBSCAN 无监督聚类方法的实现代码:

import os
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN
from sklearn.preprocessing import StandardScaler

# 读取文件名列表
file_list = []
with open('abnormal_list.txt', 'r') as f:
    for line in f:
        file_list.append(line.strip())

# 定义聚类函数
def cluster(file_name):
    # 读取数据
    data = pd.read_csv(os.path.join('Abnormal', file_name), header=None, skiprows=1).values

    # 数据标准化
    scaler = StandardScaler()
    data = scaler.fit_transform(data)

    # 聚类
    dbscan = DBSCAN(eps=0.5, min_samples=5)
    labels = dbscan.fit_predict(data)

    # 可视化
    fig, ax = plt.subplots()
    markers = ['*', 's', '^', 'o', 'v']
    for i in range(-1, np.max(labels)+1):
        if i == -1:
            color = 'k'
        else:
            color = plt.cm.Set1(i/10)
        ax.scatter(data[labels==i, 0], data[labels==i, 1], marker=markers[i%5], color=color, label=i)
    ax.legend(loc='best')
    ax.set_title(file_name)
    plt.savefig(os.path.join('result', file_name[:-4]+'.png'))
    plt.close()

    # 保存分类结果
    result = pd.DataFrame({'labels': labels})
    result.to_csv(os.path.join('result', file_name[:-4]+'.csv'), index=False)

# 创建结果文件夹
if not os.path.exists('result'):
    os.mkdir('result')

# 聚类并可视化每个文件
for file_name in file_list:
    cluster(file_name)

上述代码中,首先读取文件名列表,然后定义了聚类函数cluster,该函数读取一个csv文件并进行聚类和可视化,并将分类结果保存到本地。在聚类过程中,使用了StandardScaler对数据进行标准化,然后使用DBSCAN进行聚类。在可视化过程中,使用了五种不同的标记符号来表示五个类别,使用不同的颜色来区分不同的簇。最后,创建了一个名为result的文件夹来保存可视化结果和分类结果。在主程序中,遍历文件名列表并调用cluster函数进行聚类和可视化。

代码说明:

  1. abnormal_list.txt 文件包含需要聚类的所有 CSV 文件名,每个文件名占一行。
  2. Abnormal 文件夹包含所有 CSV 文件,每个文件包含 361 行数据,从第二行开始才是需要分析的数据。
  3. 聚类结果将保存在 result 文件夹中,每个 CSV 文件的聚类结果会生成一个 .png 图像文件和一个 .csv 文件,其中 .png 文件是可视化结果,.csv 文件是分类结果。
  4. 代码使用五种不同的符号表示五个类别,分别是:五角星、三角形、方块、*、^。
  5. 可以根据需要调整 DBSCAN 的参数 epsmin_samples

希望本代码可以帮助您实现对 869 个 CSV 文件的无监督聚类分析。

DBSCAN 无监督聚类实现:对 869 个 CSV 文件进行分类并可视化

原文地址: https://www.cveoy.top/t/topic/jKr5 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录