数据集表示用户对一堆电影的偏好。目标是获得80%
个要进行培训的每个用户的评分。
如果设置了整个数据帧的索引并将其分割为80%,则不能保证它将为每个用户提供80%。
smple_size <- floor(0.8 * nrow(df))
train_ind <- sample(seq_len(nrow(df)), size = smple_size)
train.shared <- df[train_ind, ]
test.shared <- df[-train_ind, ]
这将提供整个数据帧的80%。但是每个用户可能对电影的评分不同。
movie_id, user_id, rated_value, feature_1, feature_2, genre, user_gender, user_ethnicity
101, 345, 3.5, 1, 1, comedy, male, white
101, 345, 3.5, 1, 2, comedy, male, white
101, 345, 3.5, 2, 1, comedy, male, white
125, 345, 4.5, 1, 4, drama, male, white
101, 233, 4.0, 1, 3, comedy, female, black
101, 233, 4.0, 2, 2, comedy, female, black
125, 233, 3.0, 1, 1, drama, female, black
125, 233, 3.0, 2, 2, drama, female, black
125, 333, 3.0, 1, 1, comedy, male, asian
125, 333, 3.0, 2, 2, comedy, male, asian
答案 0 :(得分:3)
使用dplyr
相当容易做到:
library(dplyr)
data(iris)
iris %>%
group_by(Species) %>%
sample_frac(0.8)
要检查:
set.seed(1)
iris %>%
group_by(Species) %>%
sample_frac(0.8) %>%
pull(Species) %>%
table
#output
setosa versicolor virginica
40 40 40
原始数据:
iris %>%
pull(Species) %>%
table
#output
setosa versicolor virginica
50 50 50
一件好事是,人可以group_by
拥有多个因素。
使用by
的基本R方法:
set.seed(1)
index <- as.numeric(unlist(by(seq_along(iris[,"Species"]),
iris[,"Species"],
function(x) sample(x,
size = length(x)*0.8))))
有效吗?
table(iris[index,5])
#output
setosa versicolor virginica
40 40 40
答案 1 :(得分:1)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body>
<div class="dropdown">
<button class="dropbtn">Strategy</button>
<div class="dropdown-content">
<ul id="regionList"></ul>
</div>
</div>
包中的 createDataPartition()
可用于进行分层采样。这种方法的好处是,它可以让您轻松地获得训练和测试集以进行模型构建和验证:
caret
如果library(caret)
sample <- caret::createDataPartition(y = df$user_id, p = 0.8, list = FALSE)
,则返回样本中观测值的索引:
list = FALSE
答案 2 :(得分:0)
在大多数情况下,可能没有理由不仅仅使用public class A {
@Value("${url.name}")
private String url;
...
B b = new B();
,@Component
public class B implements BInterface {
@Autowired
private String url
等,但这是Base R方法。
dplyr