R语言 将数据集分割成训练集和测试集
在这篇文章中,我们将看到如何使用R编程语言将数据集分割成训练集和测试集。
方法1:使用基础R
基础R语言中的sample()方法是用来获取一个指定大小的数据集作为输入。该数据集可以是一个向量、矩阵或数据框。然后这个方法从指定的数据集中提取一个样本。所选的样本包含了数据集中指定大小的元素,这些元素可以是有替换的,也可以是无替换的。
该抽样方法在R语言中的文档如下。
语法: sample(vec, size, replace = FALSE, prob = NULL)
参数:
- vec – 一个元素的向量或矩阵,从中选择样本。
- size – 所选条目的总数。
- replace – 指示样本是否应该被替换。
- prob – 概率权重,表示在训练和测试子集中保留的元素的比例。
下面的代码片段说明了这个过程,首先创建了数据集矩阵。
# creating the data set
mat = matrix(
# values from 1 to 21
c(1:21),
# No of rows
nrow = 7,
# No of columns
ncol = 3,
byrow = TRUE
)
print ("Dataset")
print (mat)
# divide the matrix into training set 70% and
# testing 30% respectively with replacement
sample <- sample(c(TRUE,FALSE), nrow(mat),
replace=TRUE, prob=c(0.7,0.3))
# creating training dataset
train_dataset <- mat[sample, ]
# creating testing dataset
test_dataset <- mat[!sample, ]
print("Training Dataset")
print (train_dataset)
print("Testing Dataset")
print (test_dataset)
输出
方法2:使用R中的dplyr包
R中的dplyr包是用来进行数据操作和运算的。它可以通过以下命令加载并安装到R工作空间中。
install.packages("dplyr")
首先使用R中的data.frame方法创建一个数据框,然后使用管道操作符应用dplyr包的sample_frac方法。该包中的sample_frac()方法用于从输入数据集中选择随机样本。它被用来从输入数据集中选择指定比例的项目。训练数据集可以用这个方法创建。它的语法如下。
语法: sample_frac(dataset, perc)
参数 :
- dataset – 输入数据集
- perc – 用于包含在训练数据集中的样本的百分比。
为了创建测试数据集,可以使用这个包的anti_join()方法,该方法用于从主输入数据集中选择不在第二个参数指定的数据集中的行。因此,两个数据集在本质上是不相交的。该方法的语法如下。
语法: anti_join(dataset, dataframe, by = col_name)
参数 :
- dataset – 输入的数据集
- dataframe – 要检查和比较数值的输入数据框架
- by – 要检查其值的列名
# installing the reqd library
library("dplyr")
# creating a data frame
data_frame = data.frame(col1 = c(1:15),
col2 = letters[1:15],
col3 = c(0,1,1,1,0,0,0,0,
0,1,1,0,1,1,0))
print("Data Frame")
print(data_frame)
print ("Training Dataset")
training_dataset <- data_frame %>% dplyr::sample_frac(0.7)
print (training_dataset)
print ("Testing Dataset")
testing_dataset <- dplyr::anti_join(data_frame,
training_dataset, by = 'col1')
print (testing_dataset)
输出
方法3:在R中使用catools包
catools包中的sample.split方法可以用来将输入数据集分别划分为训练和测试部分。它将指定的向量划分为预先定义的固定比例,该比例作为该方法的第二个参数给出。
语法: sample.split(vec , SplitRatio = x)
参数:
- vec – 包含数据标签的向量
- SplitRatio – 将要使用的分割比例的指标
该方法创建一个布尔型向量,其条目数相当于指定的向量长度。主输入数据集的子集就可以使用本软件包中的样本向量和子集方法来提取了。现在可以使用以下语法访问训练数据集。
语法: subset(data-frame, sample == TRUE/FALSE)
参数:
- data-frame – 要创建样本的数据集
- sample – 只要样本向量的值为真,就会访问数据集中的行。
训练和测试数据集可以分别使用subset()方法创建。
# installing the reqd library
library("caTools")
# creating a data frame
data_frame = data.frame(col1 = c(1:15),
col2 = letters[1:15],
col3 = c(0,1,1,1,0,0,0,
0,0,1,1,0,1,1,0))
print("Data Frame")
print(data_frame)
# creating a sample diving into the ratio of 60:40
sample <- sample.split(data_frame$col2, SplitRatio = 0.6)
print ("Training Dataset")
# check if sample is true
training_dataset <- subset(data_frame, sample == TRUE)
print (training_dataset)
print ("Testing Dataset")
# check if sample holds false
testing_dataset <- subset(data_frame, sample == FALSE)
print (testing_dataset)
输出