Наблюдения с низкой частотой идут все в наборе поездов и дают ошибку в предикате () - PullRequest
0 голосов
/ 05 октября 2018

У меня есть набор данных (~ 14410 строк) с наблюдениями, включая страну.Я делю этот набор на наборы train и test и обучаю мои данные, используя дерево решений с функцией rpart () .Когда дело доходит до прогнозирования, иногда я получаю сообщение об ошибке, что в наборе тестов есть страны, которые не находятся в наборе поездов.

Сначала я исключил / удалил страны, которые появились только один раз:

# Get orderland with frequency one
var.names <- names(table(mydata1$country))[table(mydata1$country) == 1]
loss <- match(var.names, mydata1$country)
names(which(table(mydata1$country) == 1))
mydata1 <- mydata1[-loss, ]

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

  count <- as.data.frame(count(mydata1, vars=mydata1$country))
  count[rev(order(count$n)),]

                     vars    n
3  Bundesrep. Deutschland 7616
9         Grossbritannien 1436
12                Italien  930
2                 Belgien  731
22               Schweden  611
23                Schweiz  590
13                  Japan  587
19            Oesterreich  449
17            Niederlande  354
8              Frankreich  276
18               Norwegen  238
7                Finnland  130
21               Portugal  105
5               Daenemark   65
26                Spanien   57
4                   China   55
20                  Polen   51
27                 Taiwan   31
14              Korea Süd   30
11                 Irland   26
29             Tschechien   13
16                Litauen    9
10              Hong Kong    7
30                   <NA>    3
6                 Estland    3
24                Serbien    2
1              Australien    2
28               Thailand    1
25               Singapur    1
15               Kroatien    1

Из этого я вижу, что в моих данных также есть NA.

Мой вопрос сейчас , как я могу решить эту проблему?Должен ли я исключить / удалить все страны с, например, наблюдениями <7, или я должен взять данные с наблюдениями <7 и воспроизвести / повторить эти данные два раза, чтобы моя функция прогнозирования () всегда работала, в том числе и для других наборов данных?Как-то не "шикарно" просто удалять строки ... есть ли другая возможность? </p>

1 Ответ

0 голосов
/ 05 октября 2018

Вам необходимо преобразовать каждую chr переменную в factor:

mydata1$country <- as.factor(mydata1$country)

Затем вы можете просто продолжить разделение по поездам / тестам.Вам не нужно ничего удалять (кроме NA)

Используя тип factor, ваша модель будет знать, что наблюдение country будет иметь несколько возможных levels:

Пример:

country <- factor("Italy", levels = c("Italy", "USA", "UK")) # just 3 levels for example
country

[1] Italy
Levels: Italy USA UK
# note that as.factor() takes care of defining the levels for you

См. Разницу с:

country <- "Italy"
country

[1] "Italy"

Используя factor, модель узнает все возможные levels.Из-за этого, даже если в данных train у вас не будет наблюдения «Италия», модель будет знать, что возможно иметь его в данных test.

factor isвсегда правильный тип символов в моделях.

...