
R文本分類之RTextTools
古有曹植七步成詩,而RTextTools是一款讓你可以在十步之內(nèi)實現(xiàn)九種主流的機器學習分類器模型的文本分類開發(fā)包。
它集成了(或者說支持)如下算法相關的包:
支持向量機(Support Vector Machine from e1071)
glmnet(一個非常流行的用于變量選擇的R包,俗稱kaggle競賽“三駕馬車”之一)
最大熵模型(maximum entropy from maxent)
大規(guī)模線性判別(scaled linear discriminant,slda)
裝袋算法(bagging from ipred)
提升算法(boosting from caTools)
隨機森林(random forest from randomForest)
神經(jīng)網(wǎng)絡(neural networks from nnet)
回歸樹(regression tree from tree)
RTextTools有著不可不學的三大理由:
首先,RTextTools的設計哲學在于易學與靈活。從而,讓沒有任何R編程經(jīng)驗的社會科學研究者也能輕松實現(xiàn)高端的機器學習算法;并且,讓經(jīng)驗老道的R用戶充分發(fā)揮R的威力,與其他相關的包結(jié)合,如:文本預處理方面的tm包,實現(xiàn)LDA主題模型的topicmodels包等,實現(xiàn)高難度的模型,并且充分提高模型的精度等。
其次,RTextTools提供了從數(shù)據(jù)載入,數(shù)據(jù)清洗,到模型評價的所有功能,并且,實現(xiàn)的函數(shù)非常簡單易記。即所謂的『一條龍服務』。
最后,RTextTools還可以實現(xiàn)結(jié)構(gòu)化數(shù)據(jù)的分類問題。也就是說,它可以像普通的機器學習包caret那樣使用。
下面,讓我們一起來見證一下RTextTools是如何在十步之內(nèi)演繹文本分類這一高端技術活的。
文本分類step-by-step
1.創(chuàng)建矩陣
首先,載入一個自帶的測試數(shù)據(jù)集:data(USCongress)。由于RTextTools集成了tm包的功能,所以tm包在文本預處理方面的功能,如去除空格、移除稀疏詞、移除停止詞、詞干化等功能,都可以輕松實現(xiàn)。
# 創(chuàng)建一個文檔-詞項矩陣doc_matrix<-create_matrix(USCongress$text,language="english",removeNumbers=TRUE,stemWords=TRUE,removeSparseTerms=.998)
2.創(chuàng)建容器(Container)
創(chuàng)建好文檔-詞項矩陣以后,下一步要做的就是對矩陣進行訓練集/測試集的劃分了。RTextTools中的容器(Container)概念,使得人們不必兩次讀入數(shù)據(jù),而將訓練集和測試集一并讀入,在容器內(nèi)做區(qū)分即可。
既然我們是有監(jiān)督的分類算法實現(xiàn),當然不能忘了指定因變量(即類別標簽)。在我們的測試數(shù)據(jù)集中,類別標簽為USCongress$major。
注意:類別標簽一定要為數(shù)值型!
這里,virgin =參數(shù)的設置影響到后續(xù)模型結(jié)果的分析解讀。virgin = FALSE意味著告訴R,我們的測試集是有真實的類別標簽的。
3.訓練模型
數(shù)據(jù)已經(jīng)準備妥當,下面就可以進行模型的訓練了。前面提到的九個機器學習算法的訓練,只需要寫成一個向量,作為參數(shù)傳入train_model()函數(shù)即可同時輕松實現(xiàn)各種高大上的分類器模型訓練。
我們來看一下train_model()函數(shù)的使用方法。
參數(shù)的設置也很簡單。如果你實在懶得設置,不妨先使用默認的參數(shù)試一試。
SVM<-train_model(container,"SVM")GLMNET<-train_model(container,"GLMNET")MAXENT<-train_model(container,"MAXENT")SLDA<-train_model(container,"SLDA")BOOSTING<-train_model(container,"BOOSTING")BAGGING<-train_model(container,"BAGGING")RF<-train_model(container,"RF")#NNET <- train_model(container,"NNET")TREE<-train_model(container,"TREE")
4.使用訓練好的模型進行文本分類
train_model()函數(shù)會返回一個訓練好的模型對象,我們可以把該對象作為參數(shù)傳給classify_model()函數(shù),進行測試集的分類。
SVM_CLASSIFY<-classify_model(container,SVM)GLMNET_CLASSIFY<-classify_model(container,GLMNET)MAXENT_CLASSIFY<-classify_model(container,MAXENT)SLDA_CLASSIFY<-classify_model(container,SLDA)BOOSTING_CLASSIFY<-classify_model(container,BOOSTING)BAGGING_CLASSIFY<-classify_model(container,BAGGING)RF_CLASSIFY<-classify_model(container,RF)#NNET_CLASSIFY <- classify_model(container, NNET)TREE_CLASSIFY<-classify_model(container,TREE)
5.結(jié)果分析
create_analytics()函數(shù)提供了對測試集的分類結(jié)果的四種解讀:從標簽出發(fā);從算法對比出發(fā);從角度文檔出發(fā);以及整體評價。
analytics<-create_analytics(container,cbind(SVM_CLASSIFY,SLDA_CLASSIFY,BOOSTING_CLASSIFY,BAGGING_CLASSIFY,RF_CLASSIFY,GLMNET_CLASSIFY,TREE_CLASSIFY,MAXENT_CLASSIFY))
6.測試分類器準確率(accuracy)
create_analytics()返回的對象適用于summary()和print()方法。
summary(analytics)返回了精度(precision),召回率(recall)和F-值(F-Score)等指標。這三個指標是文本分類中常用的評價指標。
精度的定義為預測為真實正例的個數(shù)除以所有被預測為正例樣本的個數(shù)。召回率則是預測為真實正例的個數(shù)除以所有真實正例樣本的個數(shù)。F-值則同時考慮了精度和召回率,是兩個指標的折衷。
7.整體效果評價(Ensemble agreement)
create_ensembleSummary()函數(shù)提供了整體評價功能。它反映了我們所應用的幾種分類算法的『同時命中率』。
整體評價函數(shù)提供了兩個評價指標:Coverage和Recall。
Coverage衡量了達到召回率閾值的文檔百分比。
Coverage的定義如下:
其中,k表示滿足閾值的算法個數(shù),n代表總的算法個數(shù)。
8.交叉驗證
為了進一步對比與驗證各種算法的精確度,我們可以使用cross_validate()函數(shù)進行k-折交叉驗證。
SVM<-cross_validate(container,4,"SVM")GLMNET<-cross_validate(container,4,"GLMNET")MAXENT<-cross_validate(container,4,"MAXENT")SLDA<-cross_validate(container,4,"SLDA")BAGGING<-cross_validate(container,4,"BAGGING")BOOSTING<-cross_validate(container,4,"BOOSTING")RF<-cross_validate(container,4,"RF")NNET<-cross_validate(container,4,"NNET")TREE<-cross_validate(container,4,"TREE")
9.導出數(shù)據(jù)
最后,可以導出結(jié)果,對未正確標簽的文檔做進一步研究處理。比如,看看是哪種情形下,分類算法準確率較低,需要人工干預。
write.csv(analytics@document_summary,"DocumentSummary.csv")
結(jié)論
至此,文本分類的『獨孤九劍』已然練成!然而,長路漫漫,我們要想提高模型的精度,還需要『勤修內(nèi)功』,進一步學習模型的細節(jié),加深對模型的理解,從而學會調(diào)節(jié)各種參數(shù),進行噪音過濾,模型調(diào)整等。否則,只怕是『Garbage in, Garbage out』了。數(shù)據(jù)分析師培訓
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎用法到實戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關聯(lián)查詢效率:打破 “拆分必慢” 的認知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預期算子的內(nèi)涵、作用與應用解析 動態(tài)隨機一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實戰(zhàn)應用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時,“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗與 t 檢驗:差異、適用場景與實踐應用 在數(shù)據(jù)分析與統(tǒng)計學領域,假設檢驗是驗證研究假設、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計劃中 rows 數(shù)量的準確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實踐指南 在 Python 進行 HTTP 網(wǎng)絡請求開發(fā)時(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點數(shù)據(jù)的科學計數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點數(shù)據(jù)時的科學計數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務數(shù)據(jù)分析步驟的落地者與價值優(yōu)化者 業(yè)務數(shù)據(jù)分析是企業(yè)解決日常運營問題、提升執(zhí)行效率的核心手段,其價值 ...
2025-09-12用 SQL 驗證業(yè)務邏輯:從規(guī)則拆解到數(shù)據(jù)把關的實戰(zhàn)指南 在業(yè)務系統(tǒng)落地過程中,“業(yè)務邏輯” 是連接 “需求設計” 與 “用戶體驗 ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅(qū)動下的精準零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當下,精準營銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務數(shù)據(jù)分析:概念辨析與協(xié)同價值 在數(shù)據(jù)驅(qū)動決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實踐到業(yè)務價值挖掘 在數(shù)據(jù)分析場景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價值導向 統(tǒng)計模型作為數(shù)據(jù)分析的核心工具,并非簡單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10