Robust Locally Weighted Regression 鲁棒局部加权回归 -R实现

鲁棒局部加权回归

算法参考文献:

(1) Robust Locally Weighted Regression and Smoothing Scatterplots (Willism_S.Cleveland)

(2) 数据挖掘中强局部加权回归算法实现 (虞乐,肖基毅)

R实现

#Robust Locally Weighted Regression 鲁棒局部加权回归

# 一元样本值x,y ;待预测样本点xp ;f局部加权窗口大小(一般取1/3~2/3);d局部加权回归阶数;
#time鲁棒局部加权回归次数(一般取2就几乎可以满足收敛);
#step梯度下降法固定步长;error梯度下降法终止误差;maxiter最大迭代次数
RobustLWRegression<-function(x,y,xp,f,d,time,step,error,maxiter){

  m<-nrow(x)
  r<-floor(f*m) #窗口内的样本量
  xl<-abs(x-xp)
  xll<-xl[order(xl)]
  hr<-xll[r]  #h为离xp第r个最近的样本到xp的距离

  #三次权值函数(几乎在所有情况下都能够提供充分平滑)
  xk<-(x-xp)/hr
  w<-ifelse(abs(xk)<1,(1-abs(xk^3))^3,0)

  #d次回归函数
  for(i in 2:d){
    x<-cbind(x,x^i)
  }
  x<-cbind(1,x)
  n<-ncol(x)

  #梯度下降法(固定步长)求局部加权回归的系数
  theta<-matrix(0,n,1) #theta 初始值都设置为0
  iter<-0
  newerror<-1
  while((newerror>error)|(iter<maxiter)){
    iter<-iter+1
    h<-x%*%theta
    des<-t(t(w*(h-y))%*%x)      #局部加权梯度
    new_theta<-theta-step*des   #直接设置固定步长
    newerror<-t(theta-new_theta)%*%(theta-new_theta)
    theta<-new_theta
  }

  #time次鲁棒局部加权回归
  for(i in 1:time){
    e<-y-x%*%theta
    s<-median(e)
    #四次权值函数
    xb<-e/(6*s)
    R_w<-ifelse(abs(xb)<1,(1-xb^2)^2,0)

    #梯度下降法求鲁棒加权局部回归
    R_theta<-matrix(0,n,1) #theta 初始值都设置为0
    R_iter<-0
    R_newerror<-1
    while((R_newerror>error)|(R_iter<maxiter)){
      R_iter<-R_iter+1
      R_h<-x%*%R_theta
      R_des<-t(t(w*R_w*(R_h-y))%*%x)    #鲁棒局部加权梯度
      R_new_theta<-R_theta-step*R_des   #直接设置固定步长
      R_newerror<-t(R_theta-R_new_theta)%*%(R_theta-R_new_theta)
      R_theta<-R_new_theta
    }
    theta<-R_theta
  }

  for(i in 2:d){
     xp<-cbind(xp,xp^i)
  }
  xp<-cbind(1,xp)
  yp<-xp%*%theta
  # costfunction<-t(x%*%theta-y)%*%(x%*%theta-y)
  # result<-list(yp,theta,iter,costfunction)
  # names(result)<-c(‘拟合值‘,‘系数‘,‘迭代次数‘,‘误差‘)
  # result
  yp

}

  

实例比较 线性回归、局部加权线性回归和鲁棒局部加权线性回归:

>
> t(x)
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15]
[1,]   58   59   60   61   62   63   64   65   66    67    68    69    70    71    72
> t(y)
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15]
[1,]  111  115  121  123  131  130  140  136  142   145   147   151   148   151   148
>
> lm(y~x)

Call:
lm(formula = y ~ x)

Coefficients:
(Intercept)            x
    -50.245        2.864  

> yy<--50.245+2.864*x
>
> plot(x,y,col=‘green‘,pch=20,xlim=c(57,73),ylim=c(109,159))
> lines(x,y,col=‘green‘)
> lines(x,yy,col=‘black‘)
>
> g<-apply(x,1,function(xp){LWLRegression(x,y,xp,3,1e-7,100000,stepmethod=F,step=0.00001,alpha=0.25,beta=0.8)})
>
> points(x,g,col=‘blue‘,pch=20)
> lines(x,g,col=‘blue‘)
>
> gg<-apply(x,1,function(xp){RobustLWRegression(x,y,xp,0.6,2,2,0.00000001,1e-7,10000)})
>
> points(x,gg,col=‘red‘,pch=20)
> lines(x,gg,col=‘red‘)

> legend(‘bottomright‘,legend=c(‘散点图‘,‘拟合直线‘,‘局部加权散点图‘,‘鲁棒局部加权散点图‘),lwd=1,col=c(‘green‘,‘black‘,‘blue‘,‘red‘))
>

  

时间: 2024-11-05 18:57:33

Robust Locally Weighted Regression 鲁棒局部加权回归 -R实现的相关文章

Locally Weighted Linear Regression 局部加权线性回归-R实现

线性回归容易出现过拟合或欠拟合的问题. 局部加权线性回归是一种非参数学习方法,在对新样本进行预测时,会根据新的权值,重新训练样本数据得到新的参数值,每一次预测的参数值是不相同的. 权值函数: t用来控制权值的变化速率(建议对于不同的样本,先通过调整t值确定合适的t) 不同t值下的权值函数图像: 局部加权线性回归R实现: #Locally Weighted Linear Regression 局部加权回归(非参数学习方法) ##x为数据矩阵(mxn m:样本数 n:特征数 );y观测值(mx1);

线性回归 Linear regression(4) 局部加权回归

这篇文章将介绍过拟合和欠拟合的概念,并且介绍局部加权回归算法. 过拟合和欠拟合 之前在线性回归中,我们总是将单独的x作为我们的特征,但其实我们可以考虑将,甚至x的更高次作为我们的特征,那么我们通过线性回归得到的就将是一个多次函数了. 我们可以想象当我们只用x作为我们的特征的时候,我们的数据可能实际呈现的样子是一个二次函数的样子,也就是说我们的假设有一定的问题,那么我们求得的最小二乘值将相当的大了.但是如果我们有10组样本,我们选择一个10次方的特征,那么可以想象,最后我们得到的曲线将是一个能经过

局部加权回归(HGL的机器学习笔记3)

局部加权回归(Locally Weighted Regression, LWR) 局部加权回归使一种非参数方法(Non-parametric).在每次预测新样本时会重新训练临近的数据得到新参数值.意思是每次预测数据需要依赖训练训练集,所以每次估计的参数值是不确定的. 局部加权回归优点: 需要预测的数据仅与到训练数据的距离有关,距离越近,关系越大,反之越小: 可以有效避免欠拟合,减小了较远数据的干扰,仅与较近的数据有关. 对于一般训练集: 参数系统为: 局部加权回归原理: 图1 局部加权回归原理

机器学习-局部加权回归

Locally weighted regression,局部加权回归  对于线性回归,问题是选取的特征的个数和什么特征会极大影响fit的效果. 比如下图,是分布使用下面几个模型进行拟合的 :    通常会认为第一个模型underfitting(欠拟合),而第三个模型overfitting(过拟合),第二个模型相对比较好的fit到训练集 所以可以看出,找出一个全局的线性模型去fit整个训练集,是个比较困难的工作,因为选择特征成为一个关键的因素. 局部加权线性回归的思路,就是我不需要去fit整个训练

Stanford大学机器学习公开课(三):局部加权回归、最小二乘的概率解释、逻辑回归、感知器算法

(一)局部加权回归 通常情况下的线性拟合不能很好地预测所有的值,因为它容易导致欠拟合(under fitting).如下图的左图.而多项式拟合能拟合所有数据,但是在预测新样本的时候又会变得很糟糕,因为它导致数据的 过拟合(overfitting),不符合数据真实的模型.如下图的右图. 下面来讲一种非参数学习方法——局部加权回归(LWR).为什么局部加权回归叫做非参数学习方法呢?首先,参数学习方法是这样一种方法:在训练完成所有数据后得到一系列训练参数,然后根据训练参数来预测新样本的值,这时不再依赖

局部加权回归

一种特定的非参数学习算法.也称作Loess. 算法思想: 假设对于一个确定的查询点x,在x处对你的假设h(x)求值. 对于线性回归,步骤如下: 1)       拟合出,使最小 2)       返回 对于局部加权回归,当要处理x时: 1)       检查数据集合,并且只考虑位于x周围的固定区域内的数据点 2)       对这个区域内的点做线性回归,拟合出一条直线 3)       根据这条拟合直线对x的输出,作为算法返回的结果 用数学语言描述即: 1)       拟合出,使最小 2)  

局部加权回归、欠拟合、过拟合 - Andrew Ng机器学习公开课笔记1.3

本文主要讲解局部加权(线性)回归.在讲解局部加权线性回归之前,先讲解两个概念:欠拟合.过拟合,由此引出局部加权线性回归算法. 欠拟合.过拟合 如下图中三个拟合模型.第一个是一个线性模型,对训练数据拟合不够好,损失函数取值较大.如图中第二个模型,如果我们在线性模型上加一个新特征项,拟合结果就会好一些.图中第三个是一个包含5阶多项式的模型,对训练数据几乎完美拟合. 模型一没有很好的拟合训练数据,在训练数据以及在测试数据上都存在较大误差,这种情况称之为欠拟合(underfitting). 模型三对训练

局部加权回归、欠拟合、过拟合-Andrew Ng机器学习公开课笔记1.3

本文主要讲解局部加权(线性)回归.在讲解局部加权线性回归之前,先讲解两个概念:欠拟合.过拟合,由此引出局部加权线性回归算法. 欠拟合.过拟合 如下图中三个拟合模型.第一个是一个线性模型,对训练数据拟合不够好,损失函数取值较大.如图中第二个模型,如果我们在线性模型上加一个新特征项,拟合结果就会好一些.图中第三个是一个包含5阶多项式的模型,对训练数据几乎完美拟合. 模型一没有很好的拟合训练数据,在训练数据以及在测试数据上都存在较大误差,这种情况称之为欠拟合(underfitting). 模型三对训练

欠拟合与过拟合、局部加权回归

PART 1 欠拟合与过拟合的概念 在拟合的时候如果拟合不好就会出现这两种情况 欠拟合:就是拟合结果不够贴近样本数据.如图: 过拟合:因为拟合过于靠近样本点导致无法很好反映出总体的变化趋势 PART 2 局部加权线性回归 概念:简单的说就是在一个小区间内拟合出一条直线,并用结果来预测小区间内的数据 过程如下: 其中权值w(i)定义如下: 从本式中可以看出,若x偏离样本较远(|xi-x|很大),那么对应的权值趋近于0.若x很贴近样本点(|xi-x|很小),那么对应的权值趋近于1