R語言專題,如何使用party包構建決策樹?
下面將在iris資料集上,演示如何使用party包中的函式ctree來建立一棵決策樹。
iris資料集中的Sepal.Length、Sepal.Width、Petal.Length和Petal.Width,都將用來預測鳶尾花的種類。
party包中的函式ctree用來建立決策樹,函式predict用來對新資料進行預測。
建模之前,將iris資料集劃分為兩個子集:其中70%的資料用於訓練,剩下的30%做測試,為了獲得可重現的結果,隨機種子設定為固定值。
str(iris)
set.seed(1234)
ind <- sample(2, nrow(iris), replace=TRUE, prob=c(0.7, 0.3))
trainData <- iris[ind==1,]
testData <- iris[ind==2,]
下面先載入party包,並建立一棵決策樹,然後檢視預測結果。
函式ctree用於控制決策樹訓練的幾個引數是,minSplit、MinBusket、Maxsurrogate和MaxDepth。
決策樹,使用這幾個引數的預設設定來建立一棵決策樹。
程式碼中,myFormula指定了Species為目標變數,其餘的所有變數為自變數。
library(party)
myFormula <- Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width
iris_ctree <- ctree(myFormula, data=trainData)
# check the prediction
table(predict(iris_ctree), trainData$Species)
再輸出規則並繪製已經構建好的決策樹,並檢視
print(iris_ctree)
plot(iris_ctree)
決策樹圖
圖中,每一個葉子節點的條形圖,顯示了一個例項被劃分到某個種類的概率
簡化決策樹
plot(iris_ctree, type="simple")
圖中表現為葉子節點中的“y”。
例如,節點2中的標記“n=40,y=(1,0,0)”,表明該節點包含40個訓練例項,並且所有例項都屬於“setosa”這一種類。
測試決策樹
使用測試資料對構建好的決策樹進行測試。
# predict on test data
testPred <- predict(iris_ctree, newdata = testData)
table(testPred, testData$Species)
決策樹演算法存在的問題
ctree目前版本不能很好地處理缺失值,因此含有缺失值的例項有時會被劃分到左子樹中,有時會被劃分到右子樹中,這是由替代規則決定的。
另外還存在一個問題,如果訓練集中的一個變數在使用函式ctree構建決策樹後被剔除,那麼在對測試集進行預測時也必須包含該變數,否則呼叫函式predict會失敗。
此外,如果測試集與訓練集的分類變數水平值不同,對測試集的預測也會失敗。
解決方法
解決此類問題的方法是,使用訓練集構建了一棵決策樹後,再利用第一棵決策樹中包含的所有變數重新呼叫ctree建立一棵新的決策樹,並根據測試集中分類變數的水平值顯式地設定訓練資料。
iris資料集中的Sepal.Length、Sepal.Width、Petal.Length和Petal.Width,都將用來預測鳶尾花的種類。
party包中的函式ctree用來建立決策樹,函式predict用來對新資料進行預測。
建模之前,將iris資料集劃分為兩個子集:其中70%的資料用於訓練,剩下的30%做測試,為了獲得可重現的結果,隨機種子設定為固定值。
str(iris)
set.seed(1234)
ind <- sample(2, nrow(iris), replace=TRUE, prob=c(0.7, 0.3))
trainData <- iris[ind==1,]
testData <- iris[ind==2,]
下面先載入party包,並建立一棵決策樹,然後檢視預測結果。
函式ctree用於控制決策樹訓練的幾個引數是,minSplit、MinBusket、Maxsurrogate和MaxDepth。
決策樹,使用這幾個引數的預設設定來建立一棵決策樹。
程式碼中,myFormula指定了Species為目標變數,其餘的所有變數為自變數。
library(party)
myFormula <- Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width
iris_ctree <- ctree(myFormula, data=trainData)
# check the prediction
table(predict(iris_ctree), trainData$Species)
再輸出規則並繪製已經構建好的決策樹,並檢視
print(iris_ctree)
plot(iris_ctree)
決策樹圖
圖中,每一個葉子節點的條形圖,顯示了一個例項被劃分到某個種類的概率
簡化決策樹
plot(iris_ctree, type="simple")
圖中表現為葉子節點中的“y”。
例如,節點2中的標記“n=40,y=(1,0,0)”,表明該節點包含40個訓練例項,並且所有例項都屬於“setosa”這一種類。
測試決策樹
使用測試資料對構建好的決策樹進行測試。
# predict on test data
testPred <- predict(iris_ctree, newdata = testData)
table(testPred, testData$Species)
決策樹演算法存在的問題
ctree目前版本不能很好地處理缺失值,因此含有缺失值的例項有時會被劃分到左子樹中,有時會被劃分到右子樹中,這是由替代規則決定的。
另外還存在一個問題,如果訓練集中的一個變數在使用函式ctree構建決策樹後被剔除,那麼在對測試集進行預測時也必須包含該變數,否則呼叫函式predict會失敗。
此外,如果測試集與訓練集的分類變數水平值不同,對測試集的預測也會失敗。
解決方法
解決此類問題的方法是,使用訓練集構建了一棵決策樹後,再利用第一棵決策樹中包含的所有變數重新呼叫ctree建立一棵新的決策樹,並根據測試集中分類變數的水平值顯式地設定訓練資料。
相關文章
- 02決策樹-初識與構建
- R語言:畫樹圖R語言
- R 語言使用
- R語言中使用線性模型、迴歸決策樹自動組合特徵因子水平R語言模型特徵
- 06、使用Gradle構建的專案如何打jar包和war包GradleJAR
- C語言結構體專題C語言結構體
- 如何構建設計語言系統
- 決策樹
- 如何在 Ubuntu 上安裝和使用 R 語言Ubuntu
- 機器學習之使用sklearn構造決策樹模型機器學習模型
- R語言kohonen包主要函式介紹R語言函式
- R語言構建層次分析模型不看一下嗎~R語言模型
- r語言R語言
- 決策樹模型(3)決策樹的生成與剪枝模型
- 【R語言入門】R語言環境搭建R語言
- 決策樹示例
- 二叉樹的構建以及遍歷(Java語言描述)二叉樹Java
- 使用R語言分析微信好友R語言
- 基於Java語言構建區塊鏈(五)—— 地址(錢包)Java區塊鏈
- 如何構建 RPM 包
- windows10語言包無法使用怎麼辦_windows10語言包不能使用解決方法Windows
- 使用distillery 構建專業的 phoenix 專案軟體包
- 如何使用Webpack工具構建專案Web
- 如何使用Docker構建前端專案Docker前端
- 4. 決策樹
- Decision tree——決策樹
- 決策樹(Decision Tree)
- 遊戲AI之決策結構—行為樹遊戲AI
- Python機器學習:決策樹001什麼是決策樹Python機器學習
- Go語言ORM包:使用worm構造查詢條件GoWorm
- 大語言模型LLM如何與人類共同做出戰略決策?模型
- 基於R語言的raster包讀取遙感影像R語言AST
- 分類——決策樹模型模型
- 決策樹演算法演算法
- ML《決策樹(三)CART》
- 如何組織構建多檔案 C 語言程式(二)
- 如何組織構建多檔案 C 語言程式(一)
- 使用 SVM 和決策樹進行整合學習
- 客戶決策 | Go語言設計模式實戰Go設計模式