双月数据部分:
数据描述:上下两个半圆。可以通过调整参数进行半圆弧位置的变化。
定义基础参数:包括两个圆之间的半径以及上下两个圆之间的位置偏差XPosition、YPosition。
NumbleCount为生成的一个半圆的数据点个数。
PI = 3.141
CicleW = 2
CicleR = 5
XPosition = 5
YPosition = 4
NumbleCount = 1000
生成数据部分:作者使用了,极坐标的方式来生成随机的散点图,通过约束方程来对生成的散点图进行约束。通过对符合要求的数据点来进行计数,生成对应数据。
并且上半部分数据添加标签1,下半部分添加标签-1。
#定义约束方程
UpArea = 2*PI*(CicleW+CicleR)
DownArea = 2*PI*(CicleR)
count = 0
ClassX1 = []
ClassY1 = []
DataLabel = []
while(count < 2*NumbleCount):
Delter = random.uniform(0,PI) * (360/(2*PI))
DelterP = random.uniform(CicleR,CicleR+CicleW)
#DelterP*(math.sin(Delter)+math.cos(Delter))
if DelterP*math.sin(Delter) > 0 :
ClassX1.append(DelterP*math.cos(Delter))
ClassY1.append(DelterP*math.sin(Delter))
DataLabel.append(1)
count = count + 1
Delter = random.uniform(0, -PI) * (360 / (2 * PI))
if DelterP * math.sin(Delter) < 0:
ClassX1.append(DelterP * math.cos(Delter)+XPosition)
ClassY1.append(DelterP * math.sin(Delter)-YPosition)
DataLabel.append(-1)
count = count + 1
print("数据生成完成\n数据生成总量为:{}".format(len(ClassX1)))
plot.title('Creat Data')
plot.plot(ClassX1, ClassY1, 'r+')
之后数据的保存,通过csv或者mat类型的格式保存到文件中,便于后续算法的使用。
结果:
线型可分类型:
线型不可分类型: