【数据科学原理与实践】基本建模方法

数据准备

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个点的概要进行打分,通常需要存储所有的原始训练数据,因此其真正地记住了训练数据。
  • 朴素贝叶斯模型通过中间特征值记住了部分训练数据。
posted @ 2022-05-08 15:24  梅落南山  阅读(301)  评论(0编辑  收藏  举报