在哈希映射特征向量上运行感知器算法:java

我有以下代码,它从一个目录中读取多个文件到一个哈希映射中,这就是我的特征向量。这种方法有些简单,因为它没有进行词干提取,但这不是我目前的主要关注点。我想知道如何使用这种数据结构作为感知器算法的输入。我猜我们称之为词袋,对吗?

public class BagOfWords {        static Map<String, Integer> bag_of_words = new HashMap<>();        public static void main(String[] args) throws IOException         {            String path = "/home/flavius/atheism;            File file = new File( path );            new BagOfWords().iterateDirectory(file);            for (Map.Entry<String, Integer> entry : bag_of_words.entrySet())             {                System.out.println(entry.getKey()+" : "+entry.getValue());            }        }        private void iterateDirectory(File file) throws IOException         {            for (File f : file.listFiles())             {                if (f.isDirectory())                 {                        iterateDirectory(file);                }                 else                 {                    String line;                     BufferedReader br = new BufferedReader(new FileReader( f ));                    while ((line = br.readLine()) != null)                     {                        String[] words = line.split(" ");//those are your words                        String word;                        for (int i = 0; i < words.length; i++)                         {                            word = words[i];                            if (!bag_of_words.containsKey(word))                            {                                bag_of_words.put(word, 0);                            }                            bag_of_words.put(word, bag_of_words.get(word) + 1);                        }                    }                }            }        }    }

你可以看到路径指向一个名为’atheism’的目录,还有一个名为sports的目录,我想尝试线性分离这两个类别的文档,然后尝试将未见的测试文档分类到任一类别中。

如何做到这一点?如何概念化这个过程。我希望得到一个可靠的参考、详尽的解释或某种伪代码。

我在网上没有找到许多信息丰富且清晰的参考资料。


回答:

让我们先建立一些术语(我猜你使用的是20-newsgroup数据集):

  • “类别标签”是你试图预测的,在你的二元情况下这是”atheism”与其他
  • “特征向量”是你输入到分类器中的内容
  • “文档”是数据集中的一封电子邮件
  • “标记”是文档的一部分,通常是单字/双字/三字
  • “词典”是你向量中”允许”的词集

因此,词袋的向量化算法通常遵循以下步骤:

  1. 遍历所有文档(跨所有类别标签)并收集所有标记,这就是你的词典和特征向量的维度
  2. 再次遍历所有文档,对于每个文档执行以下操作:
    1. 创建一个与你的词典维度相同的新的特征向量(例如,200个词典条目)
    2. 遍历该文档中的所有标记,并在特征向量的这个维度上设置词频(在该文档内)
  3. 现在你有一系列特征向量,可以输入到你的算法中

示例:

Document 1 = ["I", "am", "awesome"]Document 2 = ["I", "am", "great", "great"]

词典是:

["I", "am", "awesome", "great"]

因此,文档作为向量看起来像:

Document 1 = [1, 1, 1, 0]Document 2 = [1, 1, 0, 2]

有了这些,你就可以进行各种复杂的数学运算,并将这些输入到你的感知器中。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注