????????????我們要用詞袋模型進(jìn)行文本分類读串,訓(xùn)練模型大致可以分為兩步:第一步,用TF-IDF表示文本特征撒妈;第二步恢暖,把TF-IDF值和標(biāo)簽值送入分類模型訓(xùn)練。
? ? ? ? 第一步用TF-IDF表示文本特征:? ? ?
?????????????????????????????????????“TF-IDF值” = “TF值” ? “IDF值”? ? ?(在實(shí)操中踩身,我們會(huì)把TF值進(jìn)行歸一化胀茵,以防止它偏向長文本)
? ? ? ? TF值:某個(gè)詞(字)在文本(一段話)中出現(xiàn)的頻率
? ? ? ? IDF值:某個(gè)詞(字)在文本(一段話)中的普遍重要性的度量社露。某一詞(字)的IDF值挟阻,可以由總文本數(shù)目除以包含該詞(字)的文本的數(shù)目,再將得到的商取 10為底的對(duì)數(shù)峭弟。
這里我們使用sklearn中的TfidfVectorizer方法計(jì)算出TF-IDF值:
? ? ? ? ?首先看一下數(shù)據(jù)附鸽,此數(shù)據(jù)集為訓(xùn)練數(shù)據(jù)集,分為“頻道”和“文章”兩列瞒瘸,后面將使用這樣的數(shù)據(jù)集來進(jìn)行模型訓(xùn)練坷备。
由于在文本中有許多沒有用的詞(字)和標(biāo)點(diǎn)符號(hào),所以要去停用詞
參數(shù)解釋:
????????????????tokenizer = jieba.lcut? 用jieba分詞中的精確模式情臭;stop_words 定義停用詞詞典省撑,會(huì)在結(jié)果中刪除詞典中包含的詞赌蔑;norm?表示對(duì)TF-IDF矩陣的每一行使用l2范數(shù)歸一化; use_idf?表示在TF矩陣的基礎(chǔ)上計(jì)算IDF竟秫,并相乘得到TF-IDF娃惯;smooth_idf?表示通過加1到文檔頻率平滑idf權(quán)重,為防止除零肥败,加入一個(gè)額外的文檔(防止計(jì)算IDF時(shí)出現(xiàn)除0的尷尬情況)趾浅;sublinear_tf?表示使用 1+log(tf)替換原來的tf, True值表示使用????
????????????????contents參數(shù)就是我們要計(jì)算成TF-IDF值的文本數(shù)據(jù)集(即文章那一列的數(shù)據(jù))
得到的TF-IDF值:
我們可以看看這個(gè)詞袋包含多少詞:
第二步,把TF-IDF值和標(biāo)簽值送入分類模型訓(xùn)練:
? ? ? ? ? ?我們?cè)诘玫絋F-IDF模型之后馒稍,我們還需要對(duì)頻道那一列進(jìn)行處理皿哨。頻道那列其實(shí)就是標(biāo)簽值,包含娛樂纽谒,體育证膨,音樂之類的類別。
? ? ? ? ? ? 把頻道那一列進(jìn)行編碼佛舱,得到標(biāo)簽值y 椎例,再用剛剛訓(xùn)練好的tfidf模型計(jì)算出x值:
? ? ? ? ? ? 這里我們?cè)诜指钣?xùn)練集和測(cè)試集時(shí),不再直接用x,y來分割请祖,因?yàn)榇藭r(shí)數(shù)據(jù)量太大订歪,會(huì)讓分割時(shí)間變長,所以通過分割index值來得到訓(xùn)練集和測(cè)試集:
? ? ? ? ? ? 這里使用邏輯回歸模型:
? ? ? ? ? ? 訓(xùn)練完我們?cè)u(píng)估一下模型效果:
最后保存模型:
使用模型預(yù)測(cè)新的新聞文本:
? ? ? ? ? ? ? ? ? ? ? ? ? ? 加載保存的模型:
和實(shí)際類別進(jìn)行比對(duì):
總結(jié):
? ? ? ? ? ? 上面整個(gè)流程就是一個(gè)簡單的通過詞袋模型進(jìn)行新聞文本分類刷晋,通過計(jì)算出TF-IDF值,再送入分類模型進(jìn)行預(yù)測(cè)慎陵。