判别分析下R语言gclus包wine数据集70:30拆分训练测试集方法
R语言划分gclus包wine数据集为7:3训练集、测试集方法
- 完全随机拆分方法
先加载依赖包与目标数据集:
提前设置随机种子保证结果可复现,不设置种子的话每次运行抽样结果都会变动,不利于后续分析结果复现,可任意指定一个整数作为种子值:# 未安装gclus包时先运行下一行安装 # install.packages("gclus") library(gclus) data(wine) # 加载内置wine数据集
按总样本量的70%抽取训练集行索引,剩余30%样本归为测试集:set.seed(123)# 计算训练集样本量,向下取整避免出现非整数样本数 train_sample_num <- floor(0.7 * nrow(wine)) # 随机抽取训练集对应的行索引 train_index <- sample(x = seq_len(nrow(wine)), size = train_sample_num) # 按索引匹配得到最终的训练集、测试集 train_set <- wine[train_index, ] test_set <- wine[-train_index, ] - 分层抽样方法(判别分析场景推荐使用)
判别分析属于分类任务,完全随机抽样可能导致训练集、测试集的葡萄酒类别占比和原数据集偏差较大,分层抽样可以保证两个数据集的类别分布和原数据一致,结果更可靠:# 未安装caret包时先运行下一行安装 # install.packages("caret") library(caret) set.seed(123) # 按数据集的类别列Class做分层抽样,抽取70%样本作为训练集 train_index <- createDataPartition(y = wine$Class, p = 0.7, list = FALSE) train_set <- wine[train_index, ] test_set <- wine[-train_index, ]
拆分完成后可运行
nrow(train_set)、nrow(test_set)核对两个数据集的样本量,确认比例符合要求;也可以运行table(train_set$Class)、table(test_set$Class)核对两个数据集的类别分布是否合理。
内容的提问来源于stack exchange,提问作者SarahB
相关产品推荐
相关产品推荐

