part4文字分類
part3文字聚類裡講到過,分類跟聚類的簡單差異。所以要做分類我們需要先整理出乙個訓練集,也就是已經有明確分類的文字;測試集,可以就用訓練集來替代;**集,就是未分類的文字,是分類方法最後的應用實現。
1. 資料準備
訓練集準備是乙個很繁瑣的功能,暫時沒發現什麼省力的辦法,根據文字內容去手動整理。這裡還是使用的某品牌的官微資料,根據微博內容,我將它微博的主要內容分為了:**資訊(promotion)、產品推介(product)、公益資訊(publicwelfare)、生活雞湯(life)、時尚資訊(fashionnews)、影視娛樂(showbiz),每個分類有20-50條資料,如下可看到訓練集下每個分類的文字數目,訓練集分類名為中文也沒問題。
訓練集為hlzj.train,後面也會被用作測試集。
**集就是part2裡面的hlzj。
2. 分詞處理
訓練集、測試集、**集都需要做分詞處理後才能進行後續的分類過程。這裡不再詳細說明,過程類似於part2中講到的。訓練集做完分詞後hlzjtraintemp,之前對hlzj檔案做過分詞處理後是hlzjtemp。然後分別將hlzjtraintemp和hlzjtemp去除停詞。
library(rwordseg)
hlzjtraintemp ~]","",hlzj.train$text)
hlzjtraintemp 3. 得到矩陣
在part3中講到了,做聚類時要先將文字轉換為矩陣,做分類同樣需要這個過程,用到tm軟體包。先將訓練集和**集去除停詞後的結果合併為hlzjall,記住前202(1:202)條資料是訓練集,後1639(203:1841)條是**集。獲取hlzjall的語料庫,並且得到文件-詞條矩陣,將其轉換為普通矩陣。
hlzjall
hlzjall[1:202]
hlzjall[203:1841]
length(hlzjall)
[1] 1841
corpusall
(hlzjall.dtm
<>
non-/sparse entries: 33663/20167630
sparsity : 100%
maximal term length: 47
weighting : term frequency (tf)
dtmall_matrix
4. 分類用到knn演算法(k近鄰演算法),這個演算法在class軟體包裡。矩陣的前202行資料是訓練集,已經有分類了,後面的1639條資料沒有分類,要根據訓練集得到分類模型再為其做分類的**。將分類後的結果和原微博放在一起,用fix()檢視,可以看到分類結果,效果還是挺明顯的。
knn分類演算法算是最簡單的一種,後面嘗試使用神經網路演算法(nnet())、支援向量機演算法(svm())、隨機森林演算法(randomforest())時,都出現了電腦記憶體不夠的問題,我的電腦是4g的,看記憶體監控時能看到最高使用達到3.92g。看樣子要換台給力點的電腦了╮(╯▽╰)╭
5. 分類效果
上面沒有講到測試的過程,對上面的例子來說,就是knn前兩個引數都用train,因為使用資料集相同,所以得到的結果也是正確率能達到100%。在訓練集比較多的情況下,可以將其隨機按7:3或者是8:2分配成兩部分,前者做訓練後者做測試就好。這裡就不再細述了。
在分類效果不理想的情況下,改進分類效果需要豐富訓練集,讓訓練集特徵盡量明顯,這個在實際問題是乙個很繁瑣卻不能敷衍的過程。
R語言做文字挖掘 Part3文字聚類
part3文字聚類 分類演算法 聚類演算法 文字分類聚類會要用到這些演算法去實現,暫時不用深究演算法細節,r中已經有成熟的可以直接呼叫的這些演算法了。大概說下分類和聚類的差異,照我的理解,分類演算法和聚類演算法最後實現的效果是相同的,都是給乙個集合劃分成幾個類別。不同的是分類演算法是根據已知的確定類...
pytorch學習筆記 part4 文字預處理
選擇一部英文 h.g.well的time machine,學習實現文字預處理的具體過程。import collections import re defread time machine with open r d project textpreprocess timemachine7163 tim...
文字預處理 (4)文字糾錯
一般有兩種文字糾錯的型別 首先看一下non word的拼寫錯誤,這種錯誤表示此詞彙本身在字典中不存在,比如把 要求 誤寫為 藥求 把 correction 誤拼寫為 corrction 尋找這種錯誤很簡單,例如分完詞以後找到哪個詞在詞典中不存在,那麼這個詞就可能是錯誤拼出來的的詞。操作步驟 找到候選...