机器学习训练营——机器学习爱好者的自由交流空间(入群联系qq:2279055353)
TF-idf 权
在大的文本合集里,一些词出现的频率很高(例如英文里的the, a, is)但包含的实际文本内容的有价值的信息却很少。如果我们把计数的数据直接提供给一个分类器,那些高频词条会影响罕见但更有意义的词条。为了重新加权计数特征为适合分类器使用的浮点值,现在普遍采用tf-idf
变换。
tf
的意思是term-frequency
, 而tf-idf
的意思是term-frequency times inverse document-frequency
, 公式为:
t f tf tf- i d f ( t , d ) = t f ( t , d ) × i d f ( t ) idf(t, d)=tf(t, d)\times idf(t) idf(t,d)=tf(t,d)×idf(t)
这里,使用TfidfTransformer
的默认设置,TfidfTransformer(norm='l2', use_idf=True, smooth_idf=True, sublinear_tf=False)
t f ( t , d ) tf(t, d) tf(t,d)表示词条频数,即,一个词条在一个给定文档里出现的次数。
i d f ( t ) = log 1 + n d 1 + d f ( d , t ) + 1 idf(t)=\log\dfrac{1+n_d}{1+df(d, t)}+1 idf(t)=log1+df(d,t)1+nd+1
n d n_d nd表示文档总数, d f ( d , t ) df(d, t) df(d,t)表示包含词条 t t t的文档数,结果tf-idf向量经欧拉范数归一化
v n o r m = v ∣ ∣ v ∣ ∣ 2 = v v 1 2 + v 2 2 + ⋯ + v n 2 v_{norm}=\dfrac{v}{||v||_2}=\dfrac{v}{\sqrt{v_1^2+v_2^2+\dots+v_n^2}} vnorm=∣∣v∣∣2<