【发布时间】:2015-06-24 03:34:49
【问题描述】:
我正在开展一个电子邮件分类项目,该项目会将电子邮件分类到某个类别。到目前为止,我们将有趣的数据(例如:主题和正文)与其他信息一起保存到我们的数据库中。我们已成功地将术语频率 - 逆文档频率应用于项目,以检索在我们的电子邮件主题和正文中找到的所有术语/特征的矩阵。该矩阵的一个非常小的样本输出将是:
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 框架示例,但我无法真正弄清楚如何将其付诸实践。主要是因为该示例在我们处理数字时使用了文本,而我不太了解分类的工作原理。 See the example on how to implement Naive Bayes.
基本上,我的原始矩阵包含我的特征及其 TF-IDF 值(参见上面的示例),我想使用包含我的 PCA 的矩阵(pca.Transform 方法的输出)对它们进行分类。目前,我只有 2 个类我想对我的电子邮件进行分类(注册和提交)。我将如何实现这一目标?另外,如果我以后想添加多个类,我将如何扩展它?
示例输出应该是这样的:
doc1 Registration
doc2 Registration
doc3 Registration
doc4 Submission
doc5 Submission
【问题讨论】:
-
因为你实际上有一个分类问题,我认为如果你使用 LDA(线性判别分析)来减少你的维度数量而不是 PCA 会更有用。事实是,PCA 以更好地解释方差的方式减少了维度,而 LDA 以更容易对实例进行分类的方式减少了维度。我会尽快将其扩展为实际答案!
-
感谢您的快速响应塞萨尔!我还没有研究 LDA,但我会马上做一些研究。
-
顺便说一句,对不起。我刚刚意识到我解释了 LDA,但我并没有真正回答你关于朴素贝叶斯的问题。我会尽快更新的
标签: c# matrix classification pca naivebayes