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

DBSCAN聚类交互式绘图代码报错及修复咨询

问题解决:DBSCAN交互式绘图修复

核心问题分析

  1. NameError: train_test_split未定义:你提到已导入但仍报错,可能是代码中未实际使用该模块却保留了调用,或是导入语句位置错误。从你提供的代码看,train_test_split并未被使用,可直接移除该导入,或检查是否有遗漏的代码片段使用了它。
  2. 交互逻辑失效:滑块参数未传递给DBSCAN模型,且UI布局存在重复定义和变量错误。

修复后的完整代码

import pandas as pd
import numpy as np
from sklearn.cluster import DBSCAN
import ipywidgets as widgets
from ipywidgets import Layout, interactive_output, HBox, VBox
import matplotlib.pyplot as plt

# 加载数据
df_mv = pd.read_csv("https://raw.githubusercontent.com/HanaBachi/MachineLearning/main/multishape.csv")

# 创建UI组件
title_text = widgets.Text(
    value='DBSCAN, Hana Bachi, The University of Texas at Austin',
    layout=Layout(width='950px', height='30px')
)

eps_slider = widgets.FloatSlider(
    min=0.05, max=2.0, value=0.155, step=0.05,
    description='eps:', orientation='horizontal',
    style={'description_width': 'initial'}, continuous_update=False
)

min_pts_slider = widgets.IntSlider(
    min=2, max=10, value=5, step=1,
    description='min_samples:', orientation='horizontal',
    style={'description_width': 'initial'}, continuous_update=False
)

# 定义绘图函数
def dbscan_plot(eps, min_samples):
    # 训练DBSCAN模型
    db = DBSCAN(eps=eps, min_samples=min_samples).fit(df_mv)
    labels = db.labels_
    n_clusters = len(set(labels)) - (1 if -1 in labels else 0)
    n_noise = list(labels).count(-1)
    
    # 准备数据
    x = df_mv.values[:, 0]
    y = df_mv.values[:, 1]
    
    # 绘制图形
    plt.figure(figsize=(14,7))
    plt.scatter(x, y, c=labels, cmap='tab10', s=50)
    plt.scatter(x[labels == -1], y[labels == -1], c='k', marker='x', s=100, label='噪声点')
    plt.title(f'DBSCAN聚类结果: 簇数={n_clusters}, 噪声点={n_noise}', fontsize=20)
    plt.legend()
    plt.colorbar(ticks=range(n_clusters), label='簇标签')
    plt.show()

# 创建交互输出
interactive_plot = interactive_output(dbscan_plot, {'eps': eps_slider, 'min_samples': min_pts_slider})

# 布局UI
ui = VBox([
    title_text,
    HBox([eps_slider, min_pts_slider]),
    interactive_plot
])

# 显示UI
display(ui)

关键修复点说明

  • 导入补全:添加了所有必要的库导入(pandas、numpy、sklearn、ipywidgets、matplotlib)。
  • 参数传递修复:绘图函数dbscan_plot现在正确使用滑块传入的eps和min_samples参数,而非硬编码值。
  • 滑块类型修正:将minPts改为IntSlider,因为DBSCAN的min_samples必须是整数。
  • UI结构优化:移除重复的UI组件定义,统一布局为垂直盒子,包含标题、滑块和绘图区域。
  • 功能增强:在标题中显示当前簇数和噪声点数量,添加图例说明噪声点。
  • 错误输出恢复:移除了sys.stdout重定向,方便调试时查看错误信息。
  • 变量名规范:更改变量名使其更清晰(如eps_slider替代eps),避免与函数参数混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:10:27