如何在多维矩阵上执行特征减少?

时间:2015-04-15 10:20:53

标签: c# tf-idf text-classification

我正在围绕电子邮件分类开展C#项目。首先,我们提取我们需要的数据(联系人,主题,正文等)并将其保存到数据库中。因为我们需要分类功能,所以我们使用正则表达式去除主题和正文中我们不需要的所有东西,并使用移植器词干算法来阻止所有单词(我们也将文本标记化等)。我们将数据中的特征保存为单词,双字母(单词序列)和三元组以及它们出现的次数。

然后我们使用术语频率 - 反向文档频率为我们的功能添加权重。需要查看哪些特征更适合用于分类。

我们目前的问题是我们有165个邮件的+ - 23000个功能。因此,我们需要将功能减少到+ -20功能,因此我们可以在分类器上使用这些功能。

为了实现这一目标,我们正在寻找一个黑盒解决方案,但到目前为止我们一直无法找到它。我们已经尝试了一些涉及主成分分析的解决方案,但它们的输出非常模糊。因此,我们的项目负责人建议我们尝试找到可以在项目中实施的解决方案。

最好的解决方案是接收多维矩阵,并将此矩阵缩小为包含+ -20个特征。示例输入(仅限TF-IDF值的数字):

      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

我们试图以两种方式使用协议框架PCA,但由于我们不理解输出,我们不知道如何减少矩阵(只是一个小测试,看它是如何工作的):

double[,] sourceMatrix = 
        {
            { 2.5,  2.4 },
            { 0.5,  0.7 },
            { 2.2,  2.9 },
            { 1.9,  2.2 },
            { 3.1,  3.0 },
            { 2.3,  2.7 },
            { 2.0,  1.6 },
            { 1.0,  1.1 },
            { 1.5,  1.6 },
            { 1.1,  0.9 }
        };

        // Creates the Principal Component Analysis of the given source
        var pca = new PrincipalComponentAnalysis(sourceMatrix, AnalysisMethod.Center);

        // Compute the Principal Component Analysis
        pca.Compute();

        // Creates a projection
        double[,] components = pca.Transform(sourceMatrix);

        for (int i = 0; i < components.GetLength(0); i++)
        {
            for (int j = 0; j < components.GetLength(1); j++)
            {
                Console.WriteLine(components[i, j]);
            }
        }

        Console.ReadLine();

我们也使用Components方法在数据网格中显示结果,返回比例,累积比例奇异值和特征值。但由于我们对这个概念不熟悉,我们不知道这对我们如何减少矩阵有用。

double[,] sourceMatrix = 
        {
            { 2.5,  2.4 },
            { 0.5,  0.7 },
            { 2.2,  2.9 },
            { 1.9,  2.2 },
            { 3.1,  3.0 },
            { 2.3,  2.7 },
            { 2.0,  1.6 },
            { 1.0,  1.1 },
            { 1.5,  1.6 },
            { 1.1,  0.9 }
        };

        // Creates the Principal Component Analysis of the given source
        var pca = new PrincipalComponentAnalysis(sourceMatrix, AnalysisMethod.Center);

        // Compute the Principal Component Analysis
        pca.Compute();

        // Display
        dgvPCA.DataSource = pca.Components;
        dgvPCA.Columns["Analysis"].Visible = false;

注意:我们不能使用任何需要付款的库。

0 个答案:

没有答案