题目:
生成数据 make_circles 和 make_moons,并显示 X = 400x2, Y = {0, 1}400 ,画图
知识要点:
① make_circles:
函数 : X_circle,Y_circle=make_circles(n_samples=400,noise=0.1,factor=0.1) |
参数 :n_samples:设置样本数量、noise:设置噪声,小的话比较集中、factor:0 < double < 1 默认值0.8,内外圆之间的比例因子、random_state:设置随机参数 (部分) |
作用 :生成数据集,形成一个二维的大圆,包含一个小圆 |
② make_moons:
函数:X_moon,Y_moon=make_moons(n_samples=400,noise=0.1) |
参数:n_samples:设置样本数量、noise:设置噪声(部分) |
作用:生成数据集,形成两个弯月。 |
返回值: X:[n_samples, 2]形状的数组,生成的样本 Y:[n_samples]形状的数组,每个样本的标签(0或1)
问题及解决:
①: 两张图不能同时显现(关闭一张后另一张显现)。
a.使用plt.figure()新建窗口,并在最后使用plt.show()显示。
b.使用plt.subpolt()划分出子图。
②:散点图使用圆圈标记,重叠部分太多,圆圈边界不明显。
答: 在plt.scatter()函数中加入参数edgecolors=‘color’(color为某种颜色)
同时可以使用不同的颜色搭配进行装饰。
③:noise和factor的参数可以进行多次调整,运行得到不同的图形。
随着noise增大各点的分布更加散乱,两种不同标签的点逐渐交叉。随着factor增大,内 圆逐渐接近外圆。
④:对于X_circle[:,0],X_circle[:,1] 的理解
答:因为X的返回值是[n_samples, 2]形状的数组,所以分别以第一列和第二列的数字作 为x,y坐标的值,两两对应形成坐标。
代码实现(Python):
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import make_circles
from sklearn.datasets import make_moons
#生成数据 make_circles 和 make_moons,并显示 X = 400x2, Y = {0, 1}400 ,画图:
#返回值x:[n_samples, 2]形状的数组,生成的样本
# y:[n_samples]形状的数组,每个样本的标签(0或1)
def draw_circle_and_moon():
X_circle,Y_circle=make_circles(n_samples=400,noise=0.1,factor=0.1)
plt.figure("circle")
plt.scatter(X_circle[:,0],X_circle[:,1],s=100,marker="o",edgecolors='r',c=Y_circle)
#c=Y_circle划分两种标签数据的颜色
plt.title('data by make_circles()')
X_moon,Y_moon=make_moons(n_samples=400,noise=0.1)
plt.figure("moon")
plt.scatter(X_moon[:,0],X_moon[:,1],s=100,marker="o",edgecolors='m',c=Y_moon)
plt.title('data by make_moons()')
plt.show()
draw_circle_and_moon()
结果展示:
参考资料:
https://blog.csdn.net/xuxinrk/article/details/80212221 scatter函数的用法
https://blog.csdn.net/qq_42804678/article/details/96498594 make_circles和make_moons
https://jingyan.baidu.com/article/b2c186c81e8fa6c46ff6ff5b.html make_circles 百度经验