机器学习电子邮件优先级排序 – Python

我一直在开发一个使用Python编写的优先级电子邮件收件箱,目标是使用机器学习算法对一系列电子邮件进行标记(或分类),将其分为重要或不重要的邮件。我将先介绍一些背景信息,然后再提出我的问题。

到目前为止,我已经开发了从电子邮件中提取数据并处理这些数据以找出最重要邮件的代码。这通过以下电子邮件特征实现:

  • 发件人地址频率
  • 线程活动
  • 接收日期(回复之间的时间)
  • 邮件正文/主题中的常用词

我目前的代码会根据邮件的重要性为每封邮件分配一个排名(或权重)(值在0.1到1之间),然后标记为‘重要’或‘不重要’(在这种情况下,标记为1或0)。如果排名大于0.5,则授予优先级状态。这些数据存储在CSV文件中(如下所示)。

     From           Subject       Body        Date          Rank    Priority      [email protected]  HelloWorld    Body Words  10/10/2012    0.67    1     [email protected]  ByeWorld      Body Words  10/10/2012    0.21    0     [email protected]  SayWorld      Body Words  10/10/2012    0.91    1     [email protected]  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的DictVectorizer。首先,使用Python的csv模块读取每个样本,并构建一个包含(feature, value)对的dict,同时将优先级单独保存:

# 未经测试的代码,可能包含一两个错误;此外,您需要决定如何实现split_wordsdatareader = csv.reader(csvfile)dicts = []y = []for row in datareader:    y.append(row[-1])    d = {"From": row[0]}    for word in split_words(row[1]):        d["Subject_" + word] = 1    for word in split_words(row[2]):        d["Body_" + word] = 1    # 等等    dicts.append(d)# 向量化!vectorizer = DictVectorizer()X_train = vectorizer.fit_transform(dicts)

现在,您有一个稀疏矩阵X_train,您可以将其与y一起输入到scikit-learn分类器中。

请注意以下几点:

  1. 当您想对未见数据进行预测时,必须应用相同的方法和完全相同的vectorizer对象。即,您必须使用上面的循环构建一个test_dicts对象,然后执行X_test = vectorizer.transform(test_dicts)

  2. 我假设您想直接预测优先级。预测“排名”则是一个回归问题,而不是分类问题。一些scikit-learn分类器有一个predict_proba方法,可以生成邮件重要的概率,但您不能用排名来训练这些方法。

(*) 我是scikit-learn的DictVectorizer的作者,所以这不是无偏见的建议。不过,这是来自权威人士的建议 🙂

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注