【資料科學原理與實踐】基本建模方法
阿新 • • 發佈:2022-05-08
資料準備
step 1:載入資料
d <- read.table(filename,header=F,sep='\t')//header:要不要表頭
step 2:資料劃分:兩類劃分——訓練集合測試集,通過重複劃分進行驗證/交叉驗證估計過擬合(度量標準:AUC)
set.seed(65536) #設定隨機種子,使復現時出現相同結果 d$rgroup<-runif(dim(d)[[1]]) dTrainAll<-subset(d,rgroup<=0.9) dTest<-subset(d,rgroup>0.9) #將資料集劃分為訓練集和測試集,二者比例9:1 #訓練集分一部分作為驗證集 useForCal<-rbinom(n=dim(dTrainAll)[[1]],size=1,prob=0.1)>0 #採用伯努利取樣劃分訓練集和驗證集 dCal<-subset(dTrainAll,useForCal) dTrain<-subset(dTrainAll,!useForCal)
構建單變數模型
類別型特徵建模:透視表(講一個特徵變數的類別值轉換成一個新的資料列)、列聯表
數值型特徵建模:範圍劃分,使用範圍標籤作為一個新的類別型變數
構建多變數模型
變數選擇
使用決策樹建模
決策樹是一種描述對例項進行分類的樹形結構:由結點有向邊組成。
平均資訊量=期望
H(X)=-sum(p(xi)*log(p(xi)))
類別1 | 類別2 | ... | 類別n | |
---|---|---|---|---|
類別概率 | p(x1) | p(x2) | ... | p(xn) |
資訊量 | -log(p(x1)) | -log(p(x2)) | ... | -log(p(xn)) |
決策樹是分類問題中最常用的模型之一,能夠接受類別型的特徵。決策樹的中間結點是決策步驟,葉子結點是決策結果/類別標籤
如何建立決策樹?
使用封裝程式包構建決策樹,用挑選出來的變數進行建模。
f<-paste(outcome,'>0 ~ ',paste(selVars,collapse='+'),sep='') tmodel<-rpart(f,data=dTrain,control=part.control(cp=0.001,minsplit=1000,minbucket=1000,maxdepth=5)) print(calcAUC(predict(tmodel,newdata=dTrain),dTrain[,outcome])) print(calcAUC(predict(tmodel,newdata=dTest),dTest[,outcome])) print(calcAUC(predict(tmodel,newdata=dCal),dCal[,outcome])) #繪製決策樹 par(cex=0.7) plot(tmodel) text(tmodel)
使用最鄰近法建模
k-近鄰(kNN)方法通過查詢距離目標樣本最接近的k個訓練樣本,然後利用它們的結果均值作為該樣本的得分。
演算法原理:對每個測試樣本x,在訓練集中找到離x最近的K個訓練樣本,根據這K個樣本多類別標籤投票,多數標籤作為x的預測標籤。
KNN的時空代價都很高
演算法流程
- 為判別未知樣本點所屬的類別,應以所有已知類別的例項作為參照
- 選擇引數K,通常不大於20
- 計算待測樣本點與所有已知類別的樣本點之間的距離
- 排序,選擇最近K個已知樣本點
- 對上述K個最近鄰的樣本點類別進行投票,決定待測樣本點所屬的類別
K值選擇:
- 較小的K值,:相當於用鄰域中的訓練例項進行預測
- 學習的近似誤差會減小,只有與輸入例項較近的訓練例項才會對預測結果起作用
- 學習的估計誤差會增大,預測結果會對近鄰的例項點非常敏感,如果鄰近的例項點恰巧是噪聲,預測就會出錯,換句話說,k值的減小就意味著整體模型變得負責,容易發生過擬合。
- 較大的K值:相當於用較大鄰域中的訓練例項及逆行預測
- 可以減少學習的估計誤差
- 學習的近似誤差會增大,這時候與輸入例項較遠的訓練例項也會對預測起作用,使預測發生錯誤,K值增大意味著整體模型變 得更簡單。
library('class')
nK<-200
knnTrain<-dTrain[,selVars]
knnCl<-dTrain[,outcome]==pos
knnPred<-function(df){
knnDecision<-knn(knnTrain,df,knnCl,k=nK,prob=T)
ifelse(knnDecision==TRUE,attributes(knnDecision)&prob,1-(attributes(knnDecision)&prob))
}
print(calcAUC(knnPred(dTrain[,selVars]),dTrain[,outcome]))
print(calcAUC(knnPred(dCal[,selVars]),dCal[,outcome]))
print(calcAUC(knnPred(dTest[,selVars]),dTest[,outcome]))
dCal$kpred<-knnPred(dCal[,selVars])
ggplot(data=dCal)+geom_density(aes(x=kpred,color=as.factor(churn),linetype=as.factor(churn)))
樸素貝葉斯建模
樸素貝葉斯通過記住每個訓練變數與結果變數的相關性,將每個變數的條件概率相乘進行預測。
總結
決策樹、最近鄰和樸素貝葉斯模型簡單儲存了資料概要
- 單變數模型可以認為是對訓練資料的簡單概要。
- 決策樹模型的決策是累計訓練資料子集的概要。
- kNN預測基於訓練資料的k個點的概要進行打分,通常需要儲存所有的原始訓練資料,因此其真正地記住了訓練資料。
- 樸素貝葉斯模型通過中間特徵值記住了部分訓練資料。