本节书摘来自华章社区《Clojure数据分析秘笈》一书中的第5章,第2.6节调整词频值的度量,作者(美)Eric Rochester,更多章节内容可以访问云栖社区“华章社区”公众号查看
2.6 调整词频值的度量
标准化数值的一种方式是根据组的大小来度量其频率。例如,单词truth在一个文档中出现三次。如果这个文档有30个单词是一种意义,然而如果这个文档有300个单词或者3000个单词就会有不同的意义。如果数据集中的文档长度不一,如何跨文档比较单词的频率?
答案是—调整词频的计量方式。在一些情况下仅需按文档长度调整,或者如果想得到更好的结果,可以利用更复杂的技术如tf-idf(term frequency-inverse document frequency)。维基百科有关于这项技术的介绍,详见http://en.wikipedia.org/wiki/Tf-idf。
本方法中将根据文档的总词数调整单词频率。
2.6.1 准备工作
本方法中不需要太多工具。然而,如果在REPL中有一个较好的输出工具,工作会变得容易些。使用如下命令:
![30d1e45857700eef237d5cfec0d82e0ced2195a7](https://yqfile.alicdn.com/30d1e45857700eef237d5cfec0d82e0ced2195a7.png?x-oss-process=image/resize,w_1400/format,webp)
可以立即看到调整后的值更容易进行比较。例如,调整后的频率可以相互比较,然而未经调整的频率却不能(调整后0.53和0.5,调整前92和3)。当然,由于这不是一个真实的数据集,这些频率没有实际意义,但这展示了方法和如何改善数据集。
2.6.3 实现原理
对于每个函数,传入一对键:源键和目的键。第一个函数rescale-by-total将源键对应的值加和,然后将目的键设置成这个值与集合中所有项目中源键对应值的和的比例。
第二个函数rescale-by-group使用另一个键:组键(group key)。它根据组键对所有项目排序分组,并将每个组传给rescale-by-total函数。