局部加权线性回归

简介: 通常,选择交给学习算法处理特征的方式对算法的工作过程有很大影响。     例如:在前面的例子中,用\(x1\)表示房间大小。通过线性回归,在横轴为房间大小,纵轴为价格的图中,画出拟合曲线。回归的曲线方程为:\(\theta_0+\theta_1x_1\),如下边最左边的图。

     通常,选择交给学习算法处理特征的方式对算法的工作过程有很大影响。

     例如:在前面的例子中,用\(x1\)表示房间大小。通过线性回归,在横轴为房间大小,纵轴为价格的图中,画出拟合曲线。回归的曲线方程为:\(\theta_0+\theta_1x_1\),如下边最左边的图。

image

     若定义特征集合为:\(x1\)表示房子大小,\(x2\)表示房子大小的平方,使用相同的算法,拟合得到一个二次函数,在图中为一个抛物线,即:\(\theta_0+\theta_1x_1+\theta_2x_1^2\),如上边中间的图。

     以此类推,若训练集有7个数据,则可拟合出最高6次的多项式,可以找到一条完美的曲线,该曲线经过每个数据点。但是这样的模型又过于复杂,拟合结果仅仅反映了所给的特定数据的特质,不具有通过房屋大小来估计房价的普遍性,而线性回归的结果可能无法捕获所有训练集的信息。

       所以,对于一个监督学习模型来说,过小的特征集合使得模型过于简单,过大的特征集合使得模型过于复杂

对于特征集过小的情况,称之为欠拟合(underfitting

对于特征集过大的情况,称之为过拟合(overfitting

      解决此类学习问题的方法:

1) 特征选择算法:一类自动化算法,在这类回归问题中选择用到的特征

2) 非参数学习算法:缓解对于选取特征的需求,引出局部加权回归


参数学习算法(parametric learning algorithm

定义:参数学习算法是一类有固定数目参数,以用来进行数据拟合的算法。设该固定的参数集合为\(\theta\) 。线性回归即是参数学习算法的一个例子

非参数学习算法(Non-parametric learning algorithm

      定义:一个参数数量会m(训练集大小)增长的算法。通常定义为参数数量随m线性增长。换句话说,就是算法所需要的东西会随着训练集合线性增长,算法的维持是基于整个训练集合的,即使是在学习以后。

局部加权线性回归算法,是一种非参数学习法(non-parametric)

算法思想:

    假设对于一个确定的查询点\(x\),在\(x\)处对你的假设\(h(x)\)求值。

    对于线性回归,步骤如下:

    1) 拟合出\(\theta\),使 \(\sum_i(y^{(i)}-\theta^Tx^{(i)})^2\)最小

    2) 返回\(\theta^Tx\)

对于局部加权回归,当要处理\(x\)时:

     1) 检查数据集合,并且只考虑位于\(x\)周围的固定区域内的数据点

     2) 对这个区域内的点做线性回归,拟合出一条直线

     3) 根据这条拟合直线对\(x\)的输出,作为算法返回的结果

用数学语言描述即:

    1) 拟合出\(\theta\),使 \(\sum_iw^{(i)}(y^{(i)}-\theta^Tx^{(i)})^2\)最小

    2) \(w\)为权值,有很多可能的选择,比如:

\[w^{(i)}=exp\bigg(-\frac{(x^{(i)}-x)^2}{2\tau^2}\bigg)\]

- 其意义在于,所选取的\(x^{(i)}\)越接近\(x\),相应的\(w^{(i)}\)越接近1;\(x^{(i)}\)越远离\(x\),\(w^{(i)}\)越接近0。直观的说,就是离得近的点权值大,离得远的点权值小。

- 这个衰减函数比较具有普遍意义,虽然它的曲线是钟形的,但不是高斯分布。\(\tau\)被称作波长,它控制了权值随距离下降的速率。它越小,钟形越窄,\(w\)衰减的很快;它越大,衰减的就越慢。

下图就是\(x\)在(-1,1)之间,\(\tau\)为1的衰减函数图:

x=-1:0.05:1;

y=exp(-x.*x/(2*1^2));

plot(x,y);

image

这样对局部加权线性回归,它的损失函数为:

\[J(\theta)=\sum\limits_{i=1}^{m}w^{(i)}\big[y^{(i)}-\theta^Tx^{(i)}\big]^2\]

\[w^{(i)}=exp\bigg(-\frac{(x^{(i)}-x)^2}{2\tau^2}\bigg)\]


     算法思路:假设预测点取样本点中的第i个样本点(共m个样本点),遍历1到m个样本点(含第i个),算出每一个样本点与预测点的距离,也就可以计算出每个样本贡献误差的权值,可以看出w是一个有m个元素的向量(写成对角阵形式),代入上式\(J(\theta)\)中。

\[w=\begin{bmatrix}
  w_1& &  &  & \\
  &  \ddots& &  & \\
  &  & w_i & & \\
  &  &  & \ddots & \\
  &  &  &  & w_m
\end{bmatrix}\]

\[J(\theta)=\sum\limits_{i=1}^{m}w^{(i)}\big[y^{(i)}-\theta^Tx^{(i)}\big]^2=y^Twy-\theta^Tx^Twy-y^Tw^Tx\theta+\theta^Tx^Twx\theta\]

利用最小二乘法,可以计算出一个\(\theta\)向量(一个预测点对应一个向量),矩阵求导公式可以参考:http://www.cnblogs.com/mikewolf2002/p/7588126.html

\[\bigtriangledown_{\theta}J(\theta)=0 \\ -x^Twy-x^Twy+2x^Twx\theta=0 \\ \theta=(x^Twx)^{-1}x^Twy\]

3) 返回\(\theta^Tx\)

总结:对于局部加权回归,每进行一次预测,都要重新拟合一条曲线。但如果沿着x轴对每个点都进行同样的操作,你会得到对于这个数据集的局部加权回归预测结果,追踪到一条非线性曲线。

*局部加权回归的问题:

由于每次进行预测都要根据训练集拟合曲线,若训练集太大,每次进行预测的用到的训练集就会变得很大。

下面是局部加权线性回顾matlib代码,数据文件下载:https://github.com/pbharrin/machinelearninginaction/tree/master/Ch08

%局部加权线性回归算法(LWR/LOESS)  
clc;
clear all;
close all;
%%  
%载入数据  
data=load ('ex0.txt');
x=data(:,1:2);
y=data(:,3);
%%  
m=size(x,1);%样本数  
n=size(x,2);%特征维数  
tau=1;
w=zeros(m,m);
theta=zeros(n,m);%每一列都是一个样本的theta值  
for i=1:m
    for j=1:m
        w(j,j)=exp(-((x(i,2)-x(j,2))^2)/(2*tau^2));
    end
    theta(:,i)=((x'*w*x)\x')*w*y;  %左除式
end
figure;
plot(x(:,2),y,'r.');%原始数据  
hold on;
y_fit=x*theta;
y=diag(y_fit);%取对角线元素  
data(:,1:2)=x;
data(:,3)=y;
data=sortrows(data,2); %按第二列排序数据 
x=data(:,1:2);
y=data(:,3);
plot(x(:,2),y);
View Code

当波长\(\tau\)为1,这是回归曲线接近一条直线,随着波长减小,回归曲线更好的拟合样本数据,但要注意过拟合的问题,选择合适的波长值。

\(\tau=1\)

image

\(\tau=0.1\)

image

\(\tau=0.01\)

image
相关文章
|
存储 数据库 索引
Python新手常见问题一:列表、元组、集合、字典区别是什么?
本文针对Python编程新手常遇到的问题,详细阐述了列表(List)、元组(Tuple)、集合(Set)和字典(Dictionary)这四种数据结构的核心区别。列表是一种有序且可变的数据序列,允许元素重复;元组同样有序但不可变,其内容一旦创建就不能修改;集合是无序、不重复的元素集,强调唯一性,主要用于数学意义上的集合操作;而字典则是键值对的映射容器,其中键必须唯一,而值可以任意,它提供了一种通过键查找对应值的有效方式。通过对这些基本概念和特性的对比讲解,旨在帮助初学者更好地理解并运用这些数据类型来解决实际编程问题。
2165 1
|
API Docker 容器
SenseVoice实现语音转文字
这篇文章介绍了如何使用SenseVoice实现语音转文字的功能,包括通过Docker部署服务、使用网页界面或API进行语音文件的转换,并提供了详细的部署与使用步骤。
2162 1
SenseVoice实现语音转文字
|
4月前
|
算法 Unix 程序员
程序员行业的学历门槛与天赋密码:揭开大厂招聘的真相·优雅草卓伊凡
程序员行业的学历门槛与天赋密码:揭开大厂招聘的真相·优雅草卓伊凡
158 3
程序员行业的学历门槛与天赋密码:揭开大厂招聘的真相·优雅草卓伊凡
|
4月前
|
SQL Go 数据库
开箱即用的GO后台管理系统 Kratos Admin - 代码生成工具集
Kratos Admin 是一款开箱即用的 Go 后台管理系统,配套代码生成工具集(cfgexp、sql2orm、sql2proto、sql2kratos),支持配置导出、数据库转 ORM、Protobuf 及 Kratos 微服务代码生成,助力高效开发。
120 1
|
4月前
|
机器学习/深度学习 计算机视觉 索引
眨眼张嘴人脸识别软件,图片眨眼摇头生成器,制作眨眼睛张嘴图软件
本系统基于OpenCV和Dlib实现人脸动态特征识别与图像生成,包含眨眼、张嘴检测及头部姿态估计功能,提供约200行核心代码,并支持扩展深度学习模型提升性能。
|
12月前
|
机器学习/深度学习 存储 分布式计算
未来趋势:探索GraphRAG在大规模异构网络环境下的挑战与机遇
【10月更文挑战第11天】随着互联网和物联网技术的快速发展,数据不仅数量庞大,而且类型多样,形成了复杂的大规模异构网络。这些网络中包含了不同类型的节点(如文本、图像、视频等)以及它们之间的多种关系。如何有效地处理这种大规模异构网络,以便进行内容理解与生成,是当前研究的一个热点问题。Graph Retrieval-Augmented Generation (GraphRAG) 框架作为一种新兴的方法,在这一领域展现出了巨大的潜力。本文将深入探讨GraphRAG的基础理论、构建方法,并分析其在未来大规模异构网络环境下的挑战与机遇。
621 3
|
域名解析 存储 缓存
计算机网络选择题填空题判断题整理
计算机网络选择题填空题判断题整理
计算机网络选择题填空题判断题整理
|
JavaScript 前端开发 API
网络请求库 – axios库
网络请求库 – axios库
374 60
|
11月前
|
存储 大数据 数据管理
大数据分区提高查询性能
大数据分区提高查询性能
294 2
|
监控 安全 网络协议
关于HTTP劫持,如何理解、防范与应对
**HTTP劫持详解:原理、危害与对策** HTTP劫持是中间人攻击,通过拦截未加密的HTTP通信窃取信息。危害包括信息泄露、恶意软件传播和内容篡改。常见形式有代理服务器、会话、DNS劫持及恶意软件。检测方法包括检查网络、观察浏览器行为、使用安全工具及报告问题。 防范措施包括使用HTTPS、验证TLS/SSL证书、避免不安全Wi-Fi、启用HSTS、设置CSP、更新软件、使用WAF、加密DNS及监控日志。德迅云安全提供实战化安全产品,如安全加速CSDN,防御Web攻击,保障业务安全和快速访问。保持安全意识和更新防护策略至关重要。