R从每个用户中选择80%进行培训

时间:2018-07-02 15:36:27

标签: r

数据集表示用户对一堆电影的偏好。目标是获得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 

3 个答案:

答案 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