复现TF-IDF示例时乘法计算结果异常问题排查
问题分析与解决
嘿,我一眼就发现你代码里的关键错误了!你明明定义了正确的computeTFIDF函数,但最后计算TF-IDF的时候却误用了computeTF函数,这就是结果不符合预期的核心原因。
具体问题点
看你代码的最后两行:
tfidfBowA = computeTF(tfBowA, idfs) tfidfBowB = computeTF(tfBowB, idfs)
这里你应该调用的是自己定义好的computeTFIDF函数,而不是重复调用computeTF!
为什么会出现0.020833这个错误值?
computeTF的逻辑是词频 = 该词出现次数 / 文档总词数,而你传入的tfBowA已经是计算好的TF值(比如"my"的TF是0.1666),再用computeTF处理的话,相当于又做了一次除法:0.1666 / 6 ≈ 0.020833,这正好是你看到的错误结果。
修正后的代码
把最后两行改成调用computeTFIDF:
tfidfBowA = computeTFIDF(tfBowA, idfs) tfidfBowB = computeTFIDF(tfBowB, idfs)
验证修正结果
修正后,公共词(on、my、sat、the)的IDF值为0,乘以它们的TF值(0.1666)后结果就是0;而仅出现在单个文档的词(比如"cat"),TF值0.1666乘以IDF值0.6931,结果约为0.1155,完全符合你的预期输出。
内容的提问来源于stack exchange,提问作者Ullsokk
相关产品推荐
相关产品推荐

