在执行分层时,我应该保留类别的比例吗?

时间:2017-12-09 14:44:57

标签: pandas machine-learning scikit-learn nltk naivebayes

我有30,000个按情绪分类的短语。

我要使用Naive Bayes。

这里的比例(情绪 - >短语数量)。

anger           98
boredom        157
empty          659
enthusiasm     522
fun           1088
happiness     2986
hate          1187
love          2068
neutral       6340
relief        1021
sadness       4828
surprise      1613
worry         7433

所以,我必须将我的数据集拆分为train / test来执行我的模型等,对吗?

在执行分层时,我应该保留类别的比例吗?

我的意思是,如果我选择30%的测试样本,我应该保持每种情绪的30%而不是整个数据集的30%吗?

我想是的,但我希望有更有经验的意见。

你会怎么做?这里的任何人都知道更好的方法,而不是执行python循环,测试哪种情绪,计算30%,放入字典等?

是否有任何Pandas技巧按类别特征进行分层,保持比例?

1 个答案:

答案 0 :(得分:1)

  

在执行分层时,我应该保留类别的比例吗?

你对术语似乎有些困惑; 分层(或stratified sampling)的定义正是为了维持比例,否则就是简单的随机抽样。

  

如果我选择30%的测试样本,我应该保持每种情绪的30%而不是整个数据集的30%吗?

他们并不矛盾,是吗?如果您保留每个类别的30%,您最终会得到30%的初始设置吗?

  

是否有任何Pandas技巧按类别特征进行分层,保持比例?

不知道大熊猫,但是scikit-learn(我想你接下来会使用它)model_selection.train_test_split包含这样一个stratify选项:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y,
                                                    stratify=y, 
                                                    test_size=0.3)