
總結(jié)決策樹(shù)之前先總結(jié)一下特征的生成和選擇,因?yàn)?a href='/map/jueceshu/' style='color:#000;font-size:inherit;'>決策樹(shù)就是一種內(nèi)嵌型的特征選擇過(guò)程,它的特征選擇和算法是融合在一起的,不需要額外的特征選擇。
一、特征生成:
特征生成是指在收集數(shù)據(jù)之時(shí)原始數(shù)據(jù)就具有的數(shù)據(jù)特征,這些數(shù)據(jù)特征由收集的數(shù)據(jù)決定(其實(shí)也就是在產(chǎn)品定型時(shí)設(shè)定的需要收集的數(shù)據(jù)特征),當(dāng)然,在數(shù)據(jù)預(yù)處理時(shí),也可以在此基礎(chǔ)上構(gòu)造一些新的數(shù)據(jù)特征,這些特征越多越好,表示你考慮問(wèn)題比較周全,具體那些變量有用或沒(méi)用,這要交給下一步特征選擇來(lái)決定。
二、特征選擇
特征選擇是指在原有數(shù)據(jù)特征的基礎(chǔ)上,去除重要性比較低的特征變量,過(guò)濾出有用的特征變量。這里比較困難的是搞清楚什么樣的特征比較重要?這需要根據(jù)具體的問(wèn)題具體分析,有些變量的選擇可以很直觀的看出來(lái),但這種直覺(jué)也不一定正確。對(duì)于常用特征選擇方法主要有:過(guò)濾型、包裝型、內(nèi)嵌型。
過(guò)濾型:是指你可以根據(jù)某個(gè)統(tǒng)計(jì)量的大小排序來(lái)選擇特征變量,如相關(guān)系數(shù)、p值、R值等
包裝型:是指在一個(gè)特征集合中選取最優(yōu)的特征子集。具體需要考慮:用什么樣的算法來(lái)選?。窟x取的最優(yōu)的標(biāo)準(zhǔn)是什么?
常用的算法是分步回歸包括向前搜索、向后刪除、雙向搜索
向前搜索:每次選取一個(gè)能使模型預(yù)測(cè)或分類效果最好的特征變量進(jìn)來(lái),進(jìn)來(lái)后不退出,直到模型改善效果不再明顯;
向后刪除:是指每次從特征全集中每次刪除一個(gè)特征變量能使模型預(yù)測(cè)或分類效果最好,退出后不進(jìn)來(lái),直到模型改善效果不再明顯;
雙向搜索:是指每次每次刪除一個(gè)特征變量或加入一個(gè)特征變量能使模型預(yù)測(cè)或分類效果最好,退出的不進(jìn)來(lái),進(jìn)來(lái)的不退出,直到模型改善效果不再明顯;
這里再提一下特征變量選擇的幾個(gè)標(biāo)準(zhǔn):p值、R值、AIC(越小效果越好)、BIC(越小效果越好)、熵(越小效果越好)
內(nèi)嵌型:這里應(yīng)該主要就是像決策樹(shù)這樣的情況,算法內(nèi)部完成特征變量的選取。
三、決策樹(shù)
決策的幾個(gè)要點(diǎn):1、如何決策?(也就是如何樹(shù)如何分叉)------熵和信息增益---這里面包含的就是特征的選擇?哪個(gè)特征變量包含的信息量大,就排在前面,至于最后樹(shù)的深度就決定特征變量的個(gè)數(shù)。
當(dāng)然不同的算法使用的衡量的標(biāo)準(zhǔn)不同,還有:信息增益比、基尼不純系數(shù)
2、如何剪枝?-----一般是事后剪枝
3、連續(xù)性變量如何離散化?-----閾值的選擇
熵:是指信息的混合程度(混亂程度),熵【0-1】越大表示該集合中混合的信息越多,也就表明這次的分叉效果不好還是有很多不同類的信息混在一起
信息增益:熵值的減少量,越大越好
決策樹(shù)模型特點(diǎn):模型易于解釋;存儲(chǔ)空間較小,以樹(shù)的形式存儲(chǔ),決策樹(shù)是一個(gè)弱分類器,不能完全分類,需要把多個(gè)弱分類器通過(guò)多數(shù)投票法組合在一起。
四、R包實(shí)現(xiàn)決策樹(shù)
library(rpart)
library(rpart.plot)
## rpart.control對(duì)樹(shù)進(jìn)行一些設(shè)置
## xval是10折交叉驗(yàn)證
## minsplit是最小分支節(jié)點(diǎn)數(shù),這里指大于等于20,那么該節(jié)點(diǎn)會(huì)繼續(xù)分劃下去,否則停止
## minbucket:葉子節(jié)點(diǎn)最小樣本數(shù)
## maxdepth:樹(shù)的深度
## cp全稱為complexity parameter,指某個(gè)點(diǎn)的復(fù)雜度,對(duì)每一步拆分,模型的擬合優(yōu)度必須提高的程度
ct <- rpart.control(xval=10, minsplit=20, cp=0.1)
## kyphosis是rpart這個(gè)包自帶的數(shù)據(jù)集
## na.action:缺失數(shù)據(jù)的處理辦法,默認(rèn)為刪除因變量缺失的觀測(cè)而保留自變量缺失的觀測(cè)。
## method:樹(shù)的末端數(shù)據(jù)類型選擇相應(yīng)的變量分割方法:
## 連續(xù)性method=“anova”,離散型method=“class”,計(jì)數(shù)型method=“poisson”,生存分析型method=“exp”
## parms用來(lái)設(shè)置三個(gè)參數(shù):先驗(yàn)概率、損失矩陣、分類純度的度量方法(gini和information)
## cost是損失矩陣,在剪枝的時(shí)候,葉子節(jié)點(diǎn)的加權(quán)誤差與父節(jié)點(diǎn)的誤差進(jìn)行比較,考慮損失矩陣的時(shí)候,從將“減少-誤差”調(diào)整為“減少-損失”
data("Kyphosis")
fit <- rpart(Kyphosis~Age + Number + Start,data=kyphosis,
method="class",control=ct,parms = list(prior = c(0.65,0.35), split =
"information"));
## 作圖有2種方法
## 第一種:
par(mfrow=c(1,3));plot(fit); text(fit,use.n=T,all=T,cex=0.9)
## 第二種,這種會(huì)更漂亮一些:
rpart.plot(fit, branch=1, branch.type=2, type=1, extra=102,
shadow.col="gray", box.col="green",
border.col="blue", split.col="red",
split.cex=1.2, main="Kyphosis決策樹(shù)");
## rpart包提供了復(fù)雜度損失修剪的修剪方法,printcp會(huì)告訴分裂到每一層,cp是多少,平均相對(duì)誤差是多少
## 交叉驗(yàn)證的估計(jì)誤差(“xerror”列),以及標(biāo)準(zhǔn)誤差(“xstd”列),平均相對(duì)誤差=xerror±xstd
printcp(fit)
## 通過(guò)上面的分析來(lái)確定cp的值
##調(diào)用CP(complexity parameter)與xerror的相關(guān)圖,一種方法是尋找最小xerror點(diǎn)所對(duì)應(yīng)
#的CP值,并由此CP值決定樹(shù)的大小,另一種方法是利用1SE方法,尋找xerror+SE的最小點(diǎn)對(duì)應(yīng)的CP值。
plotcp(fit)
##利用以下方法進(jìn)行修剪:
## prune(fit, cp= fit$cptable[which.min(fit$cptable[,"xerror"]),"CP"])
fit2 <- prune(fit, cp=0.01)
#利用模型預(yù)測(cè)
ndata=data.frame(...)
predict(fit,newdata=ndata)
#案例
str(iris)
set.seed(1234)#設(shè)置隨機(jī)數(shù)種子--使每次運(yùn)行時(shí)產(chǎn)生的一組隨機(jī)數(shù)相同,便于結(jié)果的重現(xiàn)
#抽樣:從iris數(shù)據(jù)集中隨機(jī)抽70%定義為訓(xùn)練數(shù)據(jù)集,30%為測(cè)試數(shù)據(jù)集(常用)
#這里是對(duì)行抽樣,ind是一個(gè)只含1和2的向量
ind <- sample(2, nrow(iris), replace=TRUE, prob=c(0.7, 0.3))
trainData <- iris[ind==1,]
testData <- iris[ind==2,]
f<-Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width
#訓(xùn)練數(shù)據(jù)
fit<-rpart(f,trainData)
#預(yù)測(cè)
re<-predict(fit,testData)
#******************或者用其他包********************
library(party)
#建立決策樹(shù)模型預(yù)測(cè)花的種類
myFormula <- Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width
iris_ctree <- ctree(myFormula, data=trainData)
# 查看預(yù)測(cè)的結(jié)果
z<-table(predict(iris_ctree), trainData$Species)
#可以根據(jù)以上列聯(lián)表求出預(yù)測(cè)的正確率---評(píng)估模型
#計(jì)算準(zhǔn)確度
q<-sum(diag(z))/sum(z)
五、機(jī)器集成與隨機(jī)森林法則
前面說(shuō)過(guò),決策樹(shù)的一個(gè)特點(diǎn)是:弱分類器,分類不完全,需要利用集成投票的方式來(lái)增加精確度和穩(wěn)健性。
機(jī)器集成算法:對(duì)于數(shù)據(jù)集訓(xùn)練多個(gè)模型,對(duì)于分類問(wèn)題,可以采用投票的方法,選擇票數(shù)最多的類別作為最終的類別,而對(duì)于回歸問(wèn)題,可以采用取均值的方法,取得的均值作為最終的結(jié)果。主要的集成算法有bagging和adaboost算法。
隨機(jī)森林:隨機(jī)森林就是利用機(jī)器集成多個(gè)決策樹(shù),主要有兩個(gè)參數(shù),一個(gè)是決策樹(shù)的個(gè)數(shù),一個(gè)是每棵樹(shù)的特征變量個(gè)數(shù)。
隨機(jī)森林特點(diǎn):精確度高、穩(wěn)健性好,但可解釋性差。(可以知道各個(gè)變量的重要性)
R包實(shí)現(xiàn)機(jī)器集成算法:
#adabag包均有函數(shù)實(shí)現(xiàn)bagging和adaboost的分類建模
#利用全部數(shù)據(jù)建模
library(adabag)
a<-boosting(Species~.,data=iris)
z0<-table(iris[,5],predict(a,iris)$class)
#計(jì)算誤差率
E0<-(sum(z0)-sum(diag(z0)))/sum(z0)
barplot(a$importance)
b<-errorevol(a,iris)#計(jì)算全體的誤差演變
plot(b$error,type="l",main="AdaBoost error vs number of trees") #對(duì)誤差演變進(jìn)行畫(huà)圖
a<-bagging(Species~.,data=iris)
z0<-table(iris[,5],predict(a,iris)$class)
#計(jì)算誤差率
E0<-(sum(z0)-sum(diag(z0)))/sum(z0)
barplot(a$importance)
b<-errorevol(a,iris)#計(jì)算全體的誤差演變
plot(b$error,type="l",main="AdaBoost error vs number of trees") #對(duì)誤差演變進(jìn)行畫(huà)圖
#5折交叉驗(yàn)證
set.seed(1044) #設(shè)定隨機(jī)種子
samp=c(sample(1:50,25),sample(51:100,25),sample(101:150,25)) #進(jìn)行隨機(jī)抽樣
a=boosting(Species~.,data=iris[samp,]) #利用訓(xùn)練集建立adaboost分類模
z0<-table(iris[samp,5],predict(a,iris[samp,])$class)#訓(xùn)練集結(jié)果
z1<-table(iris[-samp,5],predict(a,iris[-samp,])$class)#測(cè)試集結(jié)果
E0<-(sum(z0)-sum(diag(z0)))/sum(z0)
E1<-(sum(z0)-sum(diag(z0)))/sum(z1)
a=bagging(Species~.,data=iris[samp,]) #利用訓(xùn)練集建立adaboost分類模
z0<-table(iris[samp,5],predict(a,iris[samp,])$class)#訓(xùn)練集結(jié)果
z1<-table(iris[-samp,5],predict(a,iris[-samp,])$class)#測(cè)試集結(jié)果
E0<-(sum(z0)-sum(diag(z0)))/sum(z0)
E1<-(sum(z0)-sum(diag(z0)))/sum(z1)
R包實(shí)現(xiàn)隨機(jī)森林:
#隨機(jī)森林法則
library(randomForest)
library(foreign)
data("iris")
#抽樣數(shù)據(jù)
ind<-sample(2,nrow(iris),replace = TRUE,prob=c(0.7,0.3))
traning<-iris[ind==1,]
testing<-iris[ind==2,]
#訓(xùn)練數(shù)據(jù)
rf <- randomForest(Species ~ ., data=traning, ntree=100, proximity=TRUE)
#預(yù)測(cè)
table(predict(rf),traning$Species)
table(predict(rf,testing),testing$Species)
#查看預(yù)測(cè)的效果
print(rf)
plot(rf)
#查看重要性
importance(rf)
varImpPlot(rf)
數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
LSTM 模型輸入長(zhǎng)度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長(zhǎng)序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠(chéng)摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡(jiǎn)稱 BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測(cè)分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢(shì)預(yù)判? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,預(yù)測(cè)分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭(zhēng)搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢(shì)性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢(shì)性檢驗(yàn)如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢(shì)與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢(shì)變化以及識(shí)別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國(guó)內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對(duì)策略? 長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場(chǎng)調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場(chǎng)調(diào)研是企業(yè)洞察市場(chǎng)動(dòng)態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場(chǎng)調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書(shū)考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動(dòng)力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動(dòng)力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開(kāi)啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價(jià)值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03