在机器学习和流形学习的研究中,常常需要一些经典的玩具数据集来验证算法的有效性。其中,双圆环(Two Circles)数据集是一个非常典型的非线性可分示例:两个同心圆环,内环和外环分别属于不同类别,线性分类器无法分离,而谱聚类、LLE、Laplacian Eigenmaps等流形学习算法能轻松捕捉其内在结构。今天我们来剖析一个简单却实用的MATLAB函数——GenTwoNoisyCircle,它能快速生成带噪声的双圆环数据集,便于算法测试和可视化演示。
函数的基本功能
GenTwoNoisyCircle 无输入参数(或可扩展支持指定样本数),默认生成每个圆环200个样本点,总共400个样本。
返回:
fea:400 × 2 的特征矩阵,每行是一个二维样本点
gnd:400 × 1 的标签向量,内环标签为1,外环标签为2
数据生成原理
函数的核心思想是:在极坐标系下先生成均匀分布的角度,然后为内环和外环分别设置不同的半径范围,并加入随机噪声。
具体步骤:
设置样本数 N = 200(每个环)
生成角度序列:thetaPos = π × (2 × [1:N] / N),即从0到几乎2π均匀分布(避免完全闭合重叠)
内环半径 rB:在1附近添加均匀噪声,rB = 1 + 0.5 × rand(1,N),半径范围约[1, 1.5]
外环半径 rA:在2附近添加均匀噪声