python - 在 Python 中进行分层采样,无需使用任何机器学习

标签 python

我有一个数据集,其中包含:(“wordsList”和“classList”文件)。

wordsList 文件包含 72 封预处理过的电子邮件。每一行都是从每封电子邮件中提取的单词列表。

classList 文件包含指示电子邮件是普通电子邮件还是广告电子邮件的类标签(0 表示普通电子邮件,1 表示广告电子邮件)。

我的任务是用 Python 开发一个朴素贝叶斯分类器作为电子邮件过滤器。即,分类器预测电子邮件是普通电子邮件还是广告。

为了开发此功能,我需要使用分层抽样从 72 行中选择 66 行进行训练,其余 6 行进行测试。然后返回这6条记录的分类概率。 但对我来说坏消息是我不能使用任何机器学习库,只能使用 NumPy 和 SciPy。

有什么办法可以实现吗?如果是的话,是否有任何示例代码可以从头开始实现此方法?预先感谢您!

classList file

wordsList file

最佳答案

最简单的解决方案是使用 pandas 的 groupby 方法,然后使用 frac=0.91 应用采样,以在您的情况下从 72 行中获取 66 行:

cL2=cL.groupby(['classList']).apply(lambda x: x.sample(frac=0.91)) 

这会创建一个 MultiIndex 数据帧,通过重置索引、删除与 groupby 方法关联的列“classList”,并可选择删除一个额外的数据帧(根据分组变量的数量,level_1 此处):

cL3=cL2.drop(columns=['classList']).reset_index().drop(columns=['level_1'])

关于python - 在 Python 中进行分层采样,无需使用任何机器学习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60261183/

相关文章:

python - 是否有可与 Python 3.5 一起安装的 SimpleCV 版本?

python - Gunicorn 导入错误 : url_for not found in flask, 但 native Flask 运行正常

python - 在 subprocess.check_call 中捕获 stderr 而不使用 subprocess.PIPE

python - 如何调整时区的 `strftime`?

python - 十进制到二进制 : two's complement, 更好的负数表达

Python修改字典列表中的值

python - 从 Haxe 内部调用外部 Python 类函数

python - 从 subprocess.communicate() 读取流输入

python - 删除python中分隔符之间的子字符串

python - Django 1.8 : How do I use my first 3rd Party Fork with my current project?