import math tf =2 idf = math.log((4+1)/(2+1))+1 print(tf*idf)
可以看到两者值相等。 (二)以l2的方式归一化 从sklearn提供的官方文档中,我们可以发现,sklearn默认以l2的方式进行归一化操作; l2: sum of sqquares of vector elements is 1. 每一行的平方和为1
tv = TfidfVectorizer(use_idf=True, smooth_idf=True,norm ='l2')#Sum of squares of vector elements is 1 表示 每一行平方和为1 # 输入训练集矩阵,每行表示一个文本 train =["I love nlp nlp","nlp loves me","I love China","China Chinese"] # 训练,构建词汇表以及词项idf值,并将输入文本列表转成VSM矩阵形式 tv_fit = tv.fit_transform(train) # 查看一下构建的词汇表 print(tv.get_feature_names())# 查看输入文本列表的VSM矩阵 tv_fit.toarray().tolist()
通过验证: (三)以l1的方式归一化 l1:Sum of absolute values of vector elements is 1. 每一行的绝对值之和为1
from sklearn.feature_extraction.text import TfidfVectorizer # 表示l1归一化的方式为每一行相加之和为1 tv = TfidfVectorizer(use_idf=True, smooth_idf=True,norm ='l1')# l1 Sum of absolute values of vector elements is 1 # 输入训练集矩阵,每行表示一个文本 train =["I love nlp nlp","nlp loves me","I love China","China Chinese"] # train = ["我 爱 自然语言处理", # "自然语言处理 也爱 我", # "我 是 中国人", # "自然语言处理 是一门 课程"] # 训练,构建词汇表以及词项idf值,并将输入文本列表转成VSM矩阵形式 tv_fit = tv.fit_transform(train) # 查看一下构建的词汇表 print(tv.get_feature_names()) # 查看输入文本列表的VSM矩阵 tv_fit.toarray().tolist()
a = norm1.fit_transform(a) print(a.toarray().tolist())# n/N 1/3 2/3
result_list2 = transformer.fit_transform(a).toarray().tolist() word = vectorizer.get_feature_names() #print(transformer.get_params()) print('词典为:') print(word) print('tf-idf值(没有归一化)为:') for weight in result_list2:print(weight)
import math tf =2/3 idf = math.log((4+1)/(2+1))+1 tf*idf