我正在开发一个简单的搜索引擎,我使用TF-IDF公式来衡量搜索词的重要性。我看到人们使用不同的公式基础,但我没有看到任何解释何时使用。这有关系吗?你有什么建议吗?我当前的实现使用math. h库的常规log()函数
s4n0splo1#
TF-IDF文献通常使用基数2,尽管一个常见的实现sklearn使用自然的分数,例如。只是考虑到基数越低,分数越大,这可能会影响搜索结果集的截断分数。请注意,从数学的Angular 来看,基数总是可以在以后更改的。从一个基数转换到另一个基数很容易,因为下面的等式成立:
log_a(x)/log_a(y) = log_b(x)/log_b(y)
字符串x1c 0d1x的数据你总是可以从一个碱基转换到另一个碱基。这实际上很容易。只需使用这个公式:
log_b(x) = log_a(x)/log_a(b)
型
的工程师们通常更喜欢2和10这样的基数。2是中场休息的好数字,10是我们的数字系统。数学家更喜欢自然对数,因为它使微积分容易得多。函数b^x的导数是k*b^x,其中b是常数。但是如果b等于e(自然对数)则k是1。假设你想用log()发送5.63的2-对数,就用log(5.63)/log(2)。如果你有需要的话,就用这个函数来做任意的基:
b^x
k*b^x
b
e
k
1
log()
log(5.63)/log(2)
// Returns the b-logarithm of x double logb(double x, double b) { return log(x)/log(b); }
1条答案
按热度按时间s4n0splo1#
TF-IDF文献通常使用基数2,尽管一个常见的实现sklearn使用自然的分数,例如。只是考虑到基数越低,分数越大,这可能会影响搜索结果集的截断分数。
请注意,从数学的Angular 来看,基数总是可以在以后更改的。从一个基数转换到另一个基数很容易,因为下面的等式成立:
字符串
x1c 0d1x的数据
你总是可以从一个碱基转换到另一个碱基。这实际上很容易。只需使用这个公式:
型
的
工程师们通常更喜欢2和10这样的基数。2是中场休息的好数字,10是我们的数字系统。数学家更喜欢自然对数,因为它使微积分容易得多。函数
b^x
的导数是k*b^x
,其中b
是常数。但是如果b
等于e
(自然对数)则k
是1
。假设你想用
log()
发送5.63的2-对数,就用log(5.63)/log(2)
。如果你有需要的话,就用这个函数来做任意的基:
型