在哈希地图特征向量上运行perceptron算法: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个新闻组数据集):

>“类标签”是您要预测的,在二进制情况下,这是“无神论”与其他
>这就是您输入到分类器中的“特征向量”
>“文档”是来自数据集的一封电子邮件
>“令牌”是文档的一部分,通常是会标/二字组/三字组
>“词典”为您的载体设置的一组“允许”词

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

>浏览所有文档(跨所有类标签)并收集所有标记,这是您的字典以及特征向量的维数
>再次遍历所有文档,并分别执行以下操作:

>使用字典的维数创建一个新的特征向量(例如200,用于该字典中的200个条目)
>遍历该文档中的所有标记,并在特征向量的此维度上设置字数(在此文档内)

>现在,您有了可以输入到算法中的特征向量列表

例:

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]

这样一来,您就可以进行各种奇妙的数学运算,并将其输入到感知器中.

上一篇:python机器量化之十七:混淆矩阵(confusion_matrix)含义


下一篇:深度学习感知机(Perceptron)学习笔记