在 R 中分类电子邮件

数据挖掘 机器学习 r 文本挖掘
2021-09-25 12:52:52

我正在研究 R 中的一个项目,我有大约 1200 封来自一家公司的电子邮件,其中大部分都被标记为类1 或班级2,这是请求的类型。大约 1000 封电子邮件被标记为类别1, 和 200 被标记为类2.我的目标是使用监督学习来建立一个模型来对新电子邮件进行分类。

但是,经过大量预处理(解析、删除停用词等)并在文档术语矩阵上尝试典型算法(SVM、决策树等)后,我的混淆矩阵包含许多误报和误报,但是支持向量机只有少数误报。

我想知道如何提高我的成绩?我需要使用过采样还是二元特征表示?我想问题是这两个类别的主题非常接近。

4个回答

(所有电子邮件都是法文或英文)

预处理方法:

  • 合并作为邮件头和内容的“摘要”和“内容”
  • 删除所有电子邮件地址
  • 删除所有“来自:某人至:某人...主题:某物”
  • 删除电子邮件中包含的所有图像
  • 根据他们的班级订购电子邮件
  • 用 é -> e 之类的无重音替换所有法语重音;ê -> e ...
  • 把文字放低
  • 删除标点符号
  • 删除号码
  • 去除空白
  • 从列表中删除一些名字和一些特定的单词
  • 删除法语和英语中的停用词
  • 法文和英文的stem文件
  • 删除术语

--> 然后用 TF-IDF 记录术语矩阵

这两个课程来自技术支持,“复杂”和“简单”两个类别,“复杂”是围绕金融(理论上)的主题,“简单”的软件问题(理论上)但在实践中它们有很多词共同点。我不考虑其他课程我现在只关注这两个

实际上我使用的分类算法并不是那么相关,因为我尝试了 5 种算法,但没有一个给出好的结果

示例(混淆矩阵)决策树:

  Decision tree:           

预测:

335 | 10
59 | 12

SVM:

331 | 1
83 | 1

Knn (n=10):

330 | 2

83 | 1

Naive Bayes:

1 | 83

12 | 320

由于您只处理 2 个类,因此您可以commonality.cloud()从两个类中创建一个(我在 R 上使用此函数,我不了解其他语言)。

它将显示 和 中的共同class1class2这些词可能无法帮助算法区分类别,因此您可以删除这些词并进行一些测试。

您可能想尝试使用贝叶斯分类器而不是 SVM 或决策树。您的问题是垃圾邮件过滤器问题的概括,即将电子邮件分类为“垃圾邮件”(第 1 类)或“非垃圾邮件”(第 2 类)。大多数垃圾邮件过滤器使用贝叶斯分类而不是更常见的监督学习方法。

您可以研究这些功能:我注意到您删除了数字。可能是您这样做是因为它们不太可能发生冲突,但您也可以通过引入词类(@number@ 或 @big_number@ 等)来解决这个问题。

您也可以尝试在其他词组上使用词类。如果这可行,则可能表明您的集合存在稀疏性(这不会​​让我感到惊讶)。您可以为此目的使用特征选择器,例如根据信息增益对维度进行排名。

对抗稀疏性的更高级方法包括:Rocchio 算法或 word2vec。