本文是轉載!原文地址:CSDN-R語言做文本挖掘
Part4文本分類
Part4文本分類
Part3文本聚類裏講到過,分類跟聚類的簡單差異。所以要做分類我們需要先整理出一個訓練集,也就是已經有明確分類的文本;測試集,可以就用訓練集來替代;預測集,就是未分類的文本,是分類方法最後的應用實現。
1. 數據準備
訓練集準備是一個很繁瑣的功能,暫時沒發現什麼省力的辦法,根據文本內容去手動整理。這裏還是使用的某品牌的官微數據,根據微博內容,我將它微博的主要內容分爲了:促銷資訊(promotion)、產品推介(product)、公益信息(publicWelfare)、生活雞湯(life)、時尚資訊(fashionNews)、影視娛樂(showbiz),每個分類有20-50條數據,如下可看到訓練集下每個分類的文本數目,訓練集分類名爲中文也沒問題。
訓練集爲hlzj.train,後面也會被用作測試集。
預測集就是Part2裏面的hlzj。
[1] 2
fashionNews life product
27 34 38
promotion publicWelfare showbiz
45 22 36
[1] 1639
2. 分詞處理
訓練集、測試集、預測集都需要做分詞處理後才能進行後續的分類過程。這裏不再詳細說明,過程類似於Part2中講到的。訓練集做完分詞後hlzjTrainTemp,之前對hlzj文件做過分詞處理後是hlzjTemp。然後分別將hlzjTrainTemp和hlzjTemp去除停詞。
3. 得到矩陣
在Part3中講到了,做聚類時要先將文本轉換爲矩陣,做分類同樣需要這個過程,用到tm軟件包。先將訓練集和預測集去除停詞後的結果合併爲hlzjAll,記住前202(1:202)條數據是訓練集,後1639(203:1841)條是預測集。獲取hlzjAll的語料庫,並且得到文檔-詞條矩陣,將其轉換爲普通矩陣。
[1] 1841
<<DocumentTermMatrix(documents: 1841, terms: 10973)>>
Non-/sparse entries: 33663/20167630
Sparsity : 100%
Maximal term length: 47
Weighting : term frequency (tf)
4. 分類
用到knn算法(K近鄰算法),這個算法在class軟件包裏。矩陣的前202行數據是訓練集,已經有分類了,後面的1639條數據沒有分類,要根據訓練集得到分類模型再爲其做分類的預測。將分類後的結果和原微博放在一起,用fix()查看,可以看到分類結果,效果還是挺明顯的。
[1] 1639
[1] product product product promotion product fashionNews life
[8] product product fashionNews
Levels: fashionNews life productpromotion publicWelfare showbiz
hlzj_knnClassify
fashionNews life product promotion publicWelfare showbiz
40 869 88 535 28 79
Knn分類算法算是最簡單的一種,後面嘗試使用神經網絡算法(nnet())、支持向量機算法(svm())、隨機森林算法(randomForest())時,都出現了電腦內存不夠的問題,我的電腦是4G的,看內存監控時能看到最高使用達到3.92G。看樣子要換臺給力點的電腦了╮(╯▽╰)╭
在硬件條件能達到時,應該實現分類沒有問題。相關的算法可以用:??方法名,的方式來查看其說明文檔。
5. 分類效果
上面沒有講到測試的過程,對上面的例子來說,就是knn前兩個參數都用train,因爲使用數據集相同,所以得到的結果也是正確率能達到100%。在訓練集比較多的情況下,可以將其隨機按7:3或者是8:2分配成兩部分,前者做訓練後者做測試就好。這裏就不再細述了。
在分類效果不理想的情況下,改進分類效果需要豐富訓練集,讓訓練集特徵儘量明顯,這個在實際問題是一個很繁瑣卻不能敷衍的過程。