TF值:某個詞(字)在文本(壹段話)中出現的頻率
IDF值:某個詞(字)在文本(壹段話)中的普遍重要性的度量。某壹詞(字)的IDF值,可以由總文本數目除以包含該詞(字)的文本的數目,再將得到的商取 10為底的對數。
?首先看壹下數據,此數據集為訓練數據集,分為“頻道”和“文章”兩列,後面將使用這樣的數據集來進行模型訓練。
由於在文本中有許多沒有用的詞(字)和標點符號,所以要去停用詞
參數解釋:
tokenizer = jieba.lcut? 用jieba分詞中的精確模式;stop_words 定義停用詞詞典,會在結果中刪除詞典中包含的詞;norm?表示對TF-IDF矩陣的每壹行使用l2範數歸壹化; use_idf?表示在TF矩陣的基礎上計算IDF,並相乘得到TF-IDF;smooth_idf?表示通過加1到文檔頻率平滑idf權重,為防止除零,加入壹個額外的文檔(防止計算IDF時出現除0的尷尬情況);sublinear_tf?表示使用 1+log(tf)替換原來的tf, True值表示使用
contents參數就是我們要計算成TF-IDF值的文本數據集(即文章那壹列的數據)
得到的TF-IDF值:
我們可以看看這個詞袋包含多少詞:
我們在得到TF-IDF模型之後,我們還需要對頻道那壹列進行處理。頻道那列其實就是標簽值,包含娛樂,體育,音樂之類的類別。
把頻道那壹列進行編碼,得到標簽值y ,再用剛剛訓練好的tfidf模型計算出x值:
這裏我們在分割訓練集和測試集時,不再直接用x,y來分割,因為此時數據量太大,會讓分割時間變長,所以通過分割index值來得到訓練集和測試集:
這裏使用邏輯回歸模型:
訓練完我們評估壹下模型效果:
最後保存模型:
加載保存的模型:
和實際類別進行比對:
上面整個流程就是壹個簡單的通過詞袋模型進行新聞文本分類,通過計算出TF-IDF值,再送入分類模型進行預測。