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中nan与inf转为特定数字方法示例
May 11 Python
Python数据结构之哈夫曼树定义与使用方法示例
Apr 22 Python
python获取指定字符串中重复模式最高的字符串方法
Jun 29 Python
Python 移动光标位置的方法
Jan 20 Python
对Python 获取类的成员变量及临时变量的方法详解
Jan 22 Python
Python获取当前脚本文件夹(Script)的绝对路径方法代码
Aug 27 Python
python ubplot使用方法解析
Jan 10 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
Mar 10 Python
基于python实现计算且附带进度条代码实例
Mar 31 Python
Python 通过监听端口实现唯一脚本运行方式
May 05 Python
python os模块在系统管理中的应用
Jun 22 Python
pytorch学习教程之自定义数据集
Nov 10 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加速 eAccelerator配置和使用指南
2009/06/05 PHP
php基础学习之变量的使用
2011/06/09 PHP
一个不错的用JavaScript实现的UBB编码函数
2007/03/09 Javascript
解决jquery .ajax 在IE下卡死问题的解决方法
2009/10/26 Javascript
基于Jquery的动态添加控件并取值的实现代码
2010/09/24 Javascript
Javascript delete 引用类型对象
2013/11/01 Javascript
jquery 快速回到页首的方法
2013/12/05 Javascript
jQuery在iframe中无法弹出对话框的解决方法
2014/01/12 Javascript
JavaScript实现的图像模糊算法代码分享
2014/04/22 Javascript
JS实现在页面随时自定义背景颜色的方法
2015/02/27 Javascript
KnockoutJS 3.X API 第四章之表单textInput、hasFocus、checked绑定
2016/10/11 Javascript
Vue2.x中的Render函数详解
2017/05/30 Javascript
基于vue.js无缝滚动效果
2018/01/25 Javascript
Vue 页面切换效果之 BubbleTransition(推荐)
2018/04/08 Javascript
React-router4路由监听的实现
2018/08/07 Javascript
vue.js单文件组件中非父子组件的传值实例
2018/09/13 Javascript
使用Jenkins部署React项目的方法步骤
2019/03/11 Javascript
解决layui table表单提示数据接口请求异常的问题
2019/09/24 Javascript
JS实现TITLE悬停长久显示效果完整示例
2020/02/11 Javascript
jQuery实现tab栏切换效果
2020/12/22 jQuery
介绍Python中几个常用的类方法
2015/04/08 Python
使用Python写CUDA程序的方法
2017/03/27 Python
Python使用正则表达式实现文本替换的方法
2017/04/18 Python
python实时分析日志的一个小脚本分享
2017/05/07 Python
Python中标准库OS的常用方法总结大全
2017/07/19 Python
浅谈Python 多进程默认不能共享全局变量的问题
2019/01/11 Python
Python拆分大型CSV文件代码实例
2019/10/07 Python
python异常处理、自定义异常、断言原理与用法分析
2020/03/23 Python
python实现坦克大战
2020/04/24 Python
纯CSS3发光分享按钮的实现教程
2014/09/06 HTML / CSS
创业计划书六个要素
2013/12/26 职场文书
财务会计人员求职的自我评价
2014/01/13 职场文书
酒店总经理助理职责
2014/02/12 职场文书
销售员求职个人的自我评价
2014/02/19 职场文书
西游降魔篇观后感
2015/06/15 职场文书
初中政教处工作总结
2015/08/12 职场文书