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中关于时间和日期函数的常用计算总结(time和datatime)
Mar 08 Python
Python中条件选择和循环语句使用方法介绍
Mar 13 Python
Python文件去除注释的方法
May 25 Python
Python部署web开发程序的几种方法
May 05 Python
python递归打印某个目录的内容(实例讲解)
Aug 30 Python
Python Tkinter实现简易计算器功能
Jan 30 Python
Python统计时间内的并发数代码实例
Dec 28 Python
Python接口自动化判断元素原理解析
Feb 24 Python
python seaborn heatmap可视化相关性矩阵实例
Jun 03 Python
在pytorch中动态调整优化器的学习率方式
Jun 24 Python
python中用ggplot绘制画图实例讲解
Jan 26 Python
python xlwt模块的使用解析
Apr 13 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
一个简单且很好用的php分页类
2013/10/26 PHP
PHP中的traits简单使用实例
2015/05/13 PHP
PHP+JS实现的商品秒杀倒计时用法示例
2016/11/15 PHP
javascript应用:Iframe自适应其加载的内容高度
2007/04/10 Javascript
一个小型js框架myJSFrame附API使用帮助
2008/06/28 Javascript
javascript实现数字+字母验证码的简单实例
2014/02/10 Javascript
JavaScript数字和字符串转换示例
2014/03/26 Javascript
div失去焦点事件实现思路
2014/04/22 Javascript
浅谈JavaScript中的String对象常用方法
2015/02/25 Javascript
jQuery实现自定义事件的方法
2015/04/17 Javascript
SpringMVC restful 注解之@RequestBody进行json与object转换
2015/12/10 Javascript
JQuery.validate在ie8下不支持的快速解决方法
2016/05/18 Javascript
html5+CSS 实现禁止IOS长按复制粘贴功能
2016/12/28 Javascript
NodeJS学习笔记之Module的简介
2017/03/24 NodeJs
详解Web使用webpack构建前端项目
2017/09/23 Javascript
Vue.js实现分页查询功能
2020/11/15 Javascript
vue的diff算法知识点总结
2018/03/29 Javascript
JavaScript设计模式之单例模式原理与用法实例分析
2018/07/26 Javascript
写一个Vue Popup组件
2019/02/25 Javascript
vue实现跳转接口push 转场动画示例
2019/11/01 Javascript
vue data引入本地图片的两种方式小结
2019/11/13 Javascript
探索浏览器页面关闭window.close()的使用详解
2020/08/21 Javascript
关于pip的安装,更新,卸载模块以及使用方法(详解)
2017/05/19 Python
Python学习之用pygal画世界地图实例
2017/12/07 Python
python一键去抖音视频水印工具
2018/09/14 Python
python清除字符串前后空格函数的方法
2018/10/21 Python
如何用Python破解wifi密码过程详解
2019/07/12 Python
在pycharm中文件取消用 pytest模式打开的操作
2020/09/01 Python
在PyCharm中安装PaddlePaddle的方法
2021/02/05 Python
html5+css3实现一款注册表单实例
2013/04/17 HTML / CSS
绘画设计学生的个人自我评价
2013/09/20 职场文书
八年级英语教学反思
2014/01/09 职场文书
2014年新生军训方案
2014/05/01 职场文书
学术研讨会欢迎词
2015/01/26 职场文书
教你用eclipse连接mysql数据库
2021/04/22 MySQL
基于JavaScript实现年月日三级联动
2021/06/22 Javascript