1. 程式人生 > 其它 >【資料科學原理與實踐】基本建模方法

【資料科學原理與實踐】基本建模方法

資料準備

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個點的概要進行打分,通常需要儲存所有的原始訓練資料,因此其真正地記住了訓練資料。
  • 樸素貝葉斯模型通過中間特徵值記住了部分訓練資料。