亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

TfidfVectorizer 賦予停用詞高權重

TfidfVectorizer 賦予停用詞高權重

九州編程 2022-07-05 19:18:48
給定以下代碼:import pandas as pdfrom sklearn.feature_extraction.text import TfidfVectorizerimport urllib.request  # the lib that handles the url stufffrom bs4 import BeautifulSoupimport unicodedatadef remove_control_characters(s):    base = ""    for ch in s:        if unicodedata.category(ch)[0]!="C":            base = base + ch.lower()        else:            base = base + " "    return base moby_dick_url='http://www.gutenberg.org/files/2701/2701-0.txt'soul_of_japan = 'http://www.gutenberg.org/files/12096/12096-0.txt'def extract_body(url):    with urllib.request.urlopen(url) as s:        data = BeautifulSoup(s).body()[0].string        stripped = remove_control_characters(data)        return strippedmoby = extract_body(moby_dick_url)    bushido = extract_body(soul_of_japan)corpus = [moby,bushido]vectorizer = TfidfVectorizer(use_idf=False, smooth_idf=True)tf_idf = vectorizer.fit_transform(corpus)df_tfidf = pd.DataFrame(tf_idf.toarray(), columns=vectorizer.get_feature_names(), index=["Moby", "Bushido"])df_tfidf[["the", "whale"]]我希望“鯨魚”在“白鯨記”中的 tf-idf 得分相對較高,但在“武士道:日本之魂”中得分較低,而“the”在兩者中得分較低。然而,我得到相反的結果。計算的結果是:|       |     the   | whale    ||-------|-----------|----------||Moby   | 0.707171  | 0.083146 ||Bushido| 0.650069  | 0.000000 |這對我來說毫無意義。誰能指出我在思考或編碼中犯的錯誤?
查看完整描述

1 回答

?
收到一只叮咚

TA貢獻1821條經驗 獲得超5個贊

你觀察這個有兩個原因。

  • 第一個是因為您傳遞給 Tfidf Vectorizer 的參數。您應該這樣做TfidfVectorizer(use_idf=True, ...),因為它是 tfidf 的 idf 部分(請記住,tf-idf 是詞頻和逆文檔頻率的乘積)會懲罰出現在所有文檔中的單詞。通過設置 TfidfVectorizer(use_idf=False, ..),您只是在考慮詞頻部分,這顯然會導致停用詞的得分更高

  • 第二個是因為你的數據。假設您修復了上面的代碼問題,您的語料庫仍然非常非常小,只有兩個文檔。這意味著出現在兩本書中的任何單詞都將以相同的方式受到懲罰。“勇氣”可能出現在兩本書中,就像“the”一樣,因此鑒于它們都出現在您的語料庫的每個文檔中,它們的 idf 值將是相同的,導致停用詞再次獲得更高的分數,因為它們的術語更大 -頻率


查看完整回答
反對 回復 2022-07-05
  • 1 回答
  • 0 關注
  • 123 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號