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

如何对包含三个不同类别的三圈数据集执行Spectral Clustering(谱聚类)

三圈同心数据集谱聚类实现

数据集构造

你提供的代码可生成带噪声的三类别同心环形数据集,代码如下:

from sklearn.datasets import make_circles
import seaborn as sns
import pandas as pd
import numpy as np
from sklearn.cluster import SpectralClustering
import matplotlib.pyplot as plt

# 生成两层环形数据,拼接得到三层环形数据集
X_small, y_small = make_circles(n_samples=(100,200), random_state=3, 
noise=0.07, factor = 0.7)
X_large, y_large = make_circles(n_samples=(100,200), random_state=3, 
noise=0.07, factor = 0.4)
y_large[y_large==1] = 2

# 构造数据集DataFrame
df = pd.DataFrame(np.vstack([X_small,X_large]),columns=['x1','x2'])
df['label'] = np.hstack([y_small,y_large])

# 查看原始数据集标签分布
print(df.label.value_counts())
# 可视化原始数据集
sns.scatterplot(data=df,x='x1',y='x2',hue='label',style='label',palette="bright")
plt.show()

生成的数据集可视化效果如下:
三圈数据集

谱聚类执行

针对环形非凸数据集,选择*径向基函数(RBF)*作为亲和度计算方式,设置聚类数为3即可完成分类,实现代码如下:

# 初始化谱聚类模型
sc = SpectralClustering(n_clusters=3, affinity='rbf', random_state=42, gamma=50)
# 拟合数据并得到聚类标签
df['spectral_label'] = sc.fit_predict(df[['x1','x2']])

# 可视化聚类结果
plt.figure(figsize=(8,6))
sns.scatterplot(data=df, x='x1', y='x2', hue='spectral_label', style='spectral_label', palette="bright")
plt.title("谱聚类结果")
plt.show()

参数说明

  • n_clusters=3:指定聚类数量为3,对应三个同心环类别
  • affinity='rbf':使用径向基函数计算样本亲和度,适配非凸的环形数据分布
  • gamma=50:RBF核的带宽参数,可根据噪声大小调整,数值越大对局部邻域越敏感

运行代码后即可得到和原始标签对齐的聚类结果,谱聚类可以很好的区分不同半径的环形数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:09:00