数据挖掘-二项逻辑斯蒂回归模型算法的R实现

本文介绍了使用R语言实现二项逻辑斯蒂回归模型的梯度下降法和牛顿法。通过S-折交叉验证,检验了两种方法在不同概率精度下的预测效果。在概率精度0.9、0.1时,两种方法预测准确率均为100%;而在概率精度0.9999、0.1时,梯度下降法预测准确率降低到50%,牛顿法则保持在95%以上。实验结果显示牛顿法在高精度下仍能保持较高预测准确率。
摘要由CSDN通过智能技术生成

本次为学生时期所写的实验报告,代码程序为课堂学习和自学,对网络程序有所参考,如有雷同,望指出出处,谢谢!

基础知识来自教材:李航的《统计学习方法》

本人小白,仍在不断学习中,有错误的地方恳请大佬指出,谢谢!

本次实验将分别采用梯度下降法和牛顿法进行二项逻辑斯蒂回归模型参数估计

一、代码实现(R语言)

1.梯度下降法

#预备代码:
#计算似然函数:对i求和( yi*(w^T*x)-log(1+exp(w^T*x)) )
likelihood_fuc<-function(y,X,w){
  N=nrow(X)
  save=rep(NA,N)
  for (i in 1:N) {
    save[i]=y[i]*t(w)%*%X[i,]-log(1+exp(t(w)%*%X[i,]))
  }
  sum=sum(save)
  sum
}

#梯度下降法
my_gradiant_descent<-function(X,y,w,ddmax,limit,lambda){  
                                             #X为n*p+1矩阵(n次观测,p个特征,最后一列全为1)
                                             #y为n维列向量
                                             #w输入初值w0(w为p+1维向量)
                                             #ddmax为最大迭代次数
                                             #limit为给定阈值
                                             #lambda为一系列步长的预设值    
  
  N=dim(X)[1]    #N为样本数
  pai=rep(NA,N) #π(x)为n维列向量,记录每个给定xi(xi为p维向量)下y=1的概率

  i=1
  while (i<=ddmax){
    
    #给定x、w时y=1的概率π(x)
pai=t(exp(t(w)%*%t(X))/(1+exp(t(w)%*%t(X)))) #pai为n×1的列向量
    
    #计算此时梯度X^T*(π-y)
    grad=t(X)%*%(pai-y)
    
    grad_norm=sqrt(sum(grad^2)) #梯度的模长
    
    #迭代的判断条件及其处理
    if(grad_norm>=limit){
      

      #选取最适宜步长(寻找给定w下使似然函数最大的步长)
      result=rep(NA,length(lambda))
      for (k in 1:length(lambda)) {
        result[k]=likelihood_fuc(y,X,w-lambda[k]*grad)
      }
      lambdabest=lambda[which.max(result)]
      
      #更新w
      w=w-lambdabest*grad
      
      #进入下一次迭代
      i=i+1
      
    }else{
      break    #若不满足阈值要求,则退出循环
    }
  }
  w
}

2.牛顿法

my_Newton_method<-function(X,y,w,ddmax,limit){  
                                             #X为n*p+1矩阵(n次观测,p个特征,最后一列全为1)
                                             #y为n维列向量
                                             #w输入初值w0(w为p+1维向量)
                                             #ddmax为最大迭代次数
                                             #limit为给定阈值
  
  N=dim(X)[1]  #N为样本数
  pai=rep(NA,N)        
#π(x)为n维列向量,记录每个给定xi(xi为p维向量)下y=1的概率
  D=matrix(0,ncol=N,nrow = N)    #D为n×n的空矩阵,用于后续海塞矩阵的便捷计算 

  i=1
  while (i<=ddmax){
    
    #给定x、w时y=1的概率π(x)
    f
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值