【问题标题】:General strategy for dealing with rare factor levels in classification?处理分类中罕见因子水平的一般策略?
【发布时间】:2020-06-06 07:40:27
【问题描述】:

假设我有一个这样的数据集:

  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 写答案,我大概能看懂。

谢谢!

【问题讨论】:

标签: python r classification missing-data


【解决方案1】:

现在我知道了术语,我发现这篇文章有一个 R 用例:stratified splitting the data

应用于我的示例,对晚餐和产生的情绪进行分层:

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]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-20
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    相关资源
    最近更新 更多