[英]Possibly overfitted classification tree but with stable prediction error
我對rpart和過度擬合有疑問。 我的目標只是在預測上做得好。 我的數據集很大,幾乎是20000點。 使用約2.5%的點作為訓練,我得到約50%的預測誤差。 但是使用97.5%的數據作為訓練,我得到了大約30%。 由於我在訓練中使用了大量數據,因此我認為存在過度擬合的風險。
我使用隨機訓練/測試數據+修剪樹運行了1000次,如果我正確理解它的話,這是一種交叉驗證,並且我得到的結果非常穩定(相同的預測誤差和變量的重要性)。
即使我已經運行1000次並且預測誤差是穩定的,過度擬合仍然會是一個問題嗎?
我還對我的解釋變量之間的相關性有疑問。 這在CART中是否會成為問題(與回歸一樣)? 在回歸中,我可能會使用套索嘗試修正相關性。 如何修復與分類樹的相關性?
當我繪制cptree時,我得到此圖:
這是我正在運行的代碼(我已經用不同的隨機分割重復了1000次)。
set.seed(1) # For reproducability
train_frac = 0.975
n = dim(beijing_data)[1]
# Split into training and testing data
ii = sample(seq(1,dim(beijing_data)[1]),n*train_frac)
data_train = beijing_data[ii,]
data_test = beijing_data[-ii,]
fit = rpart(as.factor(PM_Dongsi_levels)~DEWP+HUMI+PRES+TEMP+Iws+
precipitation+Iprec+wind_dir+tod+pom+weekend+month+
season+year+day,
data = data_train, minsplit = 0, cp = 0)
plotcp(fit)
# Find the split with minimum CP and prune the tree
cp_fit = fit$cptable[which.min(fit$cptable[,"xerror"]),"CP"]
pfit = prune(fit, cp = cp_fit)
pp <- predict(pfit, newdata = data_test, type = "class")
err = sum(data_test[,"PM_Dongsi_levels"] != pp)/length(pp)
print(err)
鏈接到beijing_data(作為RData文件,以便您可以重現我的示例) https://www.dropbox.com/s/6t3lcj7f7bqfjnt/beijing_data.RData?dl=0
這個問題非常復雜,很難全面回答。 我將嘗試提供一些見識和參考,以供進一步閱讀。
對於基於樹的方法,相關特征不會像使用超平面作為分類邊界的模型那樣嚴重。 當有多個相關特征時,樹將只選擇一個,其余的將被忽略。 但是,相關的特征通常會模糊這種模型的解釋性,蒙版交互作用等。 基於樹的模型也可以從此類變量的刪除中受益,因為它們將不得不搜索較小的空間。 這是樹木上的體面資源。 還要檢查這些視頻1 , 2和3和ISLR書。
基於一棵樹的模型的性能往往不如基於超平面的方法。 因此,如果您主要對預測質量感興趣,則應基於一堆樹探索模型,例如裝袋模型和增強模型。 R中的套袋和增強的流行實現是randomForest和xgboost 。 兩者都幾乎沒有經驗就可以利用,並且可以帶來良好的預測。 這是有關如何使用流行的R機器學習庫插入符號來調整隨機森林的資源。 另一個資源是R mlr庫,它為與ML相關的許多重要事物提供了出色的包裝,例如, 這是一篇有關基於模型的xgboost優化的簡短博客文章 。
在您的情況下,我會使用
z <- caret::createDataPartition(data$y, p = 0.6, list = FALSE)
train <- data[z,]
test <- data[-z,]
分割數據以訓練和測試集,然后我將重復此過程以p = 0.5
再次分割測試集。
在火車數據上,我將在隨機森林上使用本教程,通過在插入符號和網格搜索中進行5次重復交叉驗證來調整mtry
和ntree
參數(擴展插入符號部分)。
control <- trainControl(method = "repeatedcv", number = 5, repeats = 3)
tunegrid <- expand.grid(.mtry = c(1:15), .ntree = c(200, 500, 700, 1000, 1200, 1500))
等等,如上述鏈接中所述。
最后一點,您需要訓練的數據越多,適合的可能性就越小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.