机器学习与算法(8)--局部加权学习算法(LWR)

article/2025/9/28 0:23:48

                                             局部加权学习算法(LWR)

     局部加权回归(LWR)是非参数学习方法。 首先参数学习方法是这样一种方法:在训练完成所有数据后得到一系列训练参数,然后根据训练参数来预测新样本的值,这时不再依赖之前的训练数据了,参数值是确定的。而非参数学习方法是这样一种算法:在预测新样本值时候每次都会重新训练数据得到新的参数值,也就是说每次预测新样本都会依赖训练数据集合,所以每次得到的参数值是不确定的。 局部加权回归(LWR)是我们遇到的第一个non-parametric(非参数)学习算法,而线性回归则是我们遇到的以一个parametric(参数)学习算法。因为参数学习算法它有固定的明确的参数,所以参数一旦确定,就不会改变了,我们不需要在保留训练集中的训练样本。而非参数学习算法,每进行一次预测,就需要重新学习一组,是变化的,所以需要一直保留训练样本。因而,当训练集的容量较大时,非参数学习算法需要占用更多的存储空间,计算速度也较慢。所以有得必有失,效果好了,计算速度却降下来了。

应用案例

# coding: utf-8
# linear_regression/regression.pydef JLwr(theta, X, y, x, c):"""局部加权线性回归的代价函数计算式Args:theta: 相关系数矩阵X: 样本集矩阵y: 标签集矩阵x: 待预测输入c: tauReturns:预测代价"""m,n = X.shapesummerize = 0for i in range(m):diff = (X[i]-x)*(X[i]-x).Tw = np.exp(-diff/(2*c*c))predictDiff = np.power(y[i] - X[i]*theta,2)summerize = summerize + w*predictDiffreturn summerize@exeTime
def lwr(rate, maxLoop, epsilon, X, y, x, c=1):"""局部加权线性回归Args:rate: 学习率maxLoop: 最大迭代次数epsilon: 预测精度X: 输入样本y: 标签向量x: 待预测向量c: tau"""m,n = X.shape# 初始化thetatheta = np.zeros((n,1))count = 0converged = Falseerror = float('inf')errors = []thetas = {}for j in range(n):thetas[j] = [theta[j,0]]# 执行批量梯度下降while count<=maxLoop:if(converged):breakcount = count + 1for j in range(n):deriv = (y-X*theta).T*X[:, j]/mtheta[j,0] = theta[j,0]+rate*derivthetas[j].append(theta[j,0])error = JLwr(theta, X, y, x, c)errors.append(error[0,0])# 如果已经收敛if(error < epsilon):converged = Truereturn theta,errors,thetas

结果

# coding: utf-8
# linear_regression/test_lwr.py
import regression
import matplotlib.pyplot as plt
import matplotlib.ticker as mtick
import numpy as npif __name__ == "__main__":srcX, y = regression.loadDataSet('data/lwr.txt');m,n = srcX.shapesrcX = np.concatenate((srcX[:, 0], np.power(srcX[:, 0],2)), axis=1)# 特征缩放X = regression.standardize(srcX.copy())X = np.concatenate((np.ones((m,1)), X), axis=1)rate = 0.1maxLoop = 1000epsilon = 0.01predicateX = regression.standardize(np.matrix([[8, 64]]))predicateX = np.concatenate((np.ones((1,1)), predicateX), axis=1)result, t = regression.lwr(rate, maxLoop, epsilon, X, y, predicateX, 1)theta, errors, thetas = resultresult2, t = regression.lwr(rate, maxLoop, epsilon, X, y, predicateX, 0.1)theta2, errors2, thetas2 = result2# 打印特征点fittingFig = plt.figure()title = 'polynomial with bgd: rate=%.2f, maxLoop=%d, epsilon=%.3f'%(rate,maxLoop,epsilon)ax = fittingFig.add_subplot(111, title=title)trainingSet = ax.scatter(srcX[:, 0].flatten().A[0], y[:,0].flatten().A[0])print thetaprint theta2# 打印拟合曲线xx = np.linspace(1, 7, 50)xx2 = np.power(xx,2)yHat1 = []yHat2 = []for i in range(50):normalizedSize = (xx[i]-xx.mean())/xx.std(0)normalizedSize2 = (xx2[i]-xx2.mean())/xx2.std(0)x = np.matrix([[1,normalizedSize, normalizedSize2]])yHat1.append(regression.h(theta, x.T))yHat2.append(regression.h(theta2, x.T))fittingLine1, = ax.plot(xx, yHat1, color='g')fittingLine2, = ax.plot(xx, yHat2, color='r')ax.set_xlabel('temperature')ax.set_ylabel('yield')plt.legend([trainingSet, fittingLine1, fittingLine2], ['Training Set', r'LWR with $\tau$=1', r'LWR with $\tau$=0.1'])plt.show()# 打印误差曲线errorsFig = plt.figure()ax = errorsFig.add_subplot(111)ax.yaxis.set_major_formatter(mtick.FormatStrFormatter('%.2e'))ax.plot(range(len(errors)), errors)ax.set_xlabel('Number of iterations')ax.set_ylabel('Cost J')plt.show()

最后,我们分别对ττ取值 0.10.1 和 11 ,得到了不同的拟合曲线:


http://chatgpt.dhexx.cn/article/hZqoJGUF.shtml

相关文章

局部加权回归

通常情况下的线性拟合不能很好地预测所有的值&#xff0c;因为它容易导致欠拟合&#xff08;under fitting&#xff09;&#xff0c;比如数据集是 一个钟形的曲线。而多项式拟合能拟合所有数据&#xff0c;但是在预测新样本的时候又会变得很糟糕&#xff0c;因为它导致数据的 …

冲击波理论

冲击波理论 冲击波理论&#xff08;the kinematic wave theory&#xff0c;也称LWR理论&#xff09;最初是由Lighthill, M. J和Whitham, G. B. 以及Richards, P. I. 于上世纪50年代提出的。该理论假设车流是一种类似于水流的运动&#xff0c;可以通过流量、密度和速度之间的关…

IOS捷径|九宫格切图工具 分享

还在为切九宫格图片找来找去找不到好工具而烦恼? 快使用九宫格切图快捷指令&#xff0c;5秒切出你想要的效果 为保障更好的切图效果&#xff0c;轻使用正方形图片参与切图&#xff0c;如没有&#xff0c;也请尽量裁剪出正方形图片再参与切图 支持22、23、3*3 多种组合方式 …

canvas切割原图为九宫格图片

originUrl 图片原地址cWidth 生成图片的宽度cHeight 生成图片的高度top 第一条切割线距离原图片顶部的距离bottom 第二条切割线距离原图片底部的距离left 第三条切割线距离原图片左侧的距离right 第四条切割线距离原图片右侧的距离 切割 效果图 index.html <!DOCTYPE html…

Unity的UGUI用TexturePacker全自动打图集,包括九宫格切图信息

Unity的UGUI用TexturePacker全自动打图集&#xff0c;包括九宫格切图信息 前言环境准备实现过程注意总结版权声明 前言 最近在学习UGUI的打图集&#xff0c;之前一直在用SpritePacker和Sprite Atlas打图集&#xff0c;现在记录下另一种打图集方式&#xff1a;TexturePacker 主…

NGUI 九宫格切图

UISprite 的 Type 选择 Sliced 选择Edit 中的 Border

关于9宫格拼图,C++

该文章均为个人编写&#xff0c;如有错误&#xff0c;欢迎各位友友点评&#xff01; 一个简单的小游戏&#xff0c;使用到指针及一二维数组&#xff0c;相关知识可访问&#xff1a; 指针&#xff1a;https://blog.csdn.net/qiu___nan/article/details/127054411。 数组&…

html用九张图片做出九宫图,用ps如何将九张照片做成九宫格?

如何用PS将九张照片做成九宫格&#xff0c;并且随时可以更换呢。下面跟搞设计一起来做一下吧。 ↑ 首先准备好九张照片 ↑ 打开PS&#xff0c;新建一个1000x1000的文件 ↑ 选择矩形工具 ↑ 创建一个300x300的矩形 ↑ 随便填个颜色&#xff0c;把图层命名为1 ↑ 选择视图-新建参…

python将图片裁剪成九宫格

要求&#xff1a;将图片裁剪成九宫格&#xff0c;宫格图片位置打乱 思路&#xff1a; 判断该图片长宽是否能被3整除&#xff0c;不能需要对图片进行裁剪&#xff08;我的是边角裁剪&#xff09;双重for循环&#xff0c;根据步长对图片数组进行切片达到裁剪效果random.shuffle(…

html手机9张图片显示,怎么把一张图片分成9张(手机美图秀秀九宫格在哪)

手机拍照片咋做成九宫格&#xff1f;只需4步&#xff0c;这么发朋友圈真好看&#xff01; 国庆中秋双节已过&#xff0c;你拍了照片吗&#xff1f;很多朋友拍了照片后&#xff0c;喜欢发朋友圈分享。 今天教大家一招&#xff0c;让你发的朋友圈更好看&#xff0c;用手机就能完成…

九宫格拼图

九宫格拼图的实现&#xff1a; 效果为下图所示&#xff0c;实现拼图的完成&#xff0c;这里附上完整的代码&#xff0c;需要注意的是在产生随机的初始状态时&#xff0c;是随机两两交换&#xff0c;才能保证其一直是1-9的这样的情况&#xff0c;其他具体响应的设计在程序注释中…

Python切割九宫格图

Python切割九宫格图 朋友圈经常有人发九宫格图片&#xff0c;但那是使用特定的图片软件制成的或就是九章不同的照片本次我们用 Python 来制一张 九宫格主体是一个 3x3 的正方形矩阵 有9张对应的图片组成一般的软件&#xff0c;在遇到非矩阵型图片时难以完成重组&#xff0c;且…

边框图片_九宫格切图

边框图片 原理示意图&#xff1a; 九宫格切图法,保留四个角边框样式,拉伸平铺或环绕方式设置图片四条边.以达到边框样式相同大小可以改变的效果 组合写法&#xff1a; border-image: url("images/border.jpg") 167/20px round;拆分写法&#xff1a; border-image…

python和C++代码实现图片九宫格切图程序(附VS2015配置Opencv教程)

1、python代码实现图片分割成九宫格 需要包含的库&#xff0c;没有下载安装的&#xff0c;需要自己安装哦。 实现原理很简单&#xff0c;就是用PIL库不断画小区域&#xff0c;切下来存储成新的小图片。 假设每一个格子的宽和高分别是w、h&#xff0c;那么第row行&#xff08…

android九宫格切图,拼图九宫格切图app

拼图九宫格切图app是一款比较不错的手机九宫格照片编辑拼图软件&#xff0c;任意选择需要切割的图片&#xff0c;切割成九宫格拼图&#xff0c;轻松制作&#xff0c;喜欢发朋友圈的朋友们有福了&#xff0c;还可以自定义美化滤镜选择&#xff0c;添加文字&#xff0c;贴纸等&am…

赛效:电脑在线九宫格切图怎么制作?

九宫格切图的好处是提高作品的美观度&#xff0c;九宫格切图可以将原本散乱的图片元素进行有序的排列&#xff0c;使作品更具美感&#xff0c;提高观众的观赏体验。另外&#xff0c;还能增强作品的可读性&#xff0c;九宫格切图可以将作品中的主体与背景进行分离&#xff0c;使…

用canvas实现九宫格切图之手把手教学(uniapp+ts)

uniapp用canvas实现九宫格切图&#xff08;typescript&#xff09; 前言上传图片展示图片画布下载图片最终效果总结 前言 这几天工作比较轻松&#xff0c;所以就有时间发下呆&#xff0c;突然想起前段时间用了一个九宫格切图软件&#xff0c;所以就自己试着开发下&#xff0c;…

PS把图片切成九宫格

目录 PS把图片切成九宫格第一步&#xff0c;导入图片到PS第二步&#xff0c;设置裁剪第三步&#xff0c;导出第四步&#xff0c;效果图 PS把图片切成九宫格 PS把图片切成九宫格,把图片设置切片&#xff0c;不仅可以切成九宫格&#xff0c;也可以设置22&#xff0c;44&#xff0…

九宫格图片怎么操作?这里有你想要的方法

不知道平时小伙伴们在发朋友圈的时候有没有注意过很多人的朋友圈都会将很多图片拼起来&#xff0c;凑成九宫格图片来发送。这是因为朋友圈的限制&#xff0c;无法一次发完&#xff0c;每次最大上传只有9长照片。所以就有很多朋友一次拼齐9个图片在一起实现发布更多的图片&#…