我有30,000个按情感分类的短语。
我打算使用朴素贝叶斯算法。
这是情感及其对应短语数量的比例(情感 -> 短语数量)。
anger 98boredom 157empty 659enthusiasm 522fun 1088happiness 2986hate 1187love 2068neutral 6340relief 1021sadness 4828surprise 1613worry 7433
所以,我需要将数据集分成训练集和测试集来执行我的模型,对吗?
在执行分层时,我应该保持类别的比例吗?
我的意思是,如果我选择30%作为测试样本,我应该保持每个情感的30%,而不是整个数据集的30%吗?
我想应该是的,但我希望能得到更有经验的意见。
你会怎么做呢?这里有人知道更好的方法来实现这个目标吗?而不是通过Python循环,测试哪个情感,计算30%,然后放入字典等?
有没有Pandas的技巧可以按类别特征进行分层,同时保持比例?
回答:
在执行分层时,是否应保持类别比例?
你似乎对术语有些困惑;分层(或分层抽样)的定义正是保持比例,否则就是简单的随机抽样。
如果我选择30%作为测试样本,我应该保持每个情感的30%,而不是整个数据集的30%吗?
这两者并不矛盾,对吗?如果你保持每个类别的30%,你最终不就是得到了初始集合的30%吗?
有没有Pandas的技巧可以按类别特征进行分层,同时保持比例?
我不了解Pandas的情况,但scikit-learn(我猜你接下来会用到)中的model_selection.train_test_split
包含了一个stratify
选项:
from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, test_size=0.3)