【发布时间】:2013-01-18 23:20:27
【问题描述】:
我一直在研究一个 Python 编码的优先级电子邮件收件箱,其最终目标是使用机器学习算法将选定的电子邮件标记(或分类)为重要或不重要。我将从一些背景信息开始,然后进入我的问题。
到目前为止,我已经开发了代码来从电子邮件中提取数据并对其进行处理以发现最重要的数据。这是使用以下电子邮件功能实现的:
- 发件人地址频率
- 线程活动
- 收到日期(回复之间的时间)
- 正文/主题中的常用词
我目前的代码根据其重要性对每封电子邮件应用排名(或权重)(值 0.1-1),然后应用“重要”或“不重要”标签(在本例中为只有 1 或 0)。如果等级>0.5,则授予优先级状态。此数据存储在 CSV 文件中(如下所示)。
From Subject Body Date Rank Priority
test@test.com HelloWorld Body Words 10/10/2012 0.67 1
rest@test.com ByeWorld Body Words 10/10/2012 0.21 0
best@test.com SayWorld Body Words 10/10/2012 0.91 1
just@test.com HeyWorld Body Words 10/10/2012 0.48 0
etc …………………………………………………………………………
我有两组电子邮件数据(一组培训,一组测试)。以上适用于我的培训电子邮件数据。我现在正在尝试训练一种学习算法,以便我可以预测测试数据的重要性。
为此,我一直在研究 SCIKIT 和 NLTK。但是,我无法将我在教程中学到的信息转移到我的项目中。对于使用哪种学习算法,我没有特别的要求。这就像应用以下内容一样简单吗?如果是这样怎么办?
X, y = email.data, email.target
from sklearn.svm import LinearSVC
clf = LinearSVC()
clf = clf.fit(X, y)
X_new = [Testing Email Data]
clf.predict(X_new)
【问题讨论】:
-
我以前从未使用过 scikit.learn,但在清理数据并获取特征向量后,使用分类器确实可能很“简单”。您示例中的算法似乎是 SVM 分类器。您可能想要检查 scikit.learn SVM 期望的特征向量格式。请注意:您可能不想在特征中包含“排名”,因为有关它的信息已经编码在您分配的“优先级”标签中(即,这是您的目标变量)。
-
例如,我的特征可能是:发件人地址频率线程活动接收日期(回复之间的时间)正文/主题中的常用词以及要预测的目标类:优先级
-
是的,没错。还要确保它们都是数字的,即由数字(浮点数,整数)组成。
-
如果您当前的代码可以根据电子邮件的特征对电子邮件进行排名,那么它已经是一个分类器了。为什么你需要训练另一个人?
-
是的,很好。但是,您的目标值(或标签,重要/不重要)是通过您使用的当前分类器获得的。所以每个标签都是有偏见的(不是基本事实)。那么你应该如何评估分类错误呢?我的意思是您可能想要手动标记您的电子邮件重要性。
标签: python machine-learning classification ranking scikit-learn