我正在做一个电子邮件分类项目,将电子邮件分类到某个类别。到目前为止,我们将有趣的数据(例如:主题和正文)与其他信息一起保存到我们的数据库中。我们已成功地将术语频率 - 逆文档频率应用于项目,以检索在我们的电子邮件主题和正文中找到的所有术语/特征的矩阵。该矩阵的一个非常小的样本输出将是:
dog cat fish
doc1 0,024 0,011 0,008
doc2 0,011 0,014 0,007
doc3 0,005 0,024 0,003
doc4 0,008 0,028 0,008
doc5 0,002 0,03 0,006
实际上,这个矩阵要大得多,因为我们有大约 23000 个术语,用于一组 165 封电子邮件。因为我们需要使用这个矩阵中的术语对电子邮件进行分类,所以 23000 个特征实在是太多了。这就是我们实施降维算法 (PCA) 的原因。这是通过使用以下代码(Accord 框架)完成的:
// Creates the Principal Component Analysis of the given source
pca = new PrincipalComponentAnalysis(matrix, AnalysisMethod.Center);
// Compute the Principal Component Analysis
pca.Compute();
// Creates a projection of the information
double[,] components = pca.Transform(matrix, 20);
// Creates form to show components
frmRPCA frmPCA = new frmRPCA(components);
frmPCA.ShowDialog();
现在我们已经硬编码了维度的#,但这暂时不应该是一个问题。
我一直在研究如何使用朴素贝叶斯进行分类的 Accord 框架示例,但我无法真正弄清楚如何将其付诸实践。主要是因为该示例在我们处理数字时使用了文本,而我不太了解分类的工作原理。请参阅有关如何实现朴素贝叶斯的示例。
基本上,我的原始矩阵包含我的特征及其 TF-IDF 值(参见上面的示例),我想使用包含我的 PCA 的矩阵(pca.Transform 方法的输出)对它们进行分类。目前,我只有 2 个类我想对我的电子邮件进行分类(注册和提交)。我将如何实现这一目标?另外,如果我想在将来添加多个类,我将如何扩展它?
示例输出应类似于:
doc1 Registration
doc2 Registration
doc3 Registration
doc4 Submission
doc5 Submission