【Data Mining】01抽样技术

一、实验背景

在数据挖掘任务中,我们经常需要从大量数据中抽取样本进行分析或建模。本实验使用 R 自带的 iris 数据集,学习几种常见的抽样方法:

  • 简单随机抽样
  • 分层抽样
  • 整群抽样
  • 训练集 / 测试集划分

通过本实验,可以熟悉 R 语言的数据处理方式,并理解不同抽样技术的应用场景。

PS:对于每个属于R语言特性的代码,都进行了详细的解释,请放心食用!


二、数据集介绍

本实验使用 R 自带数据集 iris

该数据集包含 150 条鸢尾花样本,每个样本有 5 个变量:

变量 含义
Sepal.Length 花萼长度
Sepal.Width 花萼宽度
Petal.Length 花瓣长度
Petal.Width 花瓣宽度
Species 花的品种

共有三种花:

  • setosa
  • versicolor
  • virginica

三、加载数据

首先在 R 中加载 iris 数据集,并查看数据结构。

代码:

r 复制代码
# 加载数据集
data(iris)

# 查看前6行数据
head(iris)

运行后,你应该可以看到 iris 数据的前6行。


四、简单随机抽样

简单随机抽样是最基本的抽样方式,每个样本被抽中的概率相同。

本实验需要完成两种抽样:

1️⃣ 有放回抽样

2️⃣ 无放回抽样


1 有放回抽样(抽取5个样本)

有放回抽样意味着 一个样本可以被抽到多次

请完成代码:

r 复制代码
# 设置随机种子,保证结果可复现
seed(123)

# 从 iris 数据中随机抽取5个样本(允许重复)
sample_replace <- iris[sample(1:nrow(iris),5,replace = TRUE), ]

# 输出结果
________

提示:

需要使用函数:

复制代码
sample(1:nrow(iris),5,replace = TRUE)
1.其中nrow函数用于得到iris行数
2.r语言中下标左右都是闭区间 1:nrow(iris)
3.其中5代表抽样个数为5
4.replace = TRUE代表放回抽样,注意R语言中TRUE必须全为大写
5.sample函数第一个参数是待抽取的数据

关键参数:

复制代码
replace = TRUE,用于决定是否放回抽样
默认 replace=FALSE

2 无放回抽样(抽取5个样本)

无放回抽样意味着 每个样本只能出现一次

代码:

r 复制代码
sample_noreplace <- iris[sample(1:nrow(iris), 5, replace = FALSE), ]

sample_noreplace

提示:

复制代码
replace = FALSE

五、分层抽样

分层抽样是指 先按照某个变量分组,再在每个组内随机抽样

在 iris 数据中,我们可以按 Species(花的品种) 进行分层。

以按等数量抽样为例:

步骤:

  1. 加载 dplyr 包
  2. 按 Species 分组
  3. 每个组抽取 2 个样本

请补全代码:

r 复制代码
# 加载 dplyr
library(dplyr)

stratified_sample <- iris %>%
  group_by(Species) %>%
  sample_n(2)

stratified_sample

提示:

复制代码
%>%是管道符,代表将前一个值传输到下一个函数中,作为其第一个参数
也就是说将iris传到group_by()中作为其第一个参数,Species是第二个参数
其好处是避免了函数嵌套,便于理解

group_by()用于分类
sample_n()用于抽样
如果是按比例抽样则使用sample_frac()

如果有不同包中函数重名,则可使用dplyr::group_by(),
其中::是命名空间,用于指出使用哪个包的函数

六、整群抽样

整群抽样是指 先随机选择一个群体,然后选择该群体的全部样本

在 iris 数据中:

每个 Species 可以看作一个"群"。

实验目标:

随机选择 1 个 Species,并取出该 Species 的全部样本。

代码:

r 复制代码
# 随机选择一个 Species
cluster <- sample(unique(iris$Species), 1)

# 选择该 Species 的全部数据
cluster_sample <- iris[iris$Species == cluster, ]

cluster_sample

提示:

复制代码
$ 是 R 语言里的列提取符号,作用是从数据框里提取出某一列的数据
iris$Species代表提取iris中的Species列的数据

unique() 是 "去重函数",作用是把一列里重复的值只保留一个
unique(iris$Species)作用就是获取Species列中的类别

七、训练集和测试集划分

在机器学习和数据挖掘中,我们通常需要:

  • 训练集(Training Set)
  • 测试集(Test Set)

本实验要求:

复制代码
75% 训练集
25% 测试集

步骤:

1️⃣ 随机抽取 75% 样本

2️⃣ 剩余样本作为测试集

请补全代码:

r 复制代码
set.seed(123)

index <- sample(1:nrow(iris), 0.75*nrow(iris))

train_data <- iris[index, ]

test_data <- iris[-index, ]

# 查看样本数量
nrow(train_data)
nrow(test_data)

提示:

复制代码
在 R 的数据框 / 向量索引中,- 表示:"排除 / 不取这些下标 / 行号"
所以iris[-index, ]表示取排除index以外的行数据

八、实验总结

通过本实验,我学习了以下内容:

  1. R 语言中如何加载数据集
  2. 如何进行简单随机抽样(有放回 / 无放回)
  3. 如何进行分层抽样
  4. 如何进行整群抽样
  5. 如何将数据划分为训练集和测试集

这些技术在数据挖掘和机器学习中具有重要意义,将为后续的数据建模打下基础。


相关推荐
视***间8 分钟前
端侧大模型落地新标杆:视程空间将GPT-OSS边缘AI深度导入NVIDIA Jetson平台
人工智能·gpt·边缘计算·nvidia·ai算力·gpt-oss·视程空间
1892280486121 分钟前
NY379固态MT29F32T08GSLBHL8-36QA:B
大数据·服务器·人工智能·科技·缓存
Adair_z21 分钟前
[SEO艺术重读] 第9篇 熊猫算法、企鹅算法和惩罚机制
人工智能·熊猫算法·企鹅算法·谷歌算法恢复·网站seo诊断·高质量内容创作·e-e-a-t原则
ZZH_AI项目交付23 分钟前
我把 AI 最容易改坏真实 App 的地方,整理成了 skills
人工智能·ios·app
忆~遂愿24 分钟前
从文字应答到具象共情:Agent 交互的底层革新
人工智能·深度学习·目标检测·microsoft·机器学习·ar·交互
Ai.den26 分钟前
Windows 安装 MinerU 3.x 实现本地批量解析 PDF
人工智能·windows·ai
枫叶林FYL32 分钟前
【强化学习】长上下文可验证奖励强化学习:原理推导与系统架构
人工智能·系统架构
Teable任意门互动32 分钟前
深度解析:AI 赋能开源多维表格,实现企业全场景数据整合与高效应用
数据库·人工智能·低代码·信息可视化·开源·数据库开发
沪漂阿龙34 分钟前
Hermes Agent 安全边界全解析:让 AI Agent 敢执行、可控制、能回滚
人工智能·安全
天天进步201535 分钟前
从零打造 Python 全栈项目:智能教学辅助系统
开发语言·人工智能·python