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

如何用Python生成带三类标签的三层嵌套同心圆数据集

Python生成三层嵌套同心圆数据集解决方案

你可以通过极坐标自定义生成的方式实现三层同心圆,该方案灵活度更高,可自由调整每个圈层的半径、噪声大小和样本数量,完整可运行代码如下:

import numpy as np
import matplotlib.pyplot as plt

def make_three_circles(n_samples_per_class=200, noise=0.05, radii=[3, 2, 1]):
    # radii参数按从外到内的顺序对应class0、class1、class2的圈层半径
    X = []
    y = []
    for class_id, r in enumerate(radii):
        # 随机生成0到2π的极角
        theta = np.random.uniform(0, 2 * np.pi, n_samples_per_class)
        # 为半径添加高斯噪声,让圈层更自然
        r_noisy = r + np.random.normal(0, noise, n_samples_per_class)
        # 极坐标转换为笛卡尔坐标
        x_axis = r_noisy * np.cos(theta)
        y_axis = r_noisy * np.sin(theta)
        X.append(np.column_stack((x_axis, y_axis)))
        y.append(np.full(n_samples_per_class, class_id))
    # 合并所有样本和对应标签
    X = np.vstack(X)
    y = np.hstack(y)
    return X, y

# 生成数据集
X, y = make_three_circles()

# 可视化效果
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='viridis', marker='o', facecolors='none', s=50)
plt.axis('equal')
plt.show()

参数说明

  • n_samples_per_class:每个圈层对应的样本数量,可根据需求自定义
  • noise:控制样本点的离散程度,数值越大圈层边缘越不规则
  • radii:三个圈层的半径值,按从外到内的顺序设置即可

如果你想基于sklearn现有接口实现,也可以通过两次调用make_circles后拼接数据集实现:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_circles

# 生成外层(class0)和中间层(class1)样本
X_outer_mid, y_outer_mid = make_circles(n_samples=400, noise=0.05, factor=0.6)
# 生成内层(class2)样本
X_mid_inner, y_mid_inner = make_circles(n_samples=200, noise=0.05, factor=0.6)
X_inner = X_mid_inner[y_mid_inner==1] * 0.6
y_inner = np.full(len(X_inner), 2)

# 合并所有样本和标签
X = np.vstack([X_outer_mid, X_inner])
y = np.hstack([y_outer_mid, y_inner])

# 可视化
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='viridis', marker='o', facecolors='none', s=50)
plt.axis('equal')
plt.show()

注:你原代码中导入pylab as pl但调用时使用plt属于变量名不匹配,上述代码统一使用官方更推荐的matplotlib.pyplot导入方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:15:02