日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[机器学习] TF-IDF算法

發(fā)布時間:2023/12/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [机器学习] TF-IDF算法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.文本數(shù)據的向量化

1.1名詞解釋

CF:文檔集的頻率,是指詞在文檔集中出現(xiàn)的次數(shù)

DF:文檔頻率,是指出現(xiàn)詞的文檔數(shù)

IDF:逆文檔頻率,idf = log(N/(1+df)),N為所有文檔的數(shù)目,為了兼容df=0情況,將分母弄成1+df。

TF:詞在文檔中的頻率

TF-IDF:TF-IDF= TF*IDF
?

1.2 TF-IDF算法

TF-IDF(詞頻-逆文檔頻率)算法是一種統(tǒng)計方法,用以評估一字詞對于一個文件集或一個語料庫中的其中一份文件的重要程度。字詞的重要性隨著它在文件中出現(xiàn)的次數(shù)成正比增加,但同時會隨著它在語料庫中出現(xiàn)的頻率成反比下降。該算法在數(shù)據挖掘、文本處理和信息檢索等領域得到了廣泛的應用,如從一篇文章中找到它的關鍵詞。

?

TF-IDF的主要思想是:如果某個詞或短語在一篇文章中出現(xiàn)的頻率TF高,并且在其他文章中很少出現(xiàn),則認為此詞或者短語具有很好的類別區(qū)分能力,適合用來分類。TF-IDF實際上就是 TF*IDF,其中 TF(Term Frequency),表示詞條在文章Document 中出現(xiàn)的頻率;IDF(Inverse Document Frequency),其主要思想就是,如果包含某個詞 Word的文檔越少,則這個詞的區(qū)分度就越大,也就是 IDF 越大。對于如何獲取一篇文章的關鍵詞,我們可以計算這邊文章出現(xiàn)的所有名詞的 TF-IDF,TF-IDF越大,則說明這個名詞對這篇文章的區(qū)分度就越高,取 TF-IDF 值較大的幾個詞,就可以當做這篇文章的關鍵詞。
?

由此可見,當一個詞被越多的文檔包含,則IDF值就越小,也就是所這個詞很常見,不是最重要的能區(qū)分文章特性的關鍵詞。

這樣,某個詞條的TF-IDF的值為 ,即某一個文件中高頻出現(xiàn)的詞條,以及該詞條在整個語料庫文件中低頻出現(xiàn)的現(xiàn)象,就可以產生高權重的TF-IDF,因此,TF-IDF傾向過濾掉常見的詞語,保留重要的詞語。即:字詞的重要性隨著它在文件中出現(xiàn)的次數(shù)成正比增加,但同時會隨著它在語料庫中出現(xiàn)的頻率成反比下降。

?

優(yōu)缺點

?1. 優(yōu)點是算法的容易理解,便于實現(xiàn)。

?2.缺點:IDF的簡單結構并不能有效地反映單詞的重要程度和特征詞的分布情況,使其無法很好的完成對權值的調整功能,所以在一定程度上該算法的精度并不是很高。除此之外,算法也沒喲體現(xiàn)位置信息,對于出現(xiàn)在文章不同位置的詞語都是一視同仁的,而我們知道,在文章首尾的詞語勢必重要性要相對高點。據此,我們可以或許也可以將處于文章不同位置的詞語賦予不同的權重。

?

1.3 文本數(shù)據樣本集

為了講解文本數(shù)據的向量化,假設我們有4個文本,所有文本一共有6個不同的詞,如下所示。

?

?

1.4 使用Sklearn提供的TF-IDF方法

?

import jieba import pandas as pd from sklearn.feature_extraction.text import CountVectorizer from sklearn.feature_extraction.text import TfidfTransformerarr = ['第一天我參觀了美術館', '第二天我參觀了博物館', '第三天我參觀了動物園',]arr = [' '.join(jieba.lcut(i)) for i in arr] # 分詞 print(arr) # 返回結果: # ['第一天 我 參觀 了 美術館', '第二天 我 參觀 了 博物館', '第三天 我 參觀 了 動物園']vectorizer = CountVectorizer() X = vectorizer.fit_transform(arr) word = vectorizer.get_feature_names() df = pd.DataFrame(X.toarray(), columns=word) print(df) # 返回結果: # 動物園 博物館 參觀 第一天 第三天 第二天 美術館 # 0 0 1 1 0 0 1 # 0 1 1 0 0 1 0 # 1 0 1 0 1 0 0transformer = TfidfTransformer() tfidf = transformer.fit_transform(X) weight = tfidf.toarray() for i in range(len(weight)): # 訪問每一句print("第{}句:".format(i))for j in range(len(word)): # 訪問每個詞if weight[i][j] > 0.05: # 只顯示重要關鍵字print(word[j],round(weight[i][j],2)) # 保留兩位小數(shù) # 返回結果 # 第0句:美術館 0.65 參觀 0.39 第一天 0.65 # 第1句:博物館 0.65 參觀 0.39 第二天 0.65 # 第2句:動物園 0.65 參觀 0.39 第三天 0.65

經過對數(shù)據X的計算之后,返回了權重矩陣,句中的每個詞都只在該句中出現(xiàn)了一次,因此其TF值相等,由于“參觀”在三句中都出現(xiàn)了,其IDF較其它關鍵字更低。Sklearn除了實現(xiàn)基本的TF-IDF算法外,還其行了歸一化、平滑等一系列優(yōu)化操作。詳細操作可參見Sklearn源碼中的sklearn/feature_extraction/text.py具體實現(xiàn)。
?

1.5 TF-IDF的使用場景

在做特征工程時,常遇到這樣的問題:從一個短語或短句中提取關鍵字構造新特征,然后將新特征代入分類或者回歸模型,是否需要使用TF-IDF方法?首先,TF是詞頻,即它需要在一個文本中出現(xiàn)多次才有意義,如果在短句中,每個詞最多只出現(xiàn)一次,那么計算TF不如直接判斷其是否存在。

另外,TF-IDF的結果展示的是某一詞針對于它所在文檔的重要性,而不是對比兩文檔的差異。比如上例中雖然三個短句都包含“參觀”,IDF較小,由于詞量小TF較大,其最終得分TF-IDF仍然不太低。如果兩個短語屬于不同類別,新特征對于提取分類特征可能沒有意義,但是對于生成文摘就是有意義的關鍵字。對于此類問題,建議使用:先切分出關鍵詞,將是否包含該關鍵詞作為新特征,然后對新特征和目標變量做假設檢驗,以判斷是否保留該變量的方法提取新特征。
?

總結

以上是生活随笔為你收集整理的[机器学习] TF-IDF算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。