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基础教程之自定义函数介绍
Aug 29 Python
在IIS服务器上以CGI方式运行Python脚本的教程
Apr 25 Python
python常见排序算法基础教程
Apr 13 Python
python 正确保留多位小数的实例
Jul 16 Python
详解Python函数式编程—高阶函数
Mar 29 Python
关于Python中的向量相加和numpy中的向量相加效率对比
Aug 26 Python
python实现最大优先队列
Aug 29 Python
Python之Numpy的超实用基础详细教程
Oct 23 Python
Python实现使用dir获取类的方法列表
Dec 24 Python
详解pandas绘制矩阵散点图(scatter_matrix)的方法
Apr 23 Python
520使用Python实现“我爱你”表白
May 20 Python
python前后端自定义分页器
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 数组遍历方法大全(foreach,list,each)
2010/06/30 PHP
php数据结构 算法(PHP描述) 简单选择排序 simple selection sort
2011/08/09 PHP
PHP清除字符串中所有无用标签的方法
2014/12/01 PHP
php获取、检查类名、函数名、方法名的函数方法
2015/06/25 PHP
php技术实现加载字体并保存成图片
2015/07/27 PHP
php基于dom实现的图书xml格式数据示例
2017/02/03 PHP
PHP实现简单日历类编写
2020/08/28 PHP
各种效果的jquery ui(接口)介绍
2008/09/17 Javascript
ExtJS GTGrid 简单用户管理
2009/07/01 Javascript
Javascript json object 与string 相互转换的简单实现
2016/09/27 Javascript
js仿支付宝多方框输入支付密码效果
2016/09/27 Javascript
javascript按钮禁用和启用的效果实例代码
2017/10/29 Javascript
Vue中对iframe实现keep alive无刷新的方法
2019/07/23 Javascript
vue中 this.$set的用法详解
2019/09/06 Javascript
jQuery是用来干什么的 jquery其实就是一个js框架
2021/02/04 jQuery
浅谈python socket函数中,send与sendall的区别与使用方法
2017/05/09 Python
用python与文件进行交互的方法
2018/03/01 Python
python flask框架实现传数据到js的方法分析
2019/06/11 Python
深入了解Python在HDA中的应用
2019/09/05 Python
Python3爬虫mitmproxy的安装步骤
2020/07/29 Python
15款Python编辑器的优缺点,别再问我“选什么编辑器”啦
2020/10/19 Python
一款纯css3实现的漂亮的404页面的实例教程
2014/11/27 HTML / CSS
CSS3中Transition动画属性用法详解
2016/07/04 HTML / CSS
Snapfish爱尔兰:在线照片打印和个性化照片礼品
2018/09/17 全球购物
linux面试题参考答案(6)
2014/08/29 面试题
毕业生造价工程师求职信
2013/10/17 职场文书
简历的自荐信
2013/12/19 职场文书
30年同学聚会邀请函
2014/01/25 职场文书
网络技术专业求职信
2014/02/18 职场文书
服务行业口号
2014/06/11 职场文书
实验室的标语
2014/06/20 职场文书
学生自我评语
2015/01/04 职场文书
周恩来的四个昼夜观后感
2015/06/03 职场文书
盲山观后感
2015/06/11 职场文书
python四个坐标点对图片区域最小外接矩形进行裁剪
2021/06/04 Python
python中字符串String及其常见操作指南(方法、函数)
2022/04/06 Python