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


    数据准备

    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个点的概要进行打分,通常需要存储所有的原始训练数据,因此其真正地记住了训练数据。
    • 朴素贝叶斯模型通过中间特征值记住了部分训练数据。
  • 相关阅读:
    详细的描述一个测试活动完整的过程
    黑盒测试的测试用例常见设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。
    测试计划工作的目的是什么?测试计划文档的内容应该包括什么?其中哪些是最重要的?
    redo log 有什么作用?
    Spring的简介和优点?
    java的语法基础(二)
    相对于Statement,PreparedStatement的优点是什么?
    MyBatis 的好处是什么?
    python中字符串的编码和解码
    相对于Statement,PreparedStatement的优点是什么?
  • 原文地址:https://www.cnblogs.com/ting65536/p/16245732.html
Copyright © 2020-2023  润新知