Расщепление поезда / испытательных комплектов R - PullRequest
0 голосов
/ 12 апреля 2020

В моем наборе данных есть столбец с данными NPS, где числа меняются от 0 до 10. 10 и 9 известны как «Промоутеры», 8 и 7 известны как «Пассивы», а 6-0 известны как «Хулители». , Я планирую приспособить модель, рассматривая переменную NPS как двоичную (Промоутеры и Не промоутеры). Таким образом, я хочу разделить свои данные на обучающие и тестовые наборы перед выполнением glm. Чтобы обучающий набор был репрезентативным, я стараюсь, чтобы в наборе данных было 50% промоутеров и 50% не промоутеров.

Мой первый вопрос: это правильный подход?

Второй вопрос: я попытался из приведенного ниже кода разделить набор данных и смог создать обучающий набор.

table(mydata$NPS)
#    0     1     2     3     4     5     6     7     8     9    10 
#   18    31    49    62    90   217   514  2332 10600  6557  2003

nrow(mydata) # = 22473

#total number of promoters = 8560
#total number of non-promoters = 13913

8560*0.8 #=6848 80% of promoters count

#all the promoters 
data_promoters<-mydata[(mydata$NPS==10 | mydata$NPS==9),]
#all the non promoters
data_nonPromoters<-mydata[(mydata$NPS!=10 & mydata$NPS!=9),]

dim(data_promoters) #8560    32
dim(data_nonPromoters) #13913    32

set.seed(100)

sample_promoters <- data_promoters[sample(1:nrow(data_promoters),6848),]
sample_nonPromoters <- data_nonPromoters[sample(1:nrow(data_nonPromoters),6848),]

#train dataset
train_mydata <- rbind(sample_promoters, sample_nonPromoters)
head(train_mydata)
tail(train_mydata)
dim(train_mydata) #13696 32

#test dataset
test_mydata<-mydata[-train_mydata, ]

При формировании тестового набора, как указано выше, я получаю следующую ошибку. Не могли бы вы помочь мне исправить это? Большое спасибо!

Error in `[.default`(xj, i) : invalid subscript type 'list'
In addition: Warning messages:
1: In Ops.factor(left) : ‘-’ not meaningful for factors
2: In Ops.factor(left) : ‘-’ not meaningful for factors
3: In Ops.factor(left) : ‘-’ not meaningful for factors
4: In Ops.factor(left) : ‘-’ not meaningful for factors
5: In Ops.factor(left) : ‘-’ not meaningful for factors

Ответы [ 2 ]

1 голос
/ 12 апреля 2020

Вы можете использовать anti_join из dplyr, чтобы получить строки из mydata, которых нет в train_mydata

test_mydata <- dplyr::anti_join(mydata, train_mydata)
0 голосов
/ 12 апреля 2020

train_mydata - это data.frame и, следовательно, это list. При настройке mydata вы можете использовать только вектор в качестве индекса, но здесь вы используете список, отсюда и ошибка invalid subscript type 'list'.

Что бы я обычно делал в этом контексте, чтобы дать каждой строке идентификатор, а затем просто сделать

test_mydata <- mydata[!(mydata$ID %in% train_mydata$ID), ]
...