假设我有一个这样的数据集:
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
=="华夫饼"。
为了避免这种情况,在进行拆分之前,我通常会在任何列中删除频率低于10%的任何行。
我怀疑可能有更好的方法。我主要用R编写代码,但如果你想用Python发布答案,我可能会理解
谢谢!
现在我知道了行话,我发现这篇文章有一个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]])