Общая стратегия борьбы с уровнями редких факторов в классификации? - PullRequest
1 голос
/ 21 февраля 2020

Скажем, у меня есть такой набор данных:

  breakfast    lunch     dinner    mood  
 ----------- ---------- --------- ------ 
  waffles     sandwich   chili     good  
  sausages    sandwich   pasta     good  
  yogurt      salad      stew      bad   
  gruel       salad      pizza     bad   
  gruel       pizza      pizza     good  
  sausages    pizza      pasta     good  
  waffles     salad      chili     good  
  gruel       soup       pizza     bad   
  waffles     soup       chili     good  
  sausages    salad      pasta     good  
  waffles     pizza      chili     good  
  yogurt      sandwich   stew      good  
  yogurt      pizza      stew      good  
  sausages    soup       pasta     good  
  gruel       sandwich   pizza     good  
  yogurt      soup       waffles   good  

Я хочу предсказать настроение человека на основе того, что он съел в тот день. Так что я сделаю разделение поезда / теста 70/30 и использую случайный лес, SVM или что-то подобное для построения классификатора.

По крайней мере, как я использовал их в прошлом, классификаторы, которые я Использовали жалобу, если у предиктора есть уровень в наборе тестов, который не появился в обучающем наборе. Это может произойти для последней строки, где dinner == "waffles".

Чтобы избежать этого, я обычно удаляю строки с уровнем, частота которого меньше 10%, в любом столбце до Я делаю раскол.

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

спасибо!

1 Ответ

0 голосов
/ 22 февраля 2020

Теперь, когда я знаю lin go, я нашел этот пост со случаем использования R: стратифицированное разбиение данных

Применительно к моему примеру, стратификация как на ужин, так и в результате настроение:

library(splitstackshape)
library(readr)

meals_mood_text <- "breakfast   lunch   dinner  mood
waffles sandwich    chili   good
sausages    sandwich    pasta   good
yogurt  soup    waffles good
yogurt  salad   stew    bad
gruel   salad   pizza   bad
gruel   pizza   pizza   good
sausages    pizza   pasta   good
waffles salad   chili   good
gruel   soup    pizza   bad
waffles soup    chili   good
sausages    salad   pasta   good
waffles pizza   chili   good
yogurt  sandwich    stew    good
yogurt  pizza   stew    good
sausages    soup    pasta   good
gruel   sandwich    pizza   good"

meals_mood_frame <-
  read.table(textConnection(meals_mood_text), header = TRUE)
closeAllConnections()

strat.res <- stratified(meals_mood_frame, c('dinner','mood'), 0.7, bothSets = TRUE)

print(strat.res[[1]])

print(strat.res[[2]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...