我有一个不同群体的人在搜索时使用的关键字数据库。
比如:
group1person1: x, y, z
group1person2: x, z, d
...
group2person1: z, d, l
...
等等
我想知道哪些关键字是给定组最具特征的。我试着像OkCupid在他们的博客里做的那样:http://blog.okcupid.com/index.php/the-real-stuff-white-people-like/
有人能推荐合适的算法/术语/建议吗?在
(我将用Python来做这个)
提前谢谢!在
Tags:
我认为最好的选择是Chi^2,infogain,tfidf,条件概率。为什么所有这些都需要线性复杂性。当我们讨论文本数据库时,所有的决策树都不是很可伸缩的。但是为了计算这些属性,我们可以使用任何索引工具,比如Lucene。所以我的建议是计算每个单词的信息增益,然后选择最佳。http://en.wikipedia.org/wiki/Information_gain_in_decision_trees
您的问题或多或少地叙述了ID3算法的核心用例。
ID3的输出是一个分类器,它具有二叉树结构(ID3,C4.5等)。通常被称为决策树。Decision Tree Learning的Wikipedia条目实际上有一个相当不错的ID3摘要(在算法级别)。在
ID3中的两个常用度量方法是确定给定节点上的数据部分应如何分割的,称为信息熵。(一个较少使用的度量是Gini implex)ID3算法只是一个递归下降解析器,它测试变量/值的所有组合,并在给出最小加权平均熵的组合上拆分节点。在
直观地说,信息熵试图识别变量(列)和该变量中的值,该变量将数据“最佳”分割。“最佳分割”与我们的直觉是一致的。这比用散文来描述要容易得多。考虑以下数据集:
如果数据在第4栏中分开(此人是否每周至少进行90分钟的有氧运动?)然后生成的两组类标签如下所示:
是组:[True,True,True,False]
无组:[假,假,假]
几乎,但不完全,两个群体之间的完全异质性。所以很明显,第4列是分割这些数据的“最佳”变量。在
ID3算法中用于确定最佳分割的度量只是这种直觉的数学形式。在
这不是一个完美的(数学上精确的)类比,但是粗略地说,你可以把信息熵与范畴变量(离散值)相关,就像方差与连续变量(浮动)相关一样。换句话说,信息熵(粗略地)表示离散数据的方差(或标准差)。在
使用函数计算熵
^{pr2}$上面的熵函数就是这两个表达式的组合并简化为代码:
完全异能性的熵为0,所以最“有区别”的变量/值就是这样一个变量/值,当你把这个变量和值的数据分开时,加权平均熵最小。接近1的熵值几乎完全“混合”或接近随机。在
总之,对于您的特定问题,要确定最具“区分性”的关键字,请计算两个类标签列表中每一个的熵,然后计算它们的加权平均值(按每个列表中的项数加权)。导致最小加权平均熵分割的关键词就是你所追求的。在
基本上,他们所做的就是计算频率项乘以逆文档频率。tf–idf
相关问题 更多 >
编程相关推荐