Locally Weighted Linear Regression 局部加权线性回归-R实现
局部加权线性回归
【转载时请注明来源】:http://www.cnblogs.com/runner-ljt/
Ljt
作为一个初学者,水平有限,欢迎交流指正。
线性回归容易出现过拟合或欠拟合的问题。
局部加权线性回归是一种非参数学习方法,在对新样本进行预测时,会根据新的权值,重新训练样本数据得到新的参数值,每一次预测的参数值是不相同的。
权值函数:
t用来控制权值的变化速率(建议对于不同的样本,先通过调整t值确定合适的t)
不同t值下的权值函数图像:
局部加权线性回归R实现:
#Locally Weighted Linear Regression 局部加权回归(非参数学习方法) ##x为数据矩阵(mxn m:样本数 n:特征数 );y观测值(mx1);xp为需要预测的样本特征,t权重函数的权值变化速率
#error终止条件,相邻两次搜索结果的幅度;
#step为设定的固定步长;maxiter最大迭代次数,alpha,beta为回溯下降法的参数 LWLRegression<-function(x,y,xp,t,error,maxiter,stepmethod=T,step=0.001,alpha=0.25,beta=0.8)
{
w<-exp(-0.5*(x-xp)^2./t^2) #权重函数,w(i)表示第i个样本点的权重,t控制权重的变化速率
m<-nrow(x)
x<-cbind(matrix(1,m,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) #梯度 #回溯下降法求步长t
if(stepmethod==T){
step=1
new_theta<-theta-step*des
new_h<-x%*%new_theta
costfunction<-t(w*(h-y))%*%(h-y) #(最小二乘损失函数)局部加权线性回归损失函数
new_costfunction<-t(w*(new_h-y))%*%(new_h-y)
#回溯下降法求步长step
while(new_costfunction>costfunction-alpha*step*sum(des*des)){
step<-step*beta
new_theta<-theta-step*des
new_h<-x%*%new_theta
new_costfunction<-t(w*(new_h-y))%*%(new_h-y)
}
newerror<-t(theta-new_theta)%*%(theta-new_theta)
theta<-new_theta
} #直接设置固定步长
if(stepmethod==F){
new_theta<-theta-step*des
newerror<-t(theta-new_theta)%*%(theta-new_theta)
theta<-new_theta
}
} 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
}
运用局部线性加权回归预测每个样本点x对于的y值,连接各预测值后得到一条平滑曲线,反映出y与x之间的非线性关系。
> 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
> t(yy)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15]
[1,] 115.867 118.731 121.595 124.459 127.323 130.187 133.051 135.915 138.779 141.643 144.507 147.371 150.235 153.099 155.963
>
> 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)})
>
> t(g)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
[1,] 116.093 119.0384 122.1318 125.3421 128.6115 131.862 135.009 137.9771 140.7136 143.194 145.4244 147.4373 149.2831 151.018
[,15]
[1,] 152.693
>
> plot(x,y,pch=20,xlim=c(57,73),ylim=c(109,157))
> lines(x,y,col='green')
> lines(x,yy,col='blue')
> points(x,g,pch=21)
> lines(x,g,col='red')
> legend("bottomright",legend=c('散点图','拟合直线','加权散点图'),lwd=1,col=c('green','blue','red'))
>
Locally Weighted Linear Regression 局部加权线性回归-R实现的更多相关文章
- Locally weighted linear regression(局部加权线性回归)
(整理自AndrewNG的课件,转载请注明.整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/) 前面几篇博客主要介绍了线性回归的学习算法,那么它有什么不足的地方么 ...
- 局部加权回归、欠拟合、过拟合(Locally Weighted Linear Regression、Underfitting、Overfitting)
欠拟合.过拟合 如下图中三个拟合模型.第一个是一个线性模型,对训练数据拟合不够好,损失函数取值较大.如图中第二个模型,如果我们在线性模型上加一个新特征项,拟合结果就会好一些.图中第三个是一个包含5阶多 ...
- 局部权重线性回归(Locally weighted linear regression)
在线性回归中,因为对參数个数选择的问题是在问题求解之前已经确定好的,因此參数的个数不能非常好的确定,假设參数个数过少可能拟合度不好,产生欠拟合(underfitting)问题,或者參数过多,使得函数过 ...
- 局部加权线性回归(Locally weighted linear regression)
首先我们来看一个线性回归的问题,在下面的例子中,我们选取不同维度的特征来对我们的数据进行拟合. 对于上面三个图像做如下解释: 选取一个特征,来拟合数据,可以看出来拟合情况并不是很好,有些数据误差还是比 ...
- 线性回归(最小二乘法、批量梯度下降法、随机梯度下降法、局部加权线性回归) C++
We turn next to the task of finding a weight vector w which minimizes the chosen function E(w). Beca ...
- Robust Locally Weighted Regression 鲁棒局部加权回归 -R实现
鲁棒局部加权回归 [转载时请注明来源]:http://www.cnblogs.com/runner-ljt/ Ljt 作为一个初学者,水平有限,欢迎交流指正. 算法参考文献: (1) Robust L ...
- matlab练习程序(局部加权线性回归)
通常我们使用的最小二乘都需要预先设定一个模型,然后通过最小二乘方法解出模型的系数. 而大多数情况是我们是不知道这个模型的,比如这篇博客中z=ax^2+by^2+cxy+dx+ey+f 这样的模型. 局 ...
- 斯坦福CS229机器学习课程笔记 Part1:线性回归 Linear Regression
机器学习三要素 机器学习的三要素为:模型.策略.算法. 模型:就是所要学习的条件概率分布或决策函数.线性回归模型 策略:按照什么样的准则学习或选择最优的模型.最小化均方误差,即所谓的 least-sq ...
- Locally weighted regression algorithm
在此引出另一种模型:Locally weighted regression algorithm(LWLR/LWR),通过名字我们可以推断,这是一种更加关注局部变化的模型.的确如此,在普通的linear ...
随机推荐
- Redis和nosql简介,api调用;Redis数据功能(String类型的数据处理);List数据结构(及Java调用处理);Hash数据结构;Set数据结构功能;sortedSet(有序集合)数
1.Redis和nosql简介,api调用 14.1/ nosql介绍 NoSQL:一类新出现的数据库(not only sql),它的特点: 1. 不支持SQL语法 2. 存储结构跟传统关系型数 ...
- 初识mybatis(二)
上篇博客我们介绍通过Java代码来创建mybatis的配置文件,港真,这种方式看起来有意思实际在开发中用的并不多,mybatis的配置还是以xml配置为主,本文我们就来看看如何通过xml文件来配置my ...
- [多线程] 生产者消费者模型的BOOST实现
说明 如果 使用过程中有BUG 一定要告诉我:在下面留言或者给我邮件(sawpara at 126 dot com) 使用boost::thread库来实现生产者消费者模型中的缓冲区! 仓库内最多可以 ...
- 24 AIDL案例
服务端 MainActivity.java package com.qf.day24_aidl_wordserver; import android.app.Activity; import andr ...
- Nginx - 代理、缓存
Nginx 标签 : nginx 代理 代理服务可简单的分为正向代理和反向代理: 正向代理: 用于代理内部网络对Internet的连接请求(如VPN/NAT),客户端指定代理服务器,并将本来要直接发送 ...
- 关于bootstrap在IE8下不能支持自适应的问题
说到这个问题,我就想吐槽下IE了,开发这么多版本,每个版本都有一些这样那样的问题不支持,别的正常的浏览器咋都能支持呢?真是垃圾浏览器!!!! 说归说,但是IE现在用的人多啊,怎么办?这个问题还是得解决 ...
- Erlang递归列举目录下文件
Erlang递归列举目录下文件(金庆的专栏)%%%-------------------------------------------------------------------%%% @aut ...
- Effective C++ ——资源管理
条款13:以对象来管理资源 在C++中我们经常会涉及到资源的申请与申请,一般都是由关键字new 和 delete来操作的,两者都是成对存在的,缺一不可,否则会出现意想不到的问题,例如: class I ...
- UNIX网络编程——揭开网络编程常见API的面纱【上】
Linux网络编程API函数初步剖析 今天我们来分析一下前几篇博文中提到的网络编程中几个核心的API,探究一下当我们调用每个API时,内核中具体做了哪些准备和初始化工作. 1.socket(famil ...
- Spark调度模式-FIFO和FAIR
Spark中的调度模式主要有两种:FIFO和FAIR.默认情况下Spark的调度模式是FIFO(先进先出),谁先提交谁先执行,后面的任务需要等待前面的任务执行.而FAIR(公平调度)模式支持在调度池中 ...