You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DBSCAN聚类遍历参数组合生成CSV仅输出最后结果问题排查

问题排查

原代码无法输出全量参数组合结果,核心错误如下:

  • 导入语句存在语法错误,pandas导入和sklearn导入行粘连
  • 未提前加载CSV坐标数据,DBSCAN拟合时输入的points变量未定义
  • 循环内变量名引用错误:训练完成的模型对象名、eps/min_samples参数名拼写错误,导致代码本身无法正常运行
  • 每次循环重复读取原始CSV文件,存在不必要的IO开销
  • 未按要求新增「簇内点数量」列
  • 未做变量隔离,后续循环的计算结果容易覆盖之前的数值
修正后代码
%matplotlib notebook
import numpy as np
from interp import *
import pandas as pd
from sklearn.cluster import DBSCAN
from sklearn.neighbors import NearestNeighbors
from sklearn.metrics import silhouette_score
import itertools

points_file = "examples/example-1/fcr.csv"
# 循环外一次性加载原始数据,提取DBSCAN需要的坐标输入
df_origin = pd.read_csv(points_file, header=None, names=["x", "y", "z", "id"])
points = df_origin[["x", "y", "z"]].values

eps_values = np.arange(0.1, 0.5, 0.1)
min_samples_values = np.arange(5, 20)
dbscan_params = list(itertools.product(eps_values, min_samples_values))

for eps, min_sam in dbscan_params:
    # 训练当前参数下的DBSCAN模型
    db_model = DBSCAN(eps=eps, min_samples=min_sam).fit(points)
    cluster_labels = db_model.labels_
    # 统计每个簇(含标签为-1的噪声点)的点数量
    cluster_size_map = pd.Series(cluster_labels).value_counts().to_dict()
    
    # 复制原始数据追加新列,避免修改原数据导致后续循环出错
    df_result = df_origin.copy()
    df_result["cluster_label"] = cluster_labels
    df_result["cluster_point_count"] = df_result["cluster_label"].map(cluster_size_map)
    df_result["eps"] = eps
    df_result["min_samples"] = min_sam
    
    # 生成输出文件名,eps保留2位小数避免浮点数精度导致文件名异常
    output_name = f'fcr_eps{round(eps,2)}_minsamples{min_sam}.csv'
    df_result.to_csv(output_name, index=False)
代码说明
  • 所有参数组合遍历完成后,会在当前运行目录生成对应数量的独立CSV文件,文件名直接标注所用的eps和min_samples取值,方便后续筛选
  • 输出CSV保留原始x/y/z/id四列,新增四列:簇标签、对应簇的总点数、当前eps值、当前min_samples值,其中标签为-1的行是DBSCAN识别出的噪声点,簇内点数量统计的是总噪声点数
  • 循环内每次复制原始数据生成新的结果表,不会出现不同参数的计算结果互相覆盖的问题
  • 去掉了原代码中无意义的空列表追加逻辑,如果需要统计所有参数组合的簇总数,可以在循环内按需追加到对应列表即可

内容的提问来源于stack exchange,提问作者JoshDragon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 21:27:25