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 ...
随机推荐
- Common-used commands in Docker
1. Start running a image in background mode docker run -it -d <image>:<tag> e.g. docker ...
- 周口网视界易付点卡销售平台招商中 www.zkpay.cn 欢迎各界朋友加盟合作。
周口网视界易付点卡销售平台针对全国各地网吧及游戏点卡代理招商中. http://www.zkpay.cn 腾讯新的游戏点卡销售平台,平台价优稳定,这个是老家朋友开的公司,欢迎全国各地网吧客户及游戏 ...
- [boost][filesystem] 扫描给定目录下所有项
Intro. Boost的filesystem可以用来扫描给定目录下的所有项. 实现 具体实现代码如下: 需要包含的头文件和使用的命名空间: #include <boost/filesystem ...
- 如何编写入门级redis客户端
概述 Redis是开源的.基于内存的数据结构存储系统,可用作数据库.缓存以及消息代理方面.Redis支持许多种数据结构,并内置了丰富的诸如冗余.脚本.事务.持久化等功能,深受业界喜爱,被各种业务系统广 ...
- Eclipse简介和使用技巧快捷方式
1Eclipse简介和使用 IDE(Integrated Development Environment ): 集成开发环境,集合开发.运行.调试于一体的一个软件 Eclipse 是一个开放源代码的. ...
- RxJava(三) flatMap操作符用法详解
欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/51532776 本文出自:[余志强的博客] flatMap操作符的作用 ...
- Android开发之Intent.Action 各种Action的常见作用
1 Intent.ACTION_MAIN String: android.intent.action.MAIN 标识Activity为一个程序的开始.比较常用. Input:nothing Outpu ...
- 有奖试读—Windows PowerShell实战指南(第2版)
为什么要学PowerShell? Windows用户都已习惯于使用图形化界面去完成工作,因为GUI总能轻易地实现很多功能,并且不需要记住很多命令.使得短时间学会一种工具成为可能. 但是不幸的是,GUI ...
- 【移动开发】plurals
不同的语言对数量的语法规定有不同的规则.在英语里面,例如,1是特例.我们会直接写1book,而针对一个以上的我们会在book后加复数形式.这种区别对单数和复数来说是很普遍的,但是其他的语言做了更好的区 ...
- C++对C的实用性增强
#include <iostream> using namespace std; //C语言中的变量都必须在作用域开始的位置定义!! //C++中更强调语言的"实用性" ...