- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在从事一个电子邮件分类项目,该项目将电子邮件分类为特定类别。到目前为止,我们将有趣的数据(例如:主题和正文)连同其他信息一起保存到我们的数据库中。我们已成功将词频 - 逆向文档频率应用于该项目,以检索在我们电子邮件的主题和正文中找到的所有词条/特征的矩阵。该矩阵的一个非常小的样本输出将是:
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
实际上这个矩阵要大得多,因为对于一组 165 封电子邮件,我们有大约 23000 个术语。因为我们需要使用这个矩阵中的术语对电子邮件进行分类,所以 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 试图通过仅查看您的数据来最小化方差。但是,如果您有关于数据的额外信息,例如类标签,则有更好的方法来实现您的需要。
如果您有类标签形式的额外信息(即,数据集中的每个样本都有一个关联的整数值,表示它属于哪个类),那么您可以使用 LDA(线性判别分析)来减少维度以对分类有用的方式。
如果您有实际输出形式的额外信息(即,每个数据集中的样本实际上有一个与关联的 double 值它),那么你可以使用PLS(偏最小二乘)以一种对以下有用的方式降低维度回归。
假设你有一个分类问题,下面是一个关于如何使用 LDA 减少特征数据数量的例子:
// Create some sample input data instances. This is the same
// data used in the Gutierrez-Osuna's example available at:
// http://research.cs.tamu.edu/prism/lectures/pr/pr_l10.pdf
double[][] inputs =
{
// Class 0
new double[] { 4, 1 },
new double[] { 2, 4 },
new double[] { 2, 3 },
new double[] { 3, 6 },
new double[] { 4, 4 },
// Class 1
new double[] { 9, 10 },
new double[] { 6, 8 },
new double[] { 9, 5 },
new double[] { 8, 7 },
new double[] { 10, 8 }
};
int[] output =
{
0, 0, 0, 0, 0, // The first five are from class 0
1, 1, 1, 1, 1 // The last five are from class 1
};
// Then, we will create a LDA for the given instances.
var lda = new LinearDiscriminantAnalysis(inputs, output);
lda.Compute(); // Compute the analysis
// Now we can project the data into LDA space:
double[][] projection = lda.Transform(inputs);
如果您想将问题从 2 维减少到 1 维,您可以使用:
double[][] reduced_data = lda.Transform(inputs, 1);
结果将是一个 10x1 矩阵。它将包含对执行分类仍然有用的数据的低维表示。因此,您可以使用 reduced_data
而不是使用原始数据来学习分类器。
此外,LDA 对象带有一个简单的最小距离分类器,您可以使用它对您的实例进行分类。例如,您可以使用
对数据集进行分类int[] results = lda.Classify(inputs);
但是,没有什么能阻止您使用您可能喜欢的任何其他分类器(例如朴素贝叶斯)。例如,为了使用朴素贝叶斯,您可以使用
// Create a new normal distribution Naive Bayes classifier for
// a classification problem with 1 feature and the two classes
var nb = new NaiveBayes.Normal(classes: 2, inputs: 1);
// Compute the Naive Bayes model
nb.Estimate(reduced_data, output);
// Now, if we would like to classify the first instance
// in our dataset, we would use
int result = nb.Compute(lda.Transform(input[0]));
还有框架附带的示例应用程序应该 demonstrate how LDA works以及如何naive bayes works .
关于c# - 如何使用朴素贝叶斯和主成分分析(C#、Accord.NET)对文档进行分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29696565/
我有一些带有反应组件抽象的外部 UI,我想从试剂中重用它们,有没有什么方法可以通过从 clojurescript 传递数据来直接渲染预定义的 react 组件。我是 clojurescript 初学者
我刚刚构建了一个库(Material Components库)from source并将本地Maven存储库添加到了我的项目中。现在,我可以通过将Log调用添加到库的本地源中来成功地进行一些外行调试。
我正在尝试测试呈现 grommet 的组件菜单 组件。索环 Menu 组件将绝对定位的菜单呈现到文档的顶层,作为子级插入到 body 中。因此它呈现在包装器的范围之外。我可以使用 document.b
如何创建一个凹形的 SKPhysicsBody? 我的猜测是创建一个由多个凸体组成的复合节点。我可以用任何其他方式“粘贴”它们,从而在它们之间创建 SKPhysicsJointFixed 吗? 最佳答
我正在开发一个食谱应用程序来帮助我妻子培养她的蛋糕爱好。这个想法是创建一个食谱数据库来保存她所有的蛋糕食谱。 每个食谱都有多种成分。每种成分都会有测量值(克、毫升、茶匙等),然后是数量。 我了解如何创
我正在使用 sklearn's PCA用于对大量图像进行降维。安装 PCA 后,我想看看组件的外观。 可以通过查看 components_ 属性来做到这一点。没有意识到这是可用的,我做了其他事情: e
我是一名优秀的程序员,十分优秀!