sklearn.feature_extraction.text.TfidfVectorizer

sklearn.feature_extraction.text.TfidfVectorizer

from sklearn.feature_extraction.text import TfidfVectorizer
import numpy as np

"""
tf-idf(t,d) = tf(t,d)*idf(t)
idf(t) = log(n_d/df(d,t))+1
平滑版 idf(t) = log(1+n_d/1+df(d,t))+1

tf(t,d)是tf值,表示某一篇文本d中,词项t的频度,从式子可以看出tf值由词项和文本共同决定.
idf(t)是词项t的idf值计算式,nd表示训练集文本数,df(d,t)表示包含词项t的文档总数,因此idf值与训练集文本总数和包含词项t的文本数有关

对于短文本来说,tf-idf值中的tf部分大部分只能取0和1,数值区别的地方在于idf值,而对于同一个词项来说idf值不管在什么测试文本上都是一样的,
它只是相当于给每个特征词赋予了一个权值,这个权值会减小那些常见词语,提高不太常见的词语。对于短文本来说tf值失去了频次意义,因此tf-idf
值表示的VSM退化成one-hot表示+idf值。

from: https://zhuanlan.zhihu.com/p/67883024
"""


tv = TfidfVectorizer(use_idf=True, smooth_idf=True, norm=None)

train = ["Chinese Beijing Chinese",
         "Chinese Chinese Shanghai",
         "Chinese Macao",
         "Tokyo Japan Chinese"]

tv_fit = tv.fit_transform(train)
print(tv.get_feature_names())
print(tv_fit.toarray())
'''
运行结果:
['beijing', 'chinese', 'japan', 'macao', 'shanghai', 'tokyo']
[[1.91629073 2.         0.         0.         0.         0.        ]
 [0.         2.         0.         0.         1.91629073 0.        ]
 [0.         1.         0.         1.91629073 0.         0.        ]
 [0.         1.         1.91629073 0.         0.         1.91629073]]
'''
test = ["Chinese Chinese Chinese Tokyo Japan"]
test_fit = tv.transform(test)
print(tv.get_feature_names())
print(test_fit.toarray())

# 词语beijing的在第1篇文本中的频次为1.0,tf(beijing,d1)=1.0
# 词语beijing只在第1篇文本中出现过df(d,beijing)=1,nd=4,
# 代入平滑版的tf-idf计算式得到1.9
# In [13]: 1.0*(1+log((4+1)/(1+1)))
# Out[13]: 1.916290731874155
# 词语chinese的在第1篇文本中的频次为2.0,tf(chinese,d1)=2.0
# 词语chinese只在4篇文本中都出现过df(d,beijing)=4,nd=4,
# 代入平滑版的tf-idf计算式得到2.0
# In [14]: 2.0*(1+log(4/4))
# Out[14]: 2.0


tv = TfidfVectorizer(smooth_idf=False)
tv_fit = tv.fit_transform(train)
feature_names = tv.get_feature_names()
array = tv_fit.toarray()
print(feature_names)
print(array)
print(np.linalg.norm(array, axis=1, ord=2))
'''
['beijing', 'chinese', 'japan', 'macao', 'shanghai', 'tokyo']

[[0.76641418 0.64234672 0.         0.         0.         0.        ]
 [0.         0.64234672 0.         0.         0.76641418 0.        ]
 [0.         0.38649524 0.         0.9222914  0.         0.        ]
 [0.         0.28410924 0.67796827 0.         0.         0.67796827]]
 
[1. 1. 1. 1.]
 
'''
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值