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列表去重方法
Jan 17 Python
Python基于list的append和pop方法实现堆栈与队列功能示例
Jul 24 Python
python实现二分查找算法
Sep 21 Python
python如何统计序列中元素
Jul 31 Python
解决Python print输出不换行没空格的问题
Nov 14 Python
Python日期时间Time模块实例详解
Apr 15 Python
django框架cookie和session用法实例详解
Dec 10 Python
Python-opencv 双线性插值实例
Jan 17 Python
Python sqlite3查询操作过程解析
Feb 20 Python
详解vscode实现远程linux服务器上Python开发
Nov 10 Python
python自动化测试之Selenium详解
Mar 13 Python
python神经网络ResNet50模型
May 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
需要使用php模板的朋友必看的很多个顶级PHP模板引擎比较分析
2008/05/26 PHP
php Smarty 字符比较代码
2011/02/27 PHP
使用php伪造referer的方法 利用referer防止图片盗链
2014/01/20 PHP
php快速排序原理与实现方法分析
2016/05/26 PHP
PHP图片水印类的封装
2017/07/06 PHP
关于Curl在Swoole协程中的解决方案详析
2019/09/12 PHP
HTML TO JavaScript 转换
2006/06/26 Javascript
js 设置缓存及获取设置的缓存
2014/05/08 Javascript
JavaScript日期时间与时间戳的转换函数分享
2015/01/31 Javascript
jQuery消息提示框插件Tipso
2015/05/04 Javascript
基于JS实现的倒计时程序实例
2015/07/24 Javascript
js文本框走动跑马灯效果代码分享
2015/08/25 Javascript
轻松掌握JavaScript中介者模式
2016/08/26 Javascript
Vue-router的使用和出现空白页,路由对象属性详解
2018/09/03 Javascript
微信小程序自定义支持图片的弹窗
2020/12/21 Javascript
python根据出生年份简单计算生肖的方法
2015/03/27 Python
简单介绍Python中的filter和lambda函数的使用
2015/04/07 Python
用Python徒手撸一个股票回测框架搭建【推荐】
2019/08/05 Python
利用Python复制文件的9种方法总结
2019/09/02 Python
PyTorch预训练的实现
2019/09/18 Python
python系统指定文件的查找只输出目录下所有文件及文件夹
2020/01/19 Python
Python变量作用域LEGB用法解析
2020/02/04 Python
Django-rest-framework中过滤器的定制实例
2020/04/01 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
2020/07/03 Python
python爬虫使用scrapy注意事项
2020/11/23 Python
详解canvas drawImage()方法绘制图片不显示的问题
2018/10/08 HTML / CSS
科茨沃尔德家居商店:Scotts of Stow
2018/06/29 全球购物
如何估计一张表的大小(假设该表中有1万条数据)
2016/03/27 面试题
毕业生求职找工作的自我评价范文
2013/11/27 职场文书
行政总监岗位职责
2013/12/05 职场文书
机工车间主任岗位职责
2014/03/05 职场文书
市场策划求职信
2014/08/07 职场文书
欠条格式范本
2015/07/03 职场文书
创业计划书之个人工作室
2019/08/22 职场文书
golang import自定义包方式
2021/04/29 Golang
Pygame游戏开发之太空射击实战敌人精灵篇
2022/08/05 Python