徐萬佶 曾慶
摘 要:目的 比較R語言中rpart包與party包所構(gòu)建決策樹的不同。兩個不同的包所構(gòu)建的模型可推廣應用于其他領(lǐng)域的決策樹分類問題。實驗過程中涉及的數(shù)據(jù)預處理、分類樹建模、模型可視化、測試的思路與方法,也可借鑒應用于其他領(lǐng)域的分類樹建模預測工作。方法 對R語言內(nèi)置數(shù)據(jù)集iris應用分類回歸樹(classification and regression tree,CART)方法與條件推斷決策樹,并運用R語言實現(xiàn)并建立決策樹模型。結(jié)果 rpart包所得決策樹模型與party包所得決策樹模型在預測iris測試集的準確率均為96.7%。結(jié)論 rpart包所得到的決策樹與party包所得到的決策樹在對iris測試集的預測效果上無差異。
關(guān)鍵詞:分類決策 樹R語言 rpart包 party包
中圖分類號:C819 文獻標識碼:A 文章編號:1672-3791(2018)04(b)-0020-03
Abstract:Objective To compare the differences between the rpart and party packages in the R language. The model constructed by two different packages can be applied to decision tree classification in other fields. The data preprocessing, classification tree modeling, model visualization, and testing ideas and methods involved in the experiment process can also be used for modeling and prediction of classification trees applied to other fields. Methods The classification and regression tree (CART) method and conditional inference tree were applied to the built-in data set iris of the R language, and a decision tree model was implemented using R language. Results The accuracy rate of the iris test set was 96.7% for the decision tree model obtained from the rpart package and the decision tree model obtained from the party package. Conclusion There is no difference in the prediction effect of the iris test set between the decision tree obtained by the rpart package and the decision tree obtained by the party package.
Key Words:Classification;Decision tree;R language;Rpart package;Party package
1 問題的提出
數(shù)據(jù)挖掘是通過統(tǒng)計學與機器學習算法,在大量的歷史數(shù)據(jù)中挖掘出隱藏在其中的、有預測性和指導性的信息的科學。在數(shù)據(jù)挖掘中的一個重要研究課題是如何對數(shù)據(jù)集進行分類。分類是這樣的過程:使用類標簽已知的樣本建立一個分類函數(shù)或分類模型(也常常稱作分類器),應用分類模型能把數(shù)據(jù)庫中的類標簽未知的數(shù)據(jù)進行歸類分類在數(shù)據(jù)挖掘中是一項重要的任務。
決策樹是構(gòu)建人工智能系統(tǒng)的主要方法之一,隨著數(shù)據(jù)挖掘技術(shù)在商業(yè)智能等方面的應用,決策樹技術(shù)將在未來發(fā)揮越來越強大的作用[1]。在R語言中關(guān)于決策樹建模,最為常用的有兩個包:一個是rpart包;另一個是party包。因此,本文主要探討這兩個包在構(gòu)建決策樹時的不同。
2 研究方法
2.1 分類回歸樹(CART)模型
建立樹模型可分為分類樹和回歸樹兩種。當數(shù)據(jù)集的因變量為連續(xù)性數(shù)值時,該樹算法就是一個回歸樹;當數(shù)據(jù)集的因變量為離散型數(shù)值時,該樹算法就是一個分類樹,可以很好地解決分類問題。但需要注意的是,該算法是一個二叉樹,即每一個非葉節(jié)點只能引伸出兩個分支,所以當某個非葉節(jié)點是多水平(兩個以上)的離散變量時,該變量就有可能被多次使用[2]。我們從理論上概述決策樹的構(gòu)建過程,這一過程包括如下兩個步驟。
第一,決策樹的生成。這一過程將初始的包含大量信息的數(shù)據(jù)集,創(chuàng)建分類樹遞歸過程中,CART每次都選擇當前數(shù)據(jù)集中具有最小Gini信息增益的特征作為結(jié)點劃分決策樹。
第二,生成樹的剪枝。由于以上過程是沒有停止條件的,所得到的生成樹可能會非常大,對訓練集很可能存在過擬合,即對訓練數(shù)據(jù)有非常高的分類準確率,但是對于新數(shù)據(jù)的分類準確率較差。因此,為了保證生成樹的推廣能力,需要通過剪枝過程對復雜樹的節(jié)點進行刪減,控制樹的復雜度,并由樹的葉節(jié)點數(shù)來衡量復雜度[3]。具體的,先找出固定葉節(jié)點數(shù)下擬合效果最優(yōu)的樹,即局部最優(yōu)模型;再比較各個葉節(jié)點數(shù)下的局部最優(yōu)模型,最終選擇出全局最優(yōu)模型。
2.2 條件推斷決策樹
它根據(jù)統(tǒng)計檢驗來確定自變量和分割點的選擇。先假設所有自變量與因變量均獨立。再對他們進行卡方獨立檢驗,檢驗P值小于閾值的自變量加入模型,相關(guān)性最強的自變量作為第一次分割的自變量,自變量選擇好后,用置換檢驗來選擇分割點。條件推斷決策所構(gòu)建的決策樹不需要剪枝,閾值就決定了模型的復雜程度。如何決定閾值參數(shù)是非常重要的。較為流行的做法是取不同的參數(shù)值進行交叉檢驗,選擇誤差最小的模型參數(shù)。
2.3 建模工具
R語言中的rpart包與party包。
在R語言中有許多擴展包可以增強其功能。rpart包[2]的功能就是運用cart算法實現(xiàn)遞歸分割和樹模型構(gòu)建。其中主要的兩個函數(shù)分別是用來生成樹模型的rpart函數(shù)和進行剪枝的prune函數(shù)。函數(shù)rpart()的基本格式為 :rpart(formula, data , weights , subset, na.actionna.rpart , method, model=FALSE,x=FALSE,Y =TRUE, parms , control, cost, ...)。
Party包做出來的決策樹則為條件推斷決策樹,其主要的語句為ctree語句,ctree的基本格式為ctree(formula, data, subset = NULL,weights = NULL, controls = ctree_control(), xtrafo = ptrafo, ytrafo = ptrafo, scores = NULL)其中前3個參數(shù)與rpart包含義無差別[4]。
2.4 數(shù)據(jù)來源
用來做實例的數(shù)據(jù)來自R語言內(nèi)置數(shù)據(jù)集,此數(shù)據(jù)集是一個在實驗中以真實存在的鳶尾花數(shù)據(jù)為對象,收集了鳶尾花的萼片、花瓣尺寸等數(shù)據(jù),通過這些數(shù)據(jù)將對鳶尾花的種類進行分類預測。數(shù)據(jù)集包含150個數(shù)據(jù),分為3類,每類50個數(shù)據(jù),每個數(shù)據(jù)包含4個屬性??赏ㄟ^花萼長度,花萼寬度,花瓣長度,花瓣寬度4個屬性預測鳶尾花卉屬于(Setosa、Versicolour、Virginica)3個種類中的哪一類。
3 數(shù)據(jù)分析
3.1 rpart包分析步驟
第一,使用分層抽樣函數(shù)Strata,在三類型鳶尾花數(shù)據(jù)中各抽取80%作為訓練集,保存在變量TrainingSet中;余下的20%作為測試集,保存在變量TestSet中。在三類數(shù)據(jù)中,求出每類抽取的樣本數(shù),以Species變量作為分層變量,分層抽取訓練樣本,每層 nPerLevel個。過程如下所示:
結(jié)果中每一行結(jié)果代表一個結(jié)點,而首行的n=120說明了數(shù)據(jù)的總例數(shù)為120例,緊接的兩行node), split, n,loss, yval, (yprob) * denotes terminal node 兩行指示了余下的結(jié)果閱讀方法和結(jié)果值的含義。也就是余下的行顯示順序為編號), 分裂測試屬性和其值,分裂時該區(qū)(類)的例數(shù),損失函數(shù)值(本例是錯分例數(shù)),目標變量的取值(也就是預測類,各個分類的概率值),如果該行帶有 * 號則說明該行是終結(jié)點。由某結(jié)點(結(jié)點編號 n) 分裂而成的結(jié)點編號為2n和2n+1。比如:2)Petal.Length< 2.45 40 0 setosa(1.00000000 0.00000000 0.00000000) * 說明該結(jié)點編號是2,分裂測試屬性是Petal.Length< 2.45,該區(qū)分裂前40例,目標變量的值是setosa,分類結(jié)果的概率是(1.00000000 0.00000000 0.00000000),也就是其中100% 分類正確。因為其編號為2,所以其父結(jié)點編號為1。
由計算得知,rpart包和party包預測測試集的正確率均為96.67%。
5 討論
本文所描述的實驗,研究了基于R語言rpart包與party包進行分類樹建模的方法。實驗中對一組真實存在的鳶尾花數(shù)據(jù)進行了數(shù)據(jù)預處理、劃分出訓練集與測試集,并進行了分類樹建模、模型可視化與測試研究。所建立的分類樹模型可借鑒應用于具體的植物種類判別工作。實驗中涉及的建模流程與方法,也可以借鑒應用到其他領(lǐng)域的分類樹建模與測試工作。在今后的研究工作中,關(guān)于R語言的rpart包與party包分類樹方法,我們會重點關(guān)注兩個方面:一是將分類樹方法用于其他領(lǐng)域的數(shù)據(jù)建模中,總結(jié)積累建模經(jīng)驗;二是對于不同的數(shù)據(jù)使用哪種程序包會取得更好的預測效果。
參考文獻
[1] Jiawei Han,Michelme Kamber,著.數(shù)據(jù)挖掘:概念與技術(shù)[M].范明,孟小峰,譯.北京:機械工業(yè)出版社,2001.
[2] 趙北庚.基于R語言rpart包的分類樹建模研究[J].信息與電腦,2015(1):87-88.
[3] 謝益輝.基于R軟件rpart包的分類與回歸樹應用[J].統(tǒng)計與信息論壇,2007,22(5):67-70.
[4] 黃文,王正林.數(shù)據(jù)挖掘:R語言實戰(zhàn)[M].北京:電子工業(yè)出版社,2014.