【线性回归】

1. 简单线性回归 y = ax + b

double[] x = {540, 360, 240};
double[] y = {205, 325, 445};

问题

根据double[] x 和 double[] y ,计算y = ax + b中a和b的值

解决方法
最小二乘法:让距离(实验值和理论值的差值)的平方和最小

即:
( 205 − 540 a − b ) 2 + ( 325 − 360 a − b ) 2 + ( 445 − 240 a − b ) 2 (205 - 540a - b)^2 + (325 - 360a -b)^2 + (445 - 240a -b)^2 (205540ab)2+(325360ab)2+(445240ab)2的最小值

如何求解
对a和b求偏导数,取偏导数为0,可以求解得到a和b。

理论推导

输入数据:
x = [ x 1 , x 2 , . . . , x n ] , y = [ y 1 , y 2 , . . . , y n ] x = [ x_1,x_2, ..., x_n], y = [ y_1,y_2, ..., y_n] x=[x1,x2,...,xn],y=[y1,y2,...,yn]
差值的平方:
f ( a , b ) = ( y 1 − a x 1 − b ) 2 + ( y 2 − a x 2 − b ) 2 + . . . + ( y n − a x n − b ) 2 f(a,b) = (y_1-ax_1-b)^2 + (y_2-ax_2-b)^2 + ... + (y_n-ax_n-b)^2 f(a,b)=(y1ax1b)2+(y2ax2b)2+...+(ynaxnb)2

求f(a,b)的最小值,即
∂ f ∂ a = 0 \frac{ \partial f }{ \partial a } = 0 af=0
∂ f ∂ b = 0 \frac{ \partial f }{ \partial b } = 0 bf=0

(1)---------------------------------------------------------------------------------------------------------------------
∂ f ∂ b = 0 \frac{ \partial f }{ \partial b } = 0 bf=0
∂ f ∂ b = − 2 ( y 1 − a x 1 − b ) − 2 ( y 2 − a x 2 − b ) − . . . − 2 ( y n − a x n − b ) = 0 \frac{ \partial f }{ \partial b } = -2(y_1-ax_1-b) - 2(y_2-ax_2-b) - ... - 2(y_n-ax_n-b) = 0 bf=2(y1ax1b)2(y2ax2b)...2(ynaxnb)=0
( y 1 − a x 1 − b ) + ( y 2 − a x 2 − b ) + . . . + ( y n − a x n − b ) = 0 (y_1-ax_1-b) + (y_2-ax_2-b) + ... + (y_n-ax_n-b) = 0 (y1ax1b)+(y2ax2b)+...+(ynaxnb)=0
( y 1 + y 2 + . . . + y n ) − a ( x 1 + x 2 + . . . + x n ) − n b = 0 (y_1 + y_2 + ... + y_n) - a(x_1 + x_2+ ... + x_n) - nb = 0 (y1+y2+...+yn)a(x1+x2+...+xn)nb=0
( y 1 + y 2 + . . . + y n ) = a ( x 1 + x 2 + . . . + x n ) + n b (y_1 + y_2 + ... + y_n) = a(x_1 + x_2+ ... + x_n) + nb (y1+y2+...+yn)=a(x1+x2+...+xn)+nb

y ‾ = y 1 + y 2 + . . . + y n n , x ‾ = x 1 + x 2 + . . . + x n n \overline y = \frac{y_1 + y_2 + ... + y_n }{n},\overline x = \frac{x_1 + x_2+ ... + x_n }{n} y=ny1+y2+...+yn,x=nx1+x2+...+xn

则:
y ‾ = a x ‾ + b \overline y = a\overline x + b y=ax+b
b = y ‾ − a x ‾ b = \overline y - a\overline x b=yax

(2)---------------------------------------------------------------------------------------------------------------------
∂ f ∂ a = 0 \frac{ \partial f }{ \partial a } = 0 af=0
∂ f ∂ a = − 2 x 1 ( y 1 − a x 1 − b ) − 2 x 2 ( y 2 − a x 2 − b ) − . . . − 2 x n ( y n − a x n − b ) = 0 \frac{ \partial f }{ \partial a } = -2x_1(y_1-ax_1-b) - 2x_2(y_2-ax_2-b) - ... - 2x_n(y_n-ax_n-b) = 0 af=2x1(y1ax1b)2x2(y2ax2b)...2xn(ynaxnb)=0

x 1 ( y 1 − a x 1 − b ) + x 2 ( y 2 − a x 2 − b ) + . . . + x n ( y n − a x n − b ) = 0 x_1(y_1-ax_1-b) + x_2(y_2-ax_2-b) + ... + x_n(y_n-ax_n-b) = 0 x1(y1ax1b)+x2(y2ax2b)+...+xn(ynaxnb)=0

( x 1 y 1 + x 2 y 2 + . . . + x n y n ) − a ( x 1 2 + x 2 2 + . . . + x n 2 ) − b ( x 1 + x 2 + . . . + x n ) = 0 (x_1y_1 + x_2y_2 + ... + x_ny_n)-a(x_1^2 +x_2^2 + ... + x_n^2) - b(x_1 + x_2+ ... + x_n)= 0 (x1y1+x2y2+...+xnyn)a(x12+x22+...+xn2)b(x1+x2+...+xn)=0

( x 1 y 1 + x 2 y 2 + . . . + x n y n ) − a ( x 1 2 + x 2 2 + . . . + x n 2 ) − n b x ‾ = 0 (x_1y_1 + x_2y_2 + ... + x_ny_n)-a(x_1^2 +x_2^2 + ... + x_n^2) - nb\overline x= 0 (x1y1+x2y2+...+xnyn)a(x12+x22+...+xn2)nbx=0
( x 1 y 1 + x 2 y 2 + . . . + x n y n ) − a ( x 1 2 + x 2 2 + . . . + x n 2 ) − ( n y ‾ − n a x ‾ ) x ‾ = 0 (x_1y_1 + x_2y_2 + ... + x_ny_n)-a(x_1^2 +x_2^2 + ... + x_n^2) - (n\overline y - na\overline x)\overline x= 0 (x1y1+x2y2+...+xnyn)a(x12+x22+...+xn2)(nynax)x=0
a ( x 1 2 + x 2 2 + . . . + x n 2 ) − n a x ‾ 2 = ( x 1 y 1 + x 2 y 2 + . . . + x n y n ) − n y ‾ × x ‾ a(x_1^2 +x_2^2 + ... + x_n^2)-na\overline x^2 = (x_1y_1 + x_2y_2 + ... + x_ny_n) - n\overline y \times \overline x a(x12+x22+...+xn2)nax2=(x1y1+x2y2+...+xnyn)ny×x

a = ∑ i = 1 n x i y i − n y ‾ × x ‾ ∑ i = 1 n x i 2 − n x ‾ 2 a= \frac{ \sum_{i=1}^{n} x_iy_i - n\overline y \times \overline x }{ \sum_{i=1}^{n} x_i^2 - n \overline x^2} a=i=1nxi2nx2i=1nxiyiny×x

代码实现

/*** 普通最小二乘法给出的判断标准是:残差平方和的值达到最小* 计算最小二乘法的斜率a和截距b* @param x: 输入x向量* @param y: 输入y向量* @return 斜率和截距*/public static double[] linearLeastSquares(double[] x, double[] y) {int n = x.length;double sumX = 0.0;double sumY = 0.0;double sumXY = 0.0;double sumX2 = 0.0;for (int i = 0; i < n; i++) {sumX += x[i];sumY += y[i];sumXY += x[i] * y[i];sumX2 += x[i] * x[i];}double a = (n * sumXY - sumX * sumY) / (n * sumX2 - sumX * sumX);double b = (sumY - a * sumX) / n;return new double[]{a, b}; // 返回斜率a和截距b}public static void main(String[] args) {double[] x = {540, 360, 240, 480, 420};double[] y = {205, 325, 445, 505, 455};double[] result = linearLeastSquares(x, y);System.out.println("斜率a: " + result[0]);System.out.println("截距b: " + result[1]);}

2. 多元线性回归

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/8902.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

堆的基本操作(c语言实现)

1.堆的基本操作 1.1定义堆 typedef int HPDataType;//堆中存储数据的类型typedef struct Heap {HPDataType* a;//用于存储数据的数组int size;//记录堆中已有元素个数int capacity;//记录堆的容量 }HP;1.2初始化堆 然后我们需要一个初始化函数&#xff0c;对刚创建的堆进行初…

【C语言】路漫漫其修远兮,深入[指针]正当下

一. 指针初步 1.概念定义 地址&#xff1a;我们在内存中开辟空间时&#xff0c;为了方便后续访问&#xff0c;每个数据有确切的地址。 指针&#xff1a;指向数据的地址&#xff0c;并将其地址储存在指针变量中。 2.基本运算符 • 取地址操作符&#xff08;&&#xff09; …

stm32F103C8T6裸机如何提高响应速度

思路就是&#xff1a;将主函数的程序分为几块&#xff0c;不使用死延时函数&#xff0c;利用定时器中断&#xff0c;每1MS中断一次&#xff0c;然后中断1000次之后&#xff0c;过去了一秒钟&#xff0c;将1S标志位置1&#xff0c;然后主函数接收到之后&#xff0c;运行1S任务 …

【强化学习入门】基于DDPG的强化学习控制器设计

最近在看控制领域研究热门–强化学习相关的东西&#xff0c;跟着matlab官方强化学习教程一边看一边学&#xff0c;感觉入门门槛略高&#xff0c;需要补很多机器学习相关的知识&#xff0c;高数概率论那些&#xff0c;摸索了个把月感觉现在只大概会用&#xff0c;原理啥的还没搞…

进口家装水管十大品牌哪家好,弗锐德为您推荐进口家装水管领先十大品牌

水管作为家装隐蔽工程之一&#xff0c;选对一款优质的水管是至关重要的&#xff0c;毕竟好的水管能够保证家庭后续几十年的用水安全和健康。今天&#xff0c;小编就和大家说说进口家装水管十大品牌哪家好&#xff1f; 目前国内进口家装水管具有知名度和消费者认可的品牌有&…

自制一个3D打印的移动终端——T3rminal

T3rminal是我过去几个月一直在努力开发的一个CyberDeck&#xff0c;并希望将其开源。 我从不同设备如Decktility、YARH和其他项目中获得了灵感。 你可以在我的Github上协助并关注该项目&#xff1a;https://github.com/crazycaleb2008/T3rminal/tree/main/3D%20Models 材料 …

Edge的使用心得和深度探索-Sider: ChatGPT 侧边栏

作为一款备受欢迎的网络浏览器&#xff0c;Microsoft Edge在用户体验和功能方面都有着诸多优势。在长期的使用中&#xff0c;我总结出了三条使用心得&#xff0c;同时也发现了三个能够极大提高效率的功能。让我们一起深度探索Edge的潜力吧&#xff01; 使用心得&#xff1a; 界…

Spring 常用的注入方式有什么?

Spring 是一个非常流行的 Java 开发框架&#xff0c;它提供了多种依赖注入&#xff08;Dependency Injection&#xff09;的方式&#xff0c;使得开发者可以轻松地管理应用程序中的组件依赖关系。在 Spring 中&#xff0c;常用的注入方式主要包括构造器注入、Setter 方法注入、…

【测试报告】星光日册

⭐ 作者&#xff1a;Jwenen &#x1f331; 作者主页&#xff1a;Jwenen的个人主页 &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 测试报告 1. 项目介绍2. 测试用例框架3. 自动化测试源码 1. 项目介绍 “星光日册”项目实现了用…

继续SQL

主知识点六&#xff1a;having 聚合前的筛选用where&#xff0c;聚合后的筛选用having Having和where的区别是&#xff1a;运行顺序和对象不用 Having是在group by聚合后的基础上进行筛选。 ● 【例题27*】&#xff08;运行原理&#xff09;查询总人口数至少为3亿的大洲和…

vxe-table 区域选取、复制粘贴功能,的基本使用

vxe-table区域选取、复制粘贴功能&#xff0c;的基本使用&#xff08;注&#xff1a;该功能仅支持企业版&#xff0c;这里仅供部分演示&#xff09; 1.鼠标区域选择功能&#xff1a; 参数说明&#xff1a; mouse-config.area 是否开启鼠标单元格区域选取 <template>&l…

基于深度学习的MVS学习笔记(05.04-05.07)

1. MVS方法与分类 1.1 问题界定&#xff1a;多目和单目双目 单目深度估计&#xff1a;拟合一个函数将图像【RGB输入】映射到深度图【浮点输出】双目深度估计&#xff1a;双目回归视差&#xff0c;可以进一步求像素距离相机光心的深度多视点三维重建 单目只能找到“相对的”相…

详解基于 RAG 的 txt2sql 全过程

前文 本文使用通义千问大模型和 ChromaDB 向量数据库来实现一个完整的 text2sql 的项目&#xff0c;并基于实际的业务进行效果的展示。 准备 在进行项目之前需要准备下面主要的内容&#xff1a; python 环境通义千问 qwen-max 模型的 api-keyChromaDB 向量数据库acge_text_…

Linux-笔记 uboot修改设备树

1. FDT介绍 扁平设备树&#xff08;Flattened Device Tree&#xff0c;FDT&#xff09;&#xff0c;也叫平坦设备树&#xff0c;是设备树的一种二进制表示形式&#xff0c;提高了在嵌入式系统中的传输和解析效率&#xff1b; 2. 在U-Boot中使用FDT 2.1. 进入U-Boot 开发板上…

OpenCV 入门(四)—— 车牌号识别

OpenCV 入门系列&#xff1a; OpenCV 入门&#xff08;一&#xff09;—— OpenCV 基础 OpenCV 入门&#xff08;二&#xff09;—— 车牌定位 OpenCV 入门&#xff08;三&#xff09;—— 车牌筛选 OpenCV 入门&#xff08;四&#xff09;—— 车牌号识别 OpenCV 入门&#xf…

【论文阅读】VMamba: Visual State Space Model

VMamba:视觉状态空间模型 code&#xff1a;https://github.com/MzeroMiko/VMamba Background ​ CNN拥有线性复杂度因而可以处理高分辨率的图像&#xff0c;而ViT在拟合能力方面超过了CNN&#xff0c;但ViT是二次复杂度&#xff0c;在处理高分辨率图像时计算开销较大。ViT通过…

Wappalyzer指纹识别下载安装使用教程,图文教程(超详细)

「作者简介」&#xff1a;2022年北京冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础对安全知识体系进行总结与归纳&#xff0c;著作适用于快速入门的 《网络安全自学教程》&#xff0c;内容涵盖系统安全、信息收集等…

Windows平台通过MobaXterm远程登录安装在VMware上的Linux系统(CentOS)

MobaXterm是一个功能强大的远程计算工具&#xff0c;它提供了一个综合的远程终端和图形化的X11服务器。MobaXterm旨在简化远程计算任务&#xff0c;提供了许多有用的功能&#xff0c;使远程访问和管理远程服务器变得更加方便&#xff0c;它提供了一个强大的终端模拟器&#xff…

C语言进程A调用进程B中定义的函数

我想要实现2个独立的进程&#xff0c;A持续运行&#xff0c;B随时运行&#xff0c;B的函数通过A中得条件触发。 因为B中的函数触发后&#xff0c;还会执行B中的其他相关函数&#xff0c;所以单独的把B的触发函数写成动态链接库在A中调用是不行的。B是一个独立的逻辑&#xff0…

钉钉开放平台创建企业内部H5微应用或者小程序

前言&#xff1a; 在当今企业数字化转型的浪潮中&#xff0c;创建企业内部H5微应用或小程序已成为提升工作效率和促进内部沟通的重要举措。发话不多说本文将介绍如何利用钉钉平台快速创建这些应用&#xff0c;让企业内部的工作更加便捷高效。 步骤 1.在浏览器打开链接…