R 分层拆分为训练和测试,并处理每个地层的少量观测值
假设我有一个足球运动员工资、国籍和身高的数据集。我很想知道这两个变量与足球运动员的工资之间是否存在关联。我提出了一些不同的模型,并想比较这些模型的预测效果。但要做到这一点,我需要列车和测试数据,这些数据包含列车和测试数据中相同级别的国籍 假设我有这样的数据:R 分层拆分为训练和测试,并处理每个地层的少量观测值,r,cross-validation,R,Cross Validation,假设我有一个足球运动员工资、国籍和身高的数据集。我很想知道这两个变量与足球运动员的工资之间是否存在关联。我提出了一些不同的模型,并想比较这些模型的预测效果。但要做到这一点,我需要列车和测试数据,这些数据包含列车和测试数据中相同级别的国籍 假设我有这样的数据: > soccer_player_df salary nationality height 1 504731.1 USA 6.466627 2 485333.2 USA 5.468320
> soccer_player_df
salary nationality height
1 504731.1 USA 6.466627
2 485333.2 USA 5.468320
3 483259.4 USA 4.694929
4 493594.2 USA 5.685126
5 530805.8 England 5.856093
6 520851.5 England 6.031963
7 484309.9 Spain 6.127087
8 462986.6 Portugal 6.023823
9 492580.1 Brazil 5.949609
10 470410.0 Brazil 5.978207
我将如何分割数据,以保证列车和测试数据中每个国家至少有一次观察
如果一名足球运动员是其国籍的唯一代表(因此,对于那个国家,我无法拥有一对训练和测试),我将如何删除他呢?正如我在评论中提到的,我建议签出——但有一点需要注意:您至少需要使用“data.table”的版本V1.9.3,可从以下网址获得 我还使用了“dplyr”来方便过滤 加载函数后,加载相关软件包并执行以下操作:
library(dplyr)
library(data.table)
set.seed(1)
soccer_player_df %>%
group_by(nationality) %>%
filter(length(nationality) > 1) %>%
stratifiedDT("nationality", .5, bothSets = TRUE)
# $SAMP1
# Source: local data frame [4 x 3]
# Groups:
#
# salary nationality height
# 1 492580.1 Brazil 5.949609
# 2 530805.8 England 5.856093
# 3 483259.4 USA 4.694929
# 4 493594.2 USA 5.685126
#
# $SAMP2
# Source: local data frame [4 x 3]
# Groups:
#
# salary nationality height
# 1 470410.0 Brazil 5.978207
# 2 520851.5 England 6.031963
# 3 504731.1 USA 6.466627
# 4 485333.2 USA 5.468320
bothSets
是一个新参数,可用于返回包含两个子集的列表
如果你不喜欢生活在最前沿,你可以使用,这是非常快的(但没有“data.table”版本快)
用法基本相同:
soccer_player_df %>%
group_by(nationality) %>%
filter(length(nationality) > 1) %>%
stratified("nationality", .5, bothSets = TRUE)
更新:
如果您只想使用该函数,而不想将“dplyr”仅用于过滤和管道,也可以直接在分层
或分层DDT
函数中进行子集设置。我添加了参数的名称,以便您可以更清楚地看到发生了什么:
set.seed(1)
stratified(
soccer_player_df,
group = "nationality",
size = .5,
select = list(
nationality = names(which(table(soccer_player_df$nationality) > 1))),
bothSets = TRUE)
请注意,有一个select
参数可用于指定您感兴趣的子集。请参阅my分层
函数(其中有and)。使用行名
(或“data.table”中的rn
),并将样本大小设置为.5
。