Python机器学习 – 用最小二乘法实现散点图

Python机器学习 – 用最小二乘法实现散点图

Machine Learning in Python – Implement Scatter Plot with Least Squares

By Jackson@ML

1. 最小二乘法定义

最小二乘法是由A.M.Legendre(勒让德)先生最早提出的。他在1805年,通过《计算彗星轨道的新方法》提出最小二乘法。它的主要思想是通过求解模型未知参数,使模型的理论值和观察值之差的平方和达到最小。

在散点图中,如果散点大致分布在观测直线的附近,则称两个变量(x, y)之间具有线性相关性。那么,这条直线就叫做回归直线,该直线方程为:观察值y = wx + b

由于这条直线满足所有样本点到这条直线的距离最小,因此,选择点到直线的垂直距离来表示各点与直线的最小距离的偏差。

最小二乘法公式是一个数学的公式,在数学上称为曲线拟合,不仅包括线性回归方程,还包括矩阵的最小二乘法。

2. 线性回归算法示例

最小二乘法属于线性回归算法的一种。以下给出Python代码来体现具体示例。
假设货运量和工业总产值都有一组数据,现在要求求出工业总产值与货运量之间的函数关系。

程序需要先行安装matplotlib库,在命令行窗口(cmd)或者Power Shell终端使用以下命令:

pip install matplotlib

安装完毕后,导入matplotlib库,然后将两组数据分别存储到x, y两个列表中,再画出散点图。
代码如下所示:

import matplotlib.pyplot as pltx = [2.8, 2.9, 3.2, 3.2, 3.4, 3.2, 3.3, 3.7, 3.9, 4.2, 3.9, 4.1, 4.2, 4.4, 4.2]
y = [25, 27, 29, 32, 34, 36, 35, 39, 42, 45, 44, 44, 45, 48, 47]plt.scatter(x, y)
plt.show()

执行结果如下图所示:
在这里插入图片描述

3. 最小二乘法示例

接下来,定义函数avg(x), 这个函数的功能是求解平均数。函数avg传递参数x, 返回的平均值等于求和除以样本数。

最后,定义拟合函数fit(x, y), 返回变量w和b。并且调用拟合函数fit(x, y), 形成预测y值列表,并绘制最终带观测直线的散点图。

完整代码如下:

import matplotlib.pyplot as pltx = [2.8, 2.9, 3.2, 3.2, 3.4, 3.2, 3.3, 3.7, 3.9, 4.2, 3.9, 4.1, 4.2, 4.4, 4.2]
y = [25, 27, 29, 32, 34, 36, 35, 39, 42, 45, 44, 44, 45, 48, 47]plt.scatter(x, y)
plt.show()def avg(x):m = len(x)sum = 0for num in x:sum += num return sum / m def fit(x, y):x_avg = avg(x)y_avg = avg(y)m = len(x)tmp_1 = 0; tmp_2 = 0for i in range(m):tmp_1 += (x[i] - x_avg) * (y[i] - y_avg)tmp_2 += (x[i] - x_avg) ** 2w = tmp_1 / tmp_2b = y_avg - w * x_avgreturn w, b w, b = fit(x, y)
print(w)
print(b)pre_y = []
for i in range(len(y)):pre_y.append(w * x[i] + b)plt.scatter(x, y)
plt.plot(x, pre_y, c='r')
plt.show()

运行该程序,显示下图结果:
在这里插入图片描述
退出该图后,会显示出另一幅带观测直线的散点图,如下图所示:
在这里插入图片描述
这正是我们想要的结果!

在以上程序中,m为样本容量,即实验次数;x, y为任意一组实验的观测值。

4. 小结:

本文简要介绍了最小二乘法上机实训的过程。通过最小二乘法的实践,用Python外带的matplotlib库实现了散点图及其观测直线。

该程序实现的主要步骤如下:
1) 首先定义avg(x)函数,返回x样本数据的平均数;
2) 其次,拟合函数fit(x, y)通过调用avg()函数求解x的平均值和y的平均值;同时,求解x的长度,即实验次数。
3) 在初始化tmp_1, tmp_2的值为零后,构建最小二乘法w公式的分子和分母;然后,求解w, b的值并返回。
4) 接下来,初始化预测y值的列表为空,遍历所有元素并求解预测y值,将其添加到预测y值列表。最后,分别绘制观测直线并绘制散点图。

以上是用Python实现最小二乘法的过程,希望对读者有所帮助。

参考文献

  1. 《机器学习技术及应用》(徐宏英等著)一书的监督学习的相关内容,谨此表示感谢。

相关阅读:

  1. Python编程技巧 - 使用正则表达式
  2. Python编程技巧 - 单字符函数
  3. Python编程技巧 - 异常处理
  4. Python编程技巧 - 迭代器(Iterator)
  5. Python编程技巧 - Lambda函数
  6. Python编程技巧 - 使用字典
  7. Python编程技巧 - 使用字符串(Strings)
  8. Python编程技巧 - 对象和类
  9. Python编程技巧 - 使用列表(List)
  10. Python编程技巧 - 转换二进制、八进制和十六进制的函数
  11. Python编程技巧 - 函数入门
  12. 安装2023最新版PyCharm来开发Python应用程序
  13. 安装最新版Visual Studio Code来开发Python应用程序
  14. 2023最新版Python 3.12.0安装使用指南

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

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

相关文章

3. 结构型模式 - 组合模式

亦称: 对象树、Object Tree、Composite 意图 组合模式是一种结构型设计模式, 你可以使用它将对象组合成树状结构, 并且能像使用独立对象一样使用它们 问题 如果应用的核心模型能用树状结构表示, 在应用中使用组合模式才有价值。 …

ISP 状态机轮转和bubble恢复机制学习笔记

1 ISP的中断类型 ISP中断类型 SOF: 一帧图像数据开始传输 EOF: 一帧图像数据传输完成 REG_UPDATE: ISP寄存器更新完成(每个reg group都有独立的这个中断) EPOCH: ISP某一行结尾(默认20)就会产生此中断 BUFFER DONE: 一帧图像数据ISP完全写到DDR了 2 ISP驱动状态机 通过camer…

三菱PLC开关量防抖滤波功能块

开关量防抖滤波功能块梯形图和SCL代码请参考下面文章链接: https://rxxw-control.blog.csdn.net/article/details/134936233https://rxxw-control.blog.csdn.net/article/details/134936233三菱PLC防抖滤波的另一种写法如下 https://rxxw-control.blog.csdn.net/article/det…

用CHAT了解更多知识点

问CHAT:什么是硅基生命和碳基生命? CHAT回复:硅基生命和碳基生命是两种理论性的生物体类型,这些生物体主要是由硅或碳元素以及其他元素构成的。 碳基生命是我们当前所熟知的生命形式。碳元素能够形成稳定且复杂的分子,…

推荐几款非常好用的软件,干货满满!

作为一个工具控,一直在社区索取别人的营养,今天在下将我搜集的一些应用贡献出来,推介十几个我常用的软件。一些是其他人反复推介确实经典,另一些是我偶然发现但经过使用感觉非常好用,一并献上,大家可以根据…

node封装一个图片拼接插件

说在前面 平时我们拼接图片的时候一般都要通过ps或者其他图片处理工具来进行处理合成,这次有个需求就需要进行图片拼接,而且我希望是可以直接使用代码进行拼接,于是就有了这么一个工具包。 插件效果 通过该插件,我们可以将图片进…

Java开发框架和中间件面试题(5)

44.Tomcat一个请求的处理流程? 假设来自客户的请求为: http://localhost:8080/test/index.jsp请求被发送到本机端口8080,被在那里侦听Copote HTTP/1.1 Connector,然后 1.Connector把该请求交给它所在的Service的Engi…

STM32MP157D-DK1开发板Qt镜像构建

上篇介绍了STM32MP57-DK1开发板官方系统的烧录。那个系统包含Linux系统的基础功能,如果要进行Qt开发,还需要重新构建带有Qt功能的镜像 本篇就来介绍如何构建带有Qt功能的系统镜像,并在开发板中烧录构建的镜像。 1 Distribution包的构建 ST…

[C/C++]数据结构 希尔排序

🥦前言: 希尔排序也称 “缩小增量排序”,它也是一种插入类排序的方法,在学习希尔排序之前我们首先了解一下直接插入排序. 一: 🚩直接插入排序 1.1 🌟排序思路 直接插入排序的基本原理是将一条记录插入到已排好的有序表中&#x…

【经典LeetCode算法题目专栏分类】【第11期】递归问题:字母大小写全排列、括号生成

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推荐--…

【C++】STL 容器 - list 双向链表容器 ① ( 容器特点 | 容器操作时间复杂度 | 构造函数 )

文章目录 一、 list 双向链表容器简介1、容器特点2、容器操作时间复杂度3、遍历访问5、头文件 二、 list 双向链表容器 构造函数1、默认无参构造函数2、创建包含 n 个相同元素的 list 双向链表3、使用初始化列表构造 list 双向链表4、使用另外一个 list 容器 构造 list 双向链表…

新概念第二册(1)

【New words and expressions】生词和短语(12) private adj. 私人的 conversation n. 谈话 theatre n. 剧场,戏院 seat n. 座位 play …

关于MULTI#STORM活动利用远程访问木马瞄准印度和美国的动态情报

一、基本内容 于2023年6月22日,一款代号为MULTI#STORM的新网络钓鱼活动将目标瞄准了印度和美国,利用JavaScript文件在受感染的系统上传播远程访问木马。 二、相关发声情况 Securonix的研究人员Den luzvyk、Tim Peck和Oleg Kolesnikov发表声明称&#x…

session 的原理

目录 1,session 的原理如何删除 session1,设置过期时间2,客户端主动通知 2,和 cookie 的区别安全性举例:验证码 3,举例 1,session 的原理 建议先看这篇文章:浏览器 cookie 的原理&a…

虚继承解决菱形继承的原理

菱形继承的问题,是由多重继承的父类祖先是同一个父类导致的。如下面的情况: 菱形继承,会导致同名成员的二义性问题和数据冗余问题,用下面的代码来测试: class A { public:int _a; }; // class B : public A class B :…

ES8生产实践——Kibana对接Azure AD实现单点登录

基本概念介绍 什么是单点登录 单点登录(Single Sign-On,SSO)是一种身份验证和访问控制机制,允许用户使用一组凭据(通常是用户名和密码)仅需登录一次,即可访问多个应用程序或系统,而…

SpringIOC之AbstractResourceBasedMessageSource

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

C++11特性:线程同步之条件变量

条件变量是C11提供的另外一种用于等待的同步机制,它能阻塞一个或多个线程,直到收到另外一个线程发出的通知或者超时时,才会唤醒当前阻塞的线程。条件变量需要和互斥量配合起来使用,C11提供了两种条件变量: 1. conditi…

算法学习系列(十一):KMP算法

目录 引言一、算法概念二、题目描述三、思路讲解三、代码实现四、测试 引言 这个KMP算法就是怎么说呢,就是不管算法竞赛还是找工作笔试面试,都是非常爱问爱考的,其实也是因为这个算法比较难懂,其实就是很难,所以非常个…

智能优化算法应用:基于指数分布算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于指数分布算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于指数分布算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.指数分布算法4.实验参数设定5.算法结果6.…