什么时候为 tf-idf 使用哪个日志基础?
When to use which base of log for tf-idf?
我正在开发一个简单的搜索引擎,我在其中使用 TF-IDF 公式对搜索词的重要性进行评分。我看到人们对公式使用不同的基础,但我看不到何时使用哪个的解释。这有关系吗,你有什么建议吗?
我当前的实现使用 math.h 库的常规 log() 函数
没关系,因为下面的等式成立:
log_a(x)/log_a(y) = log_b(x)/log_b(y)
您始终可以从一种碱基转换为另一种碱基。这实际上很容易。只需使用这个公式:
log_b(x) = log_a(x)/log_a(b)
工程师通常更喜欢 2 和 10 这样的基数。 2 适合中场休息,10 是我们的数字系统。学数学的人更喜欢自然对数,因为它使微积分更容易。函数 b^x
的导数是 k*b^x
,其中 b
是常数。 Bur如果b
等于e
(自然对数)那么k
就是1
.
假设您要使用 log()
发送 5.63 的 2 次对数。只需使用 log(5.63)/log(2)
.
如有需要,任意基数使用此函数即可:
double logb(double x, double b) {
return log(x)/log(b);
}
我正在开发一个简单的搜索引擎,我在其中使用 TF-IDF 公式对搜索词的重要性进行评分。我看到人们对公式使用不同的基础,但我看不到何时使用哪个的解释。这有关系吗,你有什么建议吗?
我当前的实现使用 math.h 库的常规 log() 函数
没关系,因为下面的等式成立:
log_a(x)/log_a(y) = log_b(x)/log_b(y)
您始终可以从一种碱基转换为另一种碱基。这实际上很容易。只需使用这个公式:
log_b(x) = log_a(x)/log_a(b)
工程师通常更喜欢 2 和 10 这样的基数。 2 适合中场休息,10 是我们的数字系统。学数学的人更喜欢自然对数,因为它使微积分更容易。函数 b^x
的导数是 k*b^x
,其中 b
是常数。 Bur如果b
等于e
(自然对数)那么k
就是1
.
假设您要使用 log()
发送 5.63 的 2 次对数。只需使用 log(5.63)/log(2)
.
如有需要,任意基数使用此函数即可:
double logb(double x, double b) {
return log(x)/log(b);
}