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新手经常遇到的17个错误分析
Jul 30 Python
python删除列表内容
Aug 04 Python
python 排序算法总结及实例详解
Sep 28 Python
教你学会使用Python正则表达式
Sep 07 Python
Python3安装Scrapy的方法步骤
Nov 23 Python
详解pandas删除缺失数据(pd.dropna()方法)
Jun 25 Python
Form表单及django的form表单的补充
Jul 25 Python
基于Python2、Python3中reload()的不同用法介绍
Aug 12 Python
python如何将两张图片生成为全景图片
Mar 05 Python
Python实现自动装机功能案例分析
Oct 22 Python
Python命令行参数定义及需要注意的地方
Nov 30 Python
Django如何重置migration的几种情景
Feb 24 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 显示指定路径下的图片
2009/10/29 PHP
php使用wordwrap格式化文本段落的方法
2015/03/17 PHP
php 读写json文件及修改json的方法
2018/03/07 PHP
事件模型在各浏览器中存在差异
2010/10/20 Javascript
JS中prototype的用法实例分析
2015/03/19 Javascript
JS或jQuery获取ASP.NET服务器控件ID的方法
2015/06/08 Javascript
JavaScript检查子字符串是否在字符串中的方法
2016/02/03 Javascript
js实现点击图片自动提交action的简单方法
2016/10/16 Javascript
jquery延迟对象解析
2016/10/26 Javascript
从零开始做一个pagination分页组件
2017/03/15 Javascript
vue-router+vuex addRoutes实现路由动态加载及菜单动态加载
2017/09/28 Javascript
AngularJS实现动态切换样式的方法分析
2018/06/26 Javascript
jquery 回调操作实例分析【回调成功与回调失败的情况】
2019/09/27 jQuery
Vue学习之组件用法实例详解
2020/01/06 Javascript
Node Express用法详解【安装、使用、路由、中间件、模板引擎等】
2020/05/13 Javascript
vue中是怎样监听数组变化的
2020/10/24 Javascript
Python  连接字符串(join %)
2008/09/06 Python
利用Python的Flask框架来构建一个简单的数字商品支付解决方案
2015/03/31 Python
python爬取51job中hr的邮箱
2016/05/14 Python
Python中关键字nonlocal和global的声明与解析
2017/03/12 Python
Python进阶-函数默认参数(详解)
2017/05/18 Python
TensorFlow安装及jupyter notebook配置方法
2017/09/08 Python
Python多进程multiprocessing.Pool类详解
2018/04/27 Python
Python利用lxml模块爬取豆瓣读书排行榜的方法与分析
2019/04/15 Python
Python3中函数参数传递方式实例详解
2019/05/05 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
2020/05/12 Python
肯尼亚网上商城:Kilimall
2016/08/20 全球购物
ShellScript面试题一则-ShellScript编程
2014/03/05 面试题
JVM是一个编译程序还是解释程序
2012/09/11 面试题
考试不及格的检讨书
2014/01/22 职场文书
《中国梦我的梦》小学生演讲稿
2014/08/20 职场文书
感谢信的格式
2015/01/21 职场文书
员工家属慰问信
2015/03/24 职场文书
单位计划生育责任书
2015/05/09 职场文书
Python之matplotlib绘制折线图
2022/04/13 Python
create-react-app开发常用配置教程
2022/06/25 Javascript