Тренинг и тестирование по логистической регрессии - PullRequest
0 голосов
/ 30 октября 2019

Я новичок в R и у меня проблемы с чем-то, что кажется базовым, но я не уверен, как это сделать. У меня есть набор данных с 1319 строками, и я хочу настроить тренировочные данные для наблюдений от 1 до 1000 и тестовые данные для 1001 до 1319.

Сравнение с примечаниями из моего класса и профессора настроило это, выполнивБулевый вектор по переменной 'Year' в ее данных. Например:

train=(Year<2005)

И это возвращает операторы True / False.

Я понимаю это и смогу установить булевский вектор, если бы я поднастраивал свои данные переменной, но вместо этогоЯ должен строго по количеству строк, которые я не понимаю, как выполнить. Я пытался

train=(data$nrow < 1001)

Но в результате получил логическое значение (0).

Может кто-нибудь привести меня в правильном направлении?

Ответы [ 2 ]

0 голосов
/ 30 октября 2019

Проблема разделения вашего набора данных по строкам заключается в том, что он может внести смещение в ваш набор для обучения и тестирования, особенно для упорядоченных данных.

# Create a data set
data <- data.frame(year = sample(seq(2000, 2019, by = 1), 1000, replace = T),
                   data = sample(seq(0, 1, by = 0.01), 1000, replace = T))

nrow(data)
[1] 1000

Если вы действительно хотите взять первые n строк, тогдавы можете попробовать:

first.n.rows <- data[1:1000, ]

Пакет caret обеспечивает более надежный подход к использованию перекрестной проверки в ваших моделях.

Сначала создайте правило разделения:

library(caret)
inTrain <- createDataPartition(y = data$year,
                           p = 0.8, list = FALSE)

Примечание y = data$year это говорит R, что нужно использовать переменную year для выборки, гарантируя, что вы не получите упорядоченные данные и не внесете смещение в модель.

Аргумент p указывает, сколькоисходные данные должны быть разделены на обучающий набор, в этом случае 80%.

Затем примените разделение к набору данных:

# Create the training set
train <- data[inTrain,]

# Create the testing set
test <- data[-inTrain,]

nrow(train) + nrow(test)
[1] 1000
0 голосов
/ 30 октября 2019

Вы получаете logical(0), потому что nrow не является столбцом

Вы также можете поднастроить свой фрейм данных, используя номера строк

train = 1:1000 # vector with integers from 1 to 1000
test = 1001:nrow(data)
train_data = data[train,]
test_data = data[test,]

Но будьте осторожны, если только порядок строкв вашем фрейме данных абсолютно случайно, вы, вероятно, хотите получить 1000 строк случайным образом, а не 1000 первых, вы можете сделать это с помощью

train = sample(1:nrow(data),1000)

Затем вы можете получить свои train_data и test_data, используя

train_data = data[train,]
test_data = data[setdiff(1:nrow(data),train),]

Функция setdiff используется для получения всех строк, не выбранных в поезде

...