我有一个系统跟踪用户查看的文档.每个文档都有自己的ID和它所属的集群.我的系统跟踪会话ID和视图数量.我现在想构建一个SQL查询,它会给我两列 - 会话ID和分类集群.分类算法很简单:
1. select all sessions
2. for each session S
I. prepare an accumulator ACC for clusters
II. select the clusters of viewed documents for this session
III. for each cluster C accumulate the cluster count ( ACC[C]++ )
IV. find the maximum in the ACC. That is the cluster that the session was classified to
Run Code Online (Sandbox Code Playgroud)
表结构如下,我使用的是MySQL 5.5.16:
会议
+-------+-----------+--------------------+
| ID | sessionID | classified_cluster |
+-------+-----------+--------------------+
Run Code Online (Sandbox Code Playgroud)
SessionDocument
+-------+-----------+------------+
| ID | sessionID | documentID |
+-------+-----------+------------+ …Run Code Online (Sandbox Code Playgroud) 我使用Stanford POS tagger获得了POS标签句子.例如:
/ DT岛/ NN是/ VBD非常/ RB漂亮/ JJ ./.我/ PRP喜欢/ VBP它/ PRP ./.
(xml格式也可用)
任何人都可以解释如何从这个POS标签句子中进行特征选择,并使用机器学习方法将它们转换为特征向量进行文本分类.
machine-learning part-of-speech document-classification feature-selection
让我们从一个简单的问题开始吧.假设我有一个350字母的句子,并希望将句子分成"好心情"桶或"坏心情"桶.
什么是设计算法来解决句子的最佳方法?
我试图用Weka在JAVA中构建一个文本分类器.我已经阅读了一些教程,并且我正在尝试构建自己的分类器.
我有以下类别:
computer,sport,unknown
Run Code Online (Sandbox Code Playgroud)
以及已经训练过的数据
cs belongs to computer
java -> computer
soccer -> sport
snowboard -> sport
Run Code Online (Sandbox Code Playgroud)
因此,例如,如果用户想要对单词java进行分类,则应返回类别计算机(毫无疑问,java仅存在于该类别中!).
它确实编译,但生成奇怪的输出.
输出是:
====== RESULT ====== CLASSIFIED AS: [0.5769230769230769, 0.2884615384615385, 0.1346153846153846]
====== RESULT ====== CLASSIFIED AS: [0.42857142857142855, 0.42857142857142855, 0.14285714285714285]
Run Code Online (Sandbox Code Playgroud)
但是第一个要分类的文本是java,它只出现在类别计算机中,因此它应该是
[1.0 0.0 0.0]
Run Code Online (Sandbox Code Playgroud)
而对于另一个它根本不应该被发现,因此它应被归类为未知
[0.0 0.0 1.0].
Run Code Online (Sandbox Code Playgroud)
这是代码:
import java.io.FileNotFoundException;
import java.io.Serializable;
import java.util.Arrays;
import weka.classifiers.Classifier;
import weka.classifiers.bayes.NaiveBayesMultinomialUpdateable;
import weka.core.Attribute;
import weka.core.FastVector;
import weka.core.Instance;
import weka.core.Instances;
import weka.filters.Filter;
import weka.filters.unsupervised.attribute.StringToWordVector;
public class TextClassifier implements Serializable {
private static final long serialVersionUID = -1397598966481635120L; …Run Code Online (Sandbox Code Playgroud) 我对在文档分类中计算IDF(逆文档频率)有疑问.我有多个类别,包含多个培训文档.我使用以下公式计算文档中每个术语的IDF:
IDF(t,D)=log(Total Number documents/Number of Document matching term);
Run Code Online (Sandbox Code Playgroud)
我的问题是:
information-retrieval machine-learning tf-idf categorization document-classification
我是gensim包和向量空间模型的新手,我不确定我应该如何处理我的 LSA 输出。
为了简要概述我的目标,我想使用主题建模来增强朴素贝叶斯分类器,以改进评论(正面或负面)的分类。这是我一直在阅读的一篇很棒的论文,它塑造了我的想法,但让我对实现仍然有些困惑。
我已经得到了朴素贝叶斯的工作代码——目前,我只是使用一元词袋,因为我的特征和标签要么是正面的,要么是负面的。
这是我的 gensim 代码
from pprint import pprint # pretty printer
import gensim as gs
# tutorial sample documents
docs = ["Human machine interface for lab abc computer applications",
"A survey of user opinion of computer system response time",
"The EPS user interface management system",
"System and human system engineering testing of EPS",
"Relation of user perceived response time to error measurement",
"The generation of random binary unordered trees", …Run Code Online (Sandbox Code Playgroud) latent-semantic-indexing document-classification gensim latent-semantic-analysis naivebayes
我正在使用来自python的libsvm(svmutils)进行分类任务。分类器是准确的。但是,我得到这样的输出:
*
optimization finished, #iter = 75
nu = 0.000021
obj = -0.024330, rho = 0.563710
nSV = 26, nBSV = 0
Total nSV = 26
*
optimization finished, #iter = 66
nu = 0.000030
obj = -0.035536, rho = -0.500676
nSV = 21, nBSV = 0
Total nSV = 21
*
optimization finished, #iter = 78
nu = 0.000029
obj = -0.033921, rho = -0.543311
nSV = 23, nBSV = 0
Total nSV = 23
*
optimization finished, #iter …Run Code Online (Sandbox Code Playgroud) python classification machine-learning libsvm document-classification
几乎所有的例子都基于数字.在文本文档中,我有单词而不是数字.
那么你能告诉我如何使用这些算法进行文本文档分类的简单例子.
我不需要代码示例,只需要逻辑
伪代码会有很大帮助
我正在使用朴素贝叶斯进行文本分类机器学习问题.我把每个单词都作为一个功能.我已经能够实现它,并且我的准确性很高.
我可以使用单词元组作为特征吗?
例如,如果有两个类,政治和体育.政府这个词可能出现在他们两个人身上.然而,在政治上我可以有一个元组(政府,民主),而在课堂体育中我可以有一个元组(政府,运动员).因此,如果一篇新的文章出现在政治中,那么元组(政府,民主)的概率比元组(政府,运动员)更具概率.
我问这是因为这样做是因为我违反了Naive Bayes问题的独立性假设,因为我也在考虑将单个单词作为特征.
另外,我正在考虑为功能添加权重.例如,3元组功能的重量将小于4元组功能.
从理论上讲,这两种方法是否都没有改变Naive Bayes分类器的独立性假设?此外,我还没有开始我提到的方法,但这会提高准确性吗?我认为准确性可能不会提高,但获得相同精度所需的训练数据量会更少.
我正在尝试学习斯坦福NLP分类器,并希望解决文档分类问题.任何人都可以建议我找到一个有效的例子吗?我也在查看Open NLP库,并且能够找到许多工作示例,例如
http://tharindu-rusira.blogspot.com/2013/12/opennlp-text-classifier.html
因此,正如我们在这里看到的,很容易弄清楚发生了什么并创建了一个小型工作原型.但是,我找不到斯坦福NLP的简单示例,它将向我展示
有什么建议?