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 相关文章推荐
精确查找PHP WEBSHELL木马的方法(1)
Apr 12 Python
浅谈python爬虫使用Selenium模拟浏览器行为
Feb 23 Python
TensorFlow实现非线性支持向量机的实现方法
Apr 28 Python
Python中的延迟绑定原理详解
Oct 11 Python
django框架单表操作之增删改实例分析
Dec 16 Python
详解Python 重学requests发起请求的基本方式
Feb 07 Python
Python基础类继承重写实现原理解析
Apr 03 Python
Pycharm中安装wordcloud等库失败问题及终端通过pip安装的Python库如何添加到Pycharm解释器中(推荐)
May 10 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
May 27 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
Jun 27 Python
Python实现Canny及Hough算法代码实例解析
Aug 06 Python
python批量合成bilibili的m4s缓存文件为MP4格式 ver2.5
Dec 01 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 array_flip() 删除数组重复元素
2009/01/14 PHP
php中使用explode查找某个字符是否存在的方法
2011/07/12 PHP
无刷新动态加载数据 滚动条加载适合评论等页面
2013/10/16 PHP
jQuery 使用手册(一)
2009/09/23 Javascript
利用js获取服务器时间的两个简单方法
2010/01/08 Javascript
文字不间断滚动(上下左右)实例代码
2013/04/21 Javascript
Jquery 类网页微信二维码图块滚动效果具体实现
2013/10/14 Javascript
js(JavaScript)实现TAB标签切换效果的简单实例
2014/02/26 Javascript
简单介绍JavaScript的变量和数据类型
2015/06/03 Javascript
Windows下用PyCharm和Visual Studio开始Python编程
2015/10/26 Javascript
深入理解jquery跨域请求方法
2016/05/18 Javascript
表单input项使用label同时引用Bootstrap库导致input点击效果区增大问题
2016/10/11 Javascript
javascript监听页面刷新和页面关闭事件方法详解
2017/01/09 Javascript
node.js利用redis数据库缓存数据的方法
2017/03/01 Javascript
微信小程序 图片上传实例详解
2017/05/05 Javascript
详解jQuery中关于Ajax的几个常用的函数
2017/07/17 jQuery
解决vue 更改计算属性后select选中值不更改的问题
2018/03/02 Javascript
详解Vue2 添加对scss的支持
2019/01/02 Javascript
JS代码检查工具ESLint介绍与使用方法
2020/02/04 Javascript
vue 在methods中调用mounted的实现操作
2020/08/07 Javascript
python通过cookie模拟已登录状态的初步研究
2016/11/09 Python
python中装饰器级连的使用方法示例
2017/09/29 Python
对python中字典keys,values,items的使用详解
2019/02/03 Python
Python连接Hadoop数据中遇到的各种坑(汇总)
2020/04/14 Python
Python如何用wx模块创建文本编辑器
2020/06/07 Python
Python+Opencv身份证号码区域提取及识别实现
2020/08/25 Python
中国领先的专业演出票务网:永乐票务
2016/08/29 全球购物
英国领先的互联网葡萄酒礼品商:Vintage Wine & Port
2019/05/24 全球购物
电脑教师的教学自我评价
2013/11/26 职场文书
一年级学生评语大全
2014/04/21 职场文书
亚运会口号
2014/06/20 职场文书
神农溪导游词
2015/02/11 职场文书
小班上学期个人总结
2015/02/12 职场文书
公司内部升职自荐信
2015/03/27 职场文书
2016秋季运动会前导词
2015/11/25 职场文书
Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)
2021/05/27 Servers