对邮件优先级进行排序
我正在尝试用Python制作一个简单的邮件排序程序(类似于优先收件箱)。这个程序会根据发件人发送邮件的频率来进行排序。比如,我会用50%的邮件作为训练集,统计发件人的发送频率,然后用另外50%的邮件作为测试集,根据训练集的结果来排序(也就是说,发很多邮件的发件人会排在前面)。
我已经写了一些Python代码来提取每封邮件的发件人地址,并把这些信息放在一个列表里,这个列表显示了最常见的发件人(下面是这个列表的一个示例片段)。
//(Email address, frequency of emails received from this sender)//Not Code
('tester1@csmining.org', 244)
('tester2@csmining.org', 162)
('tester3@csmining.org', 154)
('tester4@csmining.org', 75)
('tester5@csmining.org', 50)
我知道有很多机器学习算法可以有效地用来训练和测试我的数据,以达到我想要的效果。不过,我不太确定应该用哪种算法才能得到最好的结果?
2 个回答
我的理解是,你想把电子邮件分成重要和不重要两类。首先,你需要手动给每封邮件标记一下,是重要的还是不重要的。接下来,你需要定义每封邮件的特征并提取出来。在你的情况下,一个你想考虑的特征就是发件人。所以你最后会得到像这样的数据:
('tester1@csmining.org', important)
('tester1@csmining.org', normal)
('tester1@csmining.org', important)
('tester1@csmining.org', normal)
('tester1@csmining.org', normal)
('tester2@csmining.org', normal)
('tester3@csmining.org', important)
('tester4@csmining.org', important)
('tester5@csmining.org', normal)
...
然后你可以使用一些学习算法,比如线性回归、逻辑回归等,来测试你的结果。问题是,任何算法最终都会把来自发件人X的邮件分类为重要或普通(这通常是根据训练集中该发件人重要和普通邮件的比例来决定的)。为了得到更有意义的结果,你需要从数据中提取更多特征,比如邮件中的特定词汇、发送时间等等。
仅仅根据发件人来排序邮件从来不是个好主意。就我个人来说,我订阅了GitHub的代码提交邮件通知。每天,我都会因为同事的代码提交而收到数百封邮件。
这并不是个简单的问题,甚至根据我的经验,Gmail的优先收件箱也做得不好。一个好的邮件优先级排序或评分系统需要一些好的特性。我建议可以从以下几个特性入手。可以参考一下Gmail优先收件箱背后的学习:
- 社交特性。发件人或发件人域名;
- 线程特性。这个邮件是否在一个活跃的讨论中?这个邮件在讨论中的顺序号是多少?如果有抄送的用户,他们是谁?
- 时间特性。这个邮件是什么时候收到的?如果你能看到发件人的回复,你可能想记录一下发件人回复的时间。
- 内容特性。这是用于垃圾邮件过滤的词袋模型。
- 行为特性。这是邮件账户拥有者对邮件的反应。是回复了?还是从未阅读?还是立即删除?或者归档到不同的文件夹?打了标签?如果回复了,你可能还想进行一些内容分析。回复的长度也可能是个不错的特性。
对于回归模型,Gmail使用线性逻辑回归来保持学习和预测的可扩展性。
最后,就像Gmail所做的那样,你可以让用户帮助你改进系统,给他们一个标记重要邮件的选项。
进一步阅读: