python中最小二乘法详细讲解


Posted in Python onFebruary 19, 2021

python中在实现一元线性回归时会使用最小二乘法,那你知道最小二乘法是什么吗。其实最小二乘法为分类回归算法的基础,从求解线性透视图中的消失点,m元n次函数的拟合,包括后来学到的神经网络,其思想归根结底全都是最小二乘法。本文向大家介绍python中的最小二乘法。

一、最小二乘法是什么

最小二乘法Least Square Method,做为分类回归算法的基础,有着悠久的历史(由马里·勒让德于1806年提出)。

二、最小二乘法实现原理

通过最小化误差的平方和寻找数据的最佳函数匹配。

三、最小二乘法功能

利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。

最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。

四、最小二乘法两种视角描述:“多线→一点”视角与“多点→一线”视角

1、已知多条近似交汇于同一个点的直线,想求解出一个近似交点:寻找到一个距离所有直线距离平方和最小的点,该点即最小二乘解;

2、已知多个近似分布于同一直线上的点,想拟合出一个直线方程:设该直线方程为y=kx+b,调整参数k和b,使得所有点到该直线的距离平方之和最小,设此时满足要求的k=k0,b=b0,则直线方程为y=k0x+b0。

实例扩展:

最小二乘法矩阵

#! /usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
def calc_left_k_mat(k):
 """
 获得左侧k矩阵
 :param k:
 :return:
 """
 k_mat = []
 for i in range(k + 1):
  now_line = []
  for j in range(k + 1):
   now_line.append(j + i)
  k_mat.append(now_line)
 return k_mat
def calc_right_k_mat(k):
 """
 计算右侧矩阵
 :param k:
 :return:
 """
 k_mat = []
 for i in range(k + 1):
  k_mat.append([i, i + 1])
 return k_mat
def pow_k(x, k):
 """
 计算x列表中的k次方和
 :param x: 点集合的x坐标
 :param k: k值
 :return:
 """
 sum = 0
 for i in x:
  sum += i ** k
 return sum
def get_left_mat_with_x(k_mat, k):
 """
 将 左侧k矩阵运算得到左侧新的矩阵
 :param k_mat:
 :param k:
 :return:
 """
 left_mat = []
 for kl in k_mat:
  now_data = []
  for k in kl:
   now_data.append(pow_k(x, k))
  left_mat.append(now_data)
 return left_mat
def get_right_mat_with(right_k_mat):
 """
 将 右侧k矩阵运算得到右侧新的矩阵
 :param right_k_mat:
 :return:
 """
 right_mat = []
 for i in range(len(right_k_mat)):
  sum = 0
  for xL, yL in zip(x, y):
   a = (xL ** right_k_mat[i][0]) * (yL ** right_k_mat[i][1])
   sum += a
  right_mat.append(sum)
 return right_mat
def fuse_mat(left, right):
 """
 融合两个矩阵
 :param left:
 :param right:
 :return:
 """
 new_mat = []
 for i in range(len(left)):
  asd = np.append(left[i], right[i])
  new_mat.append(list(asd))
 return new_mat
if __name__ == '__main__':
 k = 3
 x = [1, 2, 3]
 y = [1, 2, 3]
 # 计算原始左侧K矩阵
 left_k_mat = calc_left_k_mat(k)
 print("原始左侧K矩阵")
 print(left_k_mat)
 # 计算原始右侧K矩阵
 right_k_mat = calc_right_k_mat(k)
 print("原始右侧k矩阵")
 print(right_k_mat)
 # 计算左侧 k 矩阵
 new_left_mat = get_left_mat_with_x(k_mat=left_k_mat, k=k)
 # 计算右侧 k 矩阵
 new_right_mat = get_right_mat_with(right_k_mat=right_k_mat)
 print("计算后左侧K矩阵")
 print(new_left_mat)
 print("计算后右侧侧K矩阵")
 print(new_right_mat)
 print("-----" * 10)
 # 融合两个矩阵 左侧 矩阵每一行增加 右侧矩阵的对应行
 new_all = fuse_mat(new_left_mat, new_right_mat)
 print("完整矩阵")
 print(new_all)

到此这篇关于python中最小二乘法详细讲解的文章就介绍到这了,更多相关python中最小二乘法如何理解内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python中关于日期时间处理的问答集锦
Mar 08 Python
Python线程详解
Jun 24 Python
Python简单实现网页内容抓取功能示例
Jun 07 Python
基于Python的ModbusTCP客户端实现详解
Jul 13 Python
Python自动生成代码 使用tkinter图形化操作并生成代码框架
Sep 18 Python
Python创建一个元素都为0的列表实例
Nov 28 Python
windows环境中利用celery实现简单任务队列过程解析
Nov 29 Python
python ftplib模块使用代码实例
Dec 31 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
Apr 22 Python
在TensorFlow中实现矩阵维度扩展
May 22 Python
Python 中的函数装饰器和闭包详解
Feb 06 Python
Python使用PyYAML库读写yaml文件的方法
Apr 06 Python
python中scipy.stats产生随机数实例讲解
Feb 19 #Python
python的scipy.stats模块中正态分布常用函数总结
Feb 19 #Python
python+opencv实现车道线检测
Feb 19 #Python
python UIAutomator2使用超详细教程
Feb 19 #Python
Python实现曲线拟合的最小二乘法
Feb 19 #Python
python爬虫beautifulsoup库使用操作教程全解(python爬虫基础入门)
Feb 19 #Python
python绘制高斯曲线
Feb 19 #Python
You might like
再次研究下cache_lite
2007/02/14 PHP
php类中private属性继承问题分析
2012/11/01 PHP
php中substr()函数参数说明及用法实例
2014/11/15 PHP
php中的动态调用实例分析
2015/01/07 PHP
PHP未登录自动跳转到登录页面
2016/12/21 PHP
PHP数据分析引擎计算余弦相似度算法示例
2017/08/08 PHP
解决Laravel5.5下的toArray问题
2019/10/15 PHP
在线编辑器中换行与内容自动提取
2009/04/24 Javascript
如何判断元素是否为HTMLElement元素
2013/12/06 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/07/18 Javascript
javascript实现将文件保存到本地方法汇总
2015/07/26 Javascript
jQuery实用技巧必备(上)
2015/11/02 Javascript
IScroll5 中文API参数说明和调用方法
2016/05/21 Javascript
JavaScript中ES6 Babel正确安装过程
2016/07/18 Javascript
图文详解JavaScript的原型对象及原型链
2016/08/02 Javascript
学习JavaScript图片预加载模块
2016/11/07 Javascript
使用微信小程序开发前端【快速入门】
2016/12/05 Javascript
bootstrap timepicker在angular中取值并转化为时间戳
2017/06/13 Javascript
基于JavaScript实现带数据验证和复选框的表单提交
2017/08/23 Javascript
Vue开发环境跨域访问问题
2020/01/22 Javascript
原生js拖拽功能制作滑动条实例代码
2021/02/05 Javascript
python中Switch/Case实现的示例代码
2017/11/09 Python
Python判断文件和字符串编码类型的实例
2017/12/21 Python
python3个性签名设计实现代码
2018/06/19 Python
通过实例简单了解Python中yield的作用
2019/12/11 Python
python psutil监控进程实例
2019/12/17 Python
tensorflow使用range_input_producer多线程读取数据实例
2020/01/20 Python
使用html5 canvas绘制圆环动效
2019/06/03 HTML / CSS
参观监狱心得体会
2014/01/02 职场文书
会计出纳员的自我评价
2014/01/15 职场文书
补充协议书范本
2014/04/23 职场文书
2014年感恩母亲演讲稿
2014/05/27 职场文书
学生逃课检讨书
2015/02/17 职场文书
胡桃夹子观后感
2015/06/11 职场文书
某学校的2019年度工作报告范本
2019/10/11 职场文书
俄罗斯十大城市人口排名,第三首都仅排第六,第二是北方首都
2022/03/20 杂记