在總結決策樹之前,先總結壹下特征的生成和選擇,因為決策樹是壹個嵌入式的特征選擇過程,它的特征選擇和算法是集成的,不需要額外的特征選擇。
首先,特征生成:
特征生成是指收集數據時原始數據的數據特征,這些特征是由收集的數據確定的(實際上是產品定型時需要收集的數據特征)。當然,在數據預處理中,也可以在此基礎上構建壹些新的數據特征。這些特征越多越好,表明妳已經全面地考慮了這個問題,哪些變量是有用的或無用的,這應該由下壹個特征選擇來決定。
第二,特征選擇
特征選擇是指在原始數據特征的基礎上,去除不太重要的特征變量,過濾掉有用的特征變量。這裏更困難的是弄清楚什麽特征更重要。這個需要具體問題具體分析。有些變量的選擇可以直觀地看到,但這種直覺不壹定是正確的。對於常用的特征選擇方法,主要有:過濾型、封裝型和嵌入式。
篩選類型:表示可以根據統計量的大小選擇特征變量,如相關系數、P值、R值等。
打包類型:指從壹個特征集中選擇最優的特征子集。具體考慮:使用什麽樣的算法進行選擇?選擇的最佳標準是什麽?
常用的算法是逐步回歸,包括向前搜索、向後刪除和雙向搜索。
向前搜索:選擇壹個能使模型壹次預測或分類最好的特征變量,進來後不要退出,直到模型改進效果不再明顯;
向後刪除:指從特征集中壹次刪除壹個特征變量可以使模型預測或分類效果最佳,退出後直到模型改進效果不再明顯時才進來;
雙向搜索:是指壹次刪除壹個特征變量或增加壹個特征變量可以使模型預測或分類效果最佳,退出的人不進來,進來的人直到模型改進效果不再明顯時才退出;
這裏,我想提壹下選擇特征變量的幾個標準:P值、R值、AIC(越小越好)、BIC(越小越好)和熵(越小越好)。
嵌入式:這應該主要是像決策樹這樣的情況,其中特征變量是在內部選擇的。
第三,決策樹
決策的幾個關鍵點:1,如何決策?(即樹如何分枝)-熵和信息增益-這其中包含的是特征的選擇。哪個特征變量包含大量信息被排在第壹位,最後壹棵樹的深度決定了特征變量的數量。
當然,不同的算法使用不同的衡量標準,包括信息增益率和基尼雜質系數。
2.如何修剪?-壹般來說,它們是事後修剪的。
3.連續變量如何離散化?-閾值的選擇
熵:指信息混合的程度(混亂程度)。0-1的熵越大,集合中混合的信息越多,這意味著分叉效果不好或有許多不同種類的信息混合在壹起。
信息增益:熵的減少越大越好。
決策樹模型的特點:模型易於解釋;存儲空間小,以樹的形式存儲。決策樹是壹種弱分類器,不能完全分類。需要通過多數投票來組合多個弱分類器。
第四,R包實現了決策樹
圖書館(部分)
庫(rpart.plot)
## rpart.control對樹進行壹些設置。
## xval為10倍交叉驗證。
## minsplit是分支節點的最小數量,這意味著大於或等於20,則該節點將繼續分區,否則將停止。
## minbucket:葉節點的最小樣本數
## maxdepth:樹的深度
## cp稱為復雜度參數,是指某壹點的復雜度,以及每壹步拆分必須提高模型擬合優度的程度。
ct & lt-rpart . control(xval = 10,minsplit=20,cp=0.1)
##駝背是rpart包附帶的數據集。
## na.action:處理缺失數據的默認方法是刪除變量缺失的觀測值,保留自變量缺失的觀測值。
##方法:為樹的結束數據類型選擇相應的變量分段方法:
# #連續方法=“ANOVA”,離散方法=“Class”,計數方法=“Poisson”,生存分析方法=“exp”。
## parms用於設置三個參數:先驗概率、損失矩陣和分類純度的測量方法(基尼和信息)。
##成本是損失矩陣。修剪時,將葉節點的加權誤差與父節點的誤差進行比較。在考慮損失矩陣時,將“縮減-誤差”調整為“縮減-損失”。
數據(“駝背”)
fit & lt- rpart(駝背~年齡+數字+開始,data =駝背,method =“class“,control=ct,parms = list(prior = c(0.65,0.35),split =“information“);
# #繪圖有兩種方法。
# #第壹個:
par(m flow = c(1,3));情節(契合);文本(fit,use.n=T,all=T,cex=0.9)
# #其次,這個會更漂亮:
rpart . plot(fit,branch=1,branch.type=2,type=1,extra=102,
shadow.col=“灰色“,box.col=“綠色“,
border . col =“blue“,split . col =“red“,
Split.cex = 1.2,main =“駝背決策樹“);
## rpart包提供了復雜度損失修剪的修剪方法,printcp會告訴每壹層,cp是什麽以及平均相對誤差。
# #交叉驗證的估計誤差(列“xerror”)和標準誤差(列“xstd”),平均相對誤差= xerror xstd。
print CP(fit)
# #通過上述分析確定cp的值。
# #調用CP(復雜度參數)和xerror的相關圖。壹種方法是找出最小x誤差點。
#,樹的大小由CP值決定。另壹種方法是使用1SE的方法找到xerror+SE的最小值對應的CP值。
plotcp(fit)
# #通過以下方法進行修剪:
# # prune(fit,cp= fit$cptable,predict(a,iris)$ class)
#計算錯誤率
E0 & lt-(總和(z0)-總和(診斷(z0))/總和(z0)
柱狀圖(1美元的重要性)
b & lt-error vol(a,iris)#計算整個種群的誤差演化。
plot(b $ error,type =“l“,main =“AdaBoost誤差與樹的數量“)#繪制誤差演變。
a & lt-裝袋(物種~)。數據=虹膜)
z0 & lt-table(iris,predict(a,iris)$ class)
#計算錯誤率
E0 & lt-(總和(z0)-總和(診斷(z0))/總和(z0)
柱狀圖(1美元的重要性)
b & lt-error vol(a,iris)#計算整個種群的誤差演化。
plot(b $ error,type =“l“,main =“AdaBoost誤差與樹的數量“)#繪制誤差演變。
#5折疊交叉驗證
Set . seed(1044)#設置隨機種子。
samp = c(sample(1:50,25),sample(51:100,25),sample(101:150,25)#表示隨機。
A =助推(類別~)。,data = iris,predict(a,iris,predict(a,iris【-samp,】)$ class)#測試集結果
E0 & lt-(總和(z0)-總和(診斷(z0))/總和(z0)
e 1 & lt;-(sum(z0)-sum(diag(z0))/sum(z 1)
A =裝袋(類別~)。,data = iris,predict(a,iris,predict(a,iris【-samp,】)$ class)#測試集結果
E0 & lt-(總和(z0)-總和(診斷(z0))/總和(z0)
e 1 & lt;-(sum(z0)-sum(diag(z0))/sum(z 1)
R-packet實現隨機森林;
#隨機森林規則
圖書館(隨機森林)
圖書館(外國)
數據(虹膜)
#采樣數據
ind & lt-sample(2,nrow(iris),replace = TRUE,prob = c(0.7,0.3))
培訓& lt-iris【ind = = 1,】
測試& lt-iris【ind = = 2,】
#培訓數據
rf & lt- randomForest(物種~)。,data=traning,ntree=100,proximity=TRUE)
#預測
表(預測(rf),訓練$物種)
表(預測(射頻,測試),測試$種類)
#檢查預測的效果
打印(射頻)
繪圖(射頻)
#查看重要性
重要性(射頻)
方差圖(射頻)