标签为“Machine Learning”的页面如下
Post
深入了解scikit Learn裡TFIDF計算方式
TFIDF計算說明
參加今年iT鐵人賽時,曾經寫過簡單使用scikit-learn裡的TFIDF看看,並寫到scikit-learn裡tfidf計算方式與經典算法不同。後來在官方文件中找到說明,也簡單嘗試了一下。這次來做點分享。
在經典算法,TF是這樣計算:。不過scikit-learn是直接用n_(i,j)
,也就是使用CountVectorizer
的結果。
IDF的部份,原本經典算法是:,為了避免分母為零,也經常會使用log(n/(df(k)+1))
計算,也就是將分子+1
。scikit-learn裡面則分成兩種,預設使用smooth
的版本:log((n+1)/(df(k)+1))
,也就是分子分母都加一;另一種是經典原始版本,而外加上1:log(n/df(k))+1
。
最後sckit-lean會做標準化(normalize),所以最後結果會是normaliz(tf*idf)
。
嘗試實驗
引入套件
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.feature_extraction.text import CountVectorizer
import pandas as pd
import math
from sklearn.preprocessing import normalize
實驗資料
d1 = 'a b d e d f a f e fa d s a b n'
d2 = 'a z a f e fa h'
d3 = 'a z a f e fa h'
對,基本上就是簡單使用scikit-learn裡的TFIDF看看所測試的方式,所以當然也要將stop_words=None
, token_pattern="(?u)\\b\\w+\\b"
而外設定,原因這裡就不多做說明了。