Python 生成数据 make_circles 和 make_moons

题目:

     生成数据 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 百度经验

  • 18
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是针对您的问题,使用 scikit-learn 中提供的样本生成make_blobs、make_classification、make_moonsmake_circles 生成一系列线性或非线性可分的二类别数据,并分别将 SVM 中四种核函数(线性核、多项式核、高斯核、S 形核)用于上述四种数据集;通过散点图可视化数据样本,并画出 SVM 模型的决策边界,通过模型评价分类准确率的代码实现: ```python import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import make_blobs, make_classification, make_moons, make_circles from sklearn.model_selection import train_test_split from sklearn.svm import SVC from sklearn.metrics import accuracy_score # 定义 SVM 模型和核函数 model_linear = SVC(kernel='linear') model_poly = SVC(kernel='poly', degree=2) model_rbf = SVC(kernel='rbf') model_sigmoid = SVC(kernel='sigmoid') # 定义数据生成器和相关参数 dataset_funcs = [make_blobs, make_classification, make_moons, make_circles] kernel_funcs = [model_linear, model_poly, model_rbf, model_sigmoid] dataset_names = ['make_blobs', 'make_classification', 'make_moons', 'make_circles'] # 循环遍历数据集,分别训练 SVM 模型并绘制决策边界 for i, dataset_func in enumerate(dataset_funcs): X, y = dataset_func(n_samples=200, random_state=42) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) plt.figure(figsize=(10, 8)) plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap='viridis', alpha=0.5) # 循环遍历核函数,分别训练 SVM 模型并绘制决策边界 for j, kernel_func in enumerate(kernel_funcs): model_name = kernel_func.kernel plt.subplot(2, 2, j+1) plt.title(model_name) kernel_func.fit(X_train, y_train) y_pred = kernel_func.predict(X_test) acc = accuracy_score(y_test, y_pred) plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap='viridis', alpha=0.5) plt.scatter(X_test[:, 0], X_test[:, 1], c=y_pred, cmap='viridis', marker='x') xx, yy = np.meshgrid(np.linspace(X[:, 0].min()-0.5, X[:, 0].max()+0.5, 100), np.linspace(X[:, 1].min()-0.5, X[:, 1].max()+0.5, 100)) Z = kernel_func.predict(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) plt.contour(xx, yy, Z, colors='k', levels=[-1, 0, 1], alpha=0.5) plt.text(xx.max()-0.3, yy.min()+0.3, f"Accuracy: {acc:.2f}") plt.suptitle(f"{dataset_names[i]} dataset") plt.show() ``` 这段代码首先定义了 SVM 模型和核函数,并定义了数据生成器和相关参数。然后循环遍历数据集和核函数,分别训练 SVM 模型并绘制决策边界。在每个数据集中,使用散点图可视化数据样本,并循环遍历核函数,分别训练 SVM 模型并绘制决策边界。最后输出模型的分类准确率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值