除了内置的数据集,scikit-learn还提供了随机样本的生成器。
通过这些生成器函数,可以生成具有特定特性和分布的随机数据集,以帮助进行机器学习算法的研究、测试和比较。

目前,scikit-learn库(v1.3.0版)中有20个不同的生成样本的函数。
本篇重点介绍其中几个具有代表性的函数。

1. 分类聚类数据样本

分类和聚类是机器学习中使用频率最高的算法,创建各种相关的样本数据,能够帮助我们更好的试验算法。

1.1. make_blobs

这个函数通常用于可视化分类器的学习过程,它生成由聚类组成的非线性数据集。

import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs X, Y = make_blobs(n_samples=1000, centers=5)
plt.scatter(X[:, 0], X[:, 1], marker="o", c=Y, s=25) plt.show()


上面的示例生成了1000个点的数据,分为5个类别。

make_blobs的主要参数包括:

  • n_samples:生成的样本数。
  • n_features:每个样本的特征数。通常为2,表示我们生成的是二维数据。
  • centers:聚类的数量。即生成的样本会被分为多少类。
  • cluster_std:每个聚类的标准差。这决定了聚类的形状和大小。
  • shuffle:是否在生成数据后打乱样本。
  • random_state:随机数生成器的种子。这确保了每次运行代码时生成的数据集都是一样的。

1.2. make_classification

这是一个用于生成复杂二维数据的函数,通常用于可视化分类器的学习过程或者测试机器学习算法的性能。

import matplotlib.pyplot as plt
from sklearn.datasets import make_classification X, Y = make_classification(n_samples=100, n_classes=4, n_clusters_per_class=1)
plt.scatter(X[:, 0], X[:, 1], marker="o", c=Y, s=25) plt.show()


可以看出它生成的各类数据交织在一起,很难做线性的分类。

make_classification的主要参数包括:

  • n_samples:生成的样本数。
  • n_features:每个样本的特征数。这个参数决定了生成的数据集的维度。
  • n_informative:具有信息量的特征的数量。这个参数决定了特征集中的特征有多少是有助于分类的。
  • n_redundant:冗余特征的数量。这个参数决定了特征集中的特征有多少是重复或者没有信息的。
  • random_state:随机数生成器的种子。这确保了每次运行代码时生成的数据集都是一样的。

1.3. make_moons

和函数名称所表达的一样,它是一个用于生成形状类似于月牙的数据集的函数,通常用于可视化分类器的学习过程或者测试机器学习算法的性能。

from sklearn.datasets import make_moons

fig, ax = plt.subplots(1, 3)
fig.set_size_inches(9, 3) X, Y = make_moons(noise=0.01, n_samples=1000)
ax[0].scatter(X[:, 0], X[:, 1], marker="o", c=Y, s=25)
ax[0].set_title("noise=0.01") X, Y = make_moons(noise=0.05, n_samples=1000)
ax[1].scatter(X[:, 0], X[:, 1], marker="o", c=Y, s=25)
ax[1].set_title("noise=0.05") X, Y = make_moons(noise=0.5, n_samples=1000)
ax[2].scatter(X[:, 0], X[:, 1], marker="o", c=Y, s=25)
ax[2].set_title("noise=0.5") plt.show()


noise越小,数据的分类越明显。

make_moons的主要参数包括:

  • n_samples:生成的样本数。
  • noise:在数据集中添加的噪声的标准差。这个参数决定了月牙的噪声程度。
  • random_state:随机数生成器的种子。这确保了每次运行代码时生成的数据集都是一样的。

2. 回归数据样本

除了分类聚类回归是机器学习的另一个重要方向。
scikit-learn同样也提供了创建回归数据样本的函数。

from sklearn.datasets import make_regression

fig, ax = plt.subplots(1, 3)
fig.set_size_inches(9, 3) X, y = make_regression(n_samples=100, n_features=1, noise=20)
ax[0].scatter(X[:, 0], y, marker="o")
ax[0].set_title("noise=20") X, y = make_regression(n_samples=100, n_features=1, noise=10)
ax[1].scatter(X[:, 0], y, marker="o")
ax[1].set_title("noise=10") X, y = make_regression(n_samples=100, n_features=1, noise=1)
ax[2].scatter(X[:, 0], y, marker="o")
ax[2].set_title("noise=1") plt.show()


通过调节noise参数,可以创建不同精确度的回归数据。

make_regression的主要参数包括:

  • n_samples:生成的样本数。
  • n_features:每个样本的特征数。通常为一个较小的值,表示我们生成的是一维数据。
  • noise:噪音的大小。它为数据添加一些随机噪声,以使结果更接近现实情况。

3. 流形数据样本

所谓流形数据,就是S形或者瑞士卷那样旋转的数据,可以用来测试更复杂的分类模型的效果。
比如下面的make_s_curve函数,就可以创建S形的数据:

from sklearn.datasets import make_s_curve

X, Y = make_s_curve(n_samples=2000)

fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
fig.set_size_inches((8, 8))
ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=Y, s=60, alpha=0.8)
ax.view_init(azim=-60, elev=9)
plt.show()

4. 总结

本文介绍的生成样本数据的函数只是scikit-learn库中各种生成器的一部分,
还有很多种其他的生成器函数可以生成更加复杂的样本数据。

所有的生成器函数请参考文档:
https://scikit-learn.org/stable/modules/classes.html#samples-generator

【scikit-learn基础】--『数据加载』之样本生成器的更多相关文章

  1. Python 数据分析(一) 本实验将学习 pandas 基础,数据加载、存储与文件格式,数据规整化,绘图和可视化的知识

    第1节 pandas 回顾 第2节 读写文本格式的数据 第3节 使用 HTML 和 Web API 第4节 使用数据库 第5节 合并数据集 第6节 重塑和轴向旋转 第7节 数据转换 第8节 字符串操作 ...

  2. odoo基础数据加载

    odoo 基础数据加载 这里介绍的odoo基础数据加载分两种方式,一种是演示数据加载,一种是默认数据加载,下面就是详细介绍 首先,当然是创建一个date文件夹 项目目录,右键自定义一个文件夹 XML数 ...

  3. transformers 之Trainer对应的数据加载

    基础信息说明 本文以Seq2SeqTrainer作为实例,来讨论其模型训练时的数据加载方式 预训练模型:opus-mt-en-zh 数据集:本地数据集 任务:en-zh 机器翻译 数据加载 Train ...

  4. ScrollView嵌套ListView,GridView数据加载不全问题的解决

    我们大家都知道ListView,GridView加载数据项,如果数据项过多时,就会显示滚动条.ScrollView组件里面只能包含一个组件,当ScrollView里面嵌套listView,GridVi ...

  5. python多种格式数据加载、处理与存储

    多种格式数据加载.处理与存储 实际的场景中,我们会在不同的地方遇到各种不同的数据格式(比如大家熟悉的csv与txt,比如网页HTML格式,比如XML格式),我们来一起看看python如何和这些格式的数 ...

  6. flask+sqlite3+echarts3+ajax 异步数据加载

    结构: /www | |-- /static |....|-- jquery-3.1.1.js |....|-- echarts.js(echarts3是单文件!!) | |-- /templates ...

  7. Entity Framework关联查询以及数据加载(延迟加载,预加载)

    数据加载分为延迟加载和预加载 EF的关联实体加载有三种方式:Lazy Loading,Eager Loading,Explicit Loading,其中Lazy Loading和Explicit Lo ...

  8. JQuery插件:遮罩+数据加载中。。。(特点:遮你想遮,罩你想罩)

    在很多项目中都会涉及到数据加载.数据加载有时可能会是2-3秒,为了给一个友好的提示,一般都会给一个[数据加载中...]的提示.今天就做了一个这样的提示框. 先去jQuery官网看看怎么写jQuery插 ...

  9. 如何评估ETL的数据加载时间

    简述如何评估大型ETL数据加载时间. 答:评估一个大型的ETL的数据加载时间是一件很复杂的事情.数据加载分为两类,一类是初次加载,另一类是增量加载. 在数据仓库正式投入使用时,需要进行一次初次加载,而 ...

  10. 浅谈Entity Framework中的数据加载方式

    如果你还没有接触过或者根本不了解什么是Entity Framework,那么请看这里http://www.entityframeworktutorial.net/EntityFramework-Arc ...

随机推荐

  1. Jni GetMethodID中函数标识sig的详细解释

    在 JNI(Java Native Interface)中,GetMethodID 函数用于获取 Java 类的方法的标识符.这个函数的详细解释如下: cCopy code jmethodID Get ...

  2. 12、Mybatis之分页插件

    12.1.引入依赖 <!--分页插件--> <dependency> <groupId>com.github.pagehelper</groupId> ...

  3. Redis的五大数据类型的数据结构

    概述   Redis底层有六种数据类型包括:简单动态字符串.双向链表.压缩列表.哈希表.跳表和整数数组.这六种数据结构五大数据类型关系如下: String:简单动态字符串 List:双向链表.压缩列表 ...

  4. 2.2 PE结构:文件头详细解析

    PE结构是Windows系统下最常用的可执行文件格式,理解PE文件格式不仅可以理解操作系统的加载流程,还可以更好的理解操作系统对进程和内存相关的管理知识,DOS头是PE文件开头的一个固定长度的结构体, ...

  5. 使用“文心一言”编写技术博文《搭建企业知识库:基于 Wiki.js 的实践指南》

    百度于8月31日零点宣布,文心一言率先向全社会全面开放.我也是立即体验了下,感觉还不错.下面分享一下,如何使用"文心一言"写一篇技术博客. Step 01 生成文案主体 可以对文心 ...

  6. 回归克里格、普通克里格插值在ArcGIS中的实现

      本文介绍基于ArcMap软件,实现普通克里格.回归克里格方法的空间插值的具体操作. 目录 1 背景知识准备 2 回归克里格实现 2.1 采样点与环境变量提取 2.2 子集要素划分 2.3 异常值提 ...

  7. 快速搭建SpringBoot3.x项目

    写在前面 上一小节中我们从0到1 使用Vite搭建了一个Vue3项目,并集成了Element Plus 实现了一个简单的增删改查页面. 这一篇中我们将使用IDEA快速搭建一个SpringBoot3.x ...

  8. 【.NET8】访问私有成员新姿势UnsafeAccessor(上)

    前言 前几天在.NET性能优化群里面,有群友聊到了.NET8新增的一个特性,这个类叫UnsafeAccessor,有很多群友都不知道这个特性是干嘛的,所以我就想写一篇文章来带大家了解一下这个特性. 其 ...

  9. DevOps|破除壁垒,重塑协作-业务闭环释放产研运协作巨大效能

    - 会议太多了,员工开会效率降低了50%! 上篇文章<研发效能组织架构:职能独立vs业务闭环>介绍了职能独立型组织架构和业务闭环型组织架构的特点,优劣势.也许有的小伙伴可能对这两种组织架构 ...

  10. C++20起支持的一个小特性

    注释掉的为传统的写法,从C++20起支持default关键字修饰的写法,即使是成员变量有多个的时候也支持,减轻了程序员的心智负担.