问题标签 [document-classification]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mysql - SQL分类
我有一个系统可以跟踪用户查看的文档。每个文档都有它的 ID 和它所属的集群。我的系统会跟踪会话 ID 和查看次数。我现在想构建一个 SQL 查询,它会给我两列——会话 ID 和分类集群。分类算法很简单:
表结构如下,我使用的是 MySQL 5.5.16:
会议
会话文档
簇
集群文档
所以基本上,我想为每个会话选择集群,计算查看文档的每个集群的出现次数并找到最大出现次数。然后出现最多的集群的 ID 是会话的结果,因此最终结果集包含会话 ID 和出现次数最多的集群:
结果
我设法使用以下查询获取每个会话的已查看文档集群(步骤 2/II。):
我很难弄清楚其余的。这甚至可以使用嵌套的 SELECT 查询吗?我应该使用光标,如果是的话,有人可以用光标显示一个例子吗?任何帮助都感激不尽。
编辑 #1:添加了 C# 实现、MySQL 转储和预期结果
C# 实现
表结构、测试数据和预期结果
编辑#2:添加了一个较小的数据集和进一步的算法演练
这是一个较小的数据集:
会议
簇
SESSION_DOCUMENT
CLUSTER_DOCUMENT
算法详解
第 1 步:获取会话查看的文档的集群
第 2 步:计算集群的出现次数
第 3 步(最终结果):找到每个会话的最大发生集群(见上文)并构建最终结果集(session_id,cluster_id):
编辑#3:接受的答案说明
两个给出的答案都是正确的。它们都为问题提供了解决方案。我给了 Mosty Mostacho 接受的答案,因为他首先提供了解决方案,并提供了另一个版本的解决方案,带有VIEW
. mankuTimma 的解决方案与 Mosty Mostacho 的解决方案质量相同。因此,我们有两个同样好的解决方案,我选择了莫斯蒂·莫斯塔乔,因为他是第一个。
感谢他们俩的贡献。.
weka - Classification with Weka+ NaiveBayes Classifier+ Text classification
I'm using Weka for text classification task. I created my data.arff File. It contains two attributes:
- text attribute
- class attribute
Then, the generated ARFF file is processed with the StringToWordVector:
java weka.filters.unsupervised.attribute.StringToWordVector -i data/weather.arff -o data/out.arff Then, NaiveBayes is used: java weka.classifiers.bayes.NaiveBayes -t data/out.arff -K
I have this problem:
weka.core.UnsupportedAttributeTypeException: weka.classifiers.bayes.NaiveBayes: Cannot handle numeric class! at weka.core.Capabilities.test(Capabilities.java:954) at weka.core.Capabilities.test(Capabilities.java:1110) at weka.core.Capabilities.test(Capabilities.java:1023) at weka.core.Capabilities.testWithFail(Capabilities.java:1302) at weka.classifiers.bayes.NaiveBayes.buildClassifier(NaiveBayes.java:213) at weka.classifiers.Evaluation.evaluateModel(Evaluation.java:1076) at weka.classifiers.Classifier.runClassifier(Classifier.java:312) at weka.classifiers.bayes.NaiveBayes.main(NaiveBayes.java:944) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at weka.gui.SimpleCLIPanel$ClassRunner.run(SimpleCLIPanel.java:265)
Could anyone help me? I'm stuck at this level.
user-interface - 在 Weka 的 GUI 下 NaiveBayes 的奇怪结果
我正在使用 Weka 的 GUI 对文本文档进行分类。我的数据集是 .arff 格式。
我应用 StringToWordVector 过滤器。然后,我应用 RemovePercentage 过滤器将我的数据集划分为训练集和测试集。它总共包含 99 个实例和 934 个属性。训练-测试拆分后,训练集包含 66 个实例,测试集包含 33 个实例。
我在训练集中学习模型:结果是 100% 作为准确率然后,我测试在测试集上学习的模型:结果是 3.0303 %。
谁能帮我理解为什么我得到 3.0303 % 以及如何改进这个结果?
java - 使用 weka 进行文本分类
我正在使用 Weka 库在 java 中构建一个文本分类器。
首先我删除停用词,然后我使用词干分析器(例如将汽车转换为汽车)。现在我有 6 个预定义的类别。我在每个类别的 5 个文档上训练分类器。文件的长度相似。
当要分类的文本很短时,结果还可以。但是当文本超过 100 字时,结果变得越来越陌生。
我返回每个类别的概率如下:概率:
[0.0015560238056109177, 0.1808919321002592, 0.6657404531908249, 0.004793498469427115, 0.13253647895234325, 0.01448161348153481]
这是一个非常可靠的分类。
但是当我使用超过 100 个单词的文本时,我会得到如下结果:
概率:[1.2863123678314889E-5, 4.3728547754744305E-5, 0.9964710903856974, 5.539960514402068E-5, 0.002993481218084141, 4.23437119E-5]-4
这太好了。
现在我使用朴素贝叶斯多项式对文档进行分类。我已经阅读了它,发现我可以在较长的文本上表现得奇怪。可能是我现在的问题?
任何人都知道为什么会这样?
machine-learning - Test cases in Weka
Given that I may have an ARFF file that is written in the following form:
And I were to run this to train a Naive Bayes Classifier on Weka. How would I create a test-set so that this trained classifier would be able to make predictions? Thanks.
java - Java中使用Weka的基本文本分类
我正在尝试使用 Weka 在 JAVA 中构建文本分类器。我已经阅读了一些教程,并且正在尝试构建自己的分类器。
我有以下类别:
以及以下已经训练好的数据
因此,例如,如果用户想要对 java 一词进行分类,它应该返回类别计算机(毫无疑问,java 只存在于该类别中!)。
它确实可以编译,但会产生奇怪的输出。
输出是:
但是要分类的第一个文本是 java 并且它只出现在计算机类别中,因此它应该是
而另一个根本不应该被发现,所以它应该被归类为未知
这是代码:
顺便说一句,找到了一个很好的页面:
weka - Weka 实验环境下的朴素贝叶斯运行时
我在 Weka 实验环境下为相同的数据集运行 SMO 和朴素贝叶斯。对于 SMO,我有 116.547 秒的训练集和 19.865 秒的测试集。对于朴素贝叶斯,我有 80.665 秒的训练集和 699.594 秒的测试集。我想知道这些结果是否重要,因为朴素贝叶斯被称为快速分类器。
谁能解释我这些结果?
weka - 属性选择+weka+朴素贝叶斯
我想知道以下三种方法中哪种方法最适合执行属性选择:
- 使用元分类器
- 过滤法
- 本机方法,直接使用属性选择类
我使用的分类器是朴素贝叶斯。
谁能指导我找到最佳选择?
math - 理解朴素贝叶斯的概率计算
使用朴素贝叶斯文本分类技术,您通常计算训练数据中的单词并计算 p(label | document),其中文档是一串单词?
对于文本分类,为什么我们不能直接计算 P(label | word1, word2, etc) 来预测标签?(即为什么我们需要使用贝叶斯定理)
鉴于文件,我们有完整的数据......似乎应该能够直接计算 p(label and w1 and w2 ) / p(w1 and w2) ?
我意识到训练集不是基本事实。用贝叶斯定理计算能解决这个问题吗?如果是这样,怎么做?你能说明数学是如何工作的吗?
javascript - 杜威十进分类法的三重下拉菜单
杜威十进分类法 (DDC) 是一种对书籍和文本进行分类的非常有用的方法。所以我试图找到一个实现它的三重下拉菜单。我用许多不同的方式搜索了它,但找不到任何东西。
我很久以前就看到了双下拉菜单和最近的三重下拉菜单,所以我可以自己实现这个。认为我的幸运猜测是,对 javascript 不太了解,我可以花费很多时间来实现它。
因此,我的问题。你知道我在哪里可以找到一个已经为实现 DDC 的下拉菜单制作的 javascript 代码吗?此外,当您选择所有字段时,它不需要重定向到另一个页面,因为它是用于需要其他字段的提交页面。这可能是被黑客入侵的想法。
如果您发布的不是 DDC,而是使用通用十进制分类的一些代码,这也是有效的。只是我更喜欢DDC。
如果我在任何地方都找不到它,我会尝试自己做并发布代码。
它应该以这种方式工作:第一个下拉菜单有以下选项:
- 计算机科学、信息和一般工作
- 哲学和心理学
- 宗教
- 社会科学
- 语言
- 科学(包括数学)
- 技术与应用科学
- 艺术和娱乐
- 文学
- 历史和地理
如果您选择了“科学”,那么第二个下拉菜单将获取这些值:
- 科学
- 数学
- 天文学和相关科学
- 物理
- 化学与相关科学
- 地球科学
- 古生物学;古动物学
- 生命科学
- 植物
- 动物科学/动物
假设现在您选择了“物理”,那么第三个下拉菜单将是这样的:
- 经典力学;固体力学
- 流体力学; 液体力学
- 气体力学
- 声音和相关振动
- 光和超光现象
- 热
- 电力和电子
- 磁性
- 现代物理学
如果您选择了“Heat”,那么下拉菜单的值将是:opt1=5, opt2=3, opt3=6,因为“Heat”对应于 536。
您可以在Wikipedia中查看完整结构。