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中的变量、引用、拷贝和作用域的问题
Apr 07 Python
Python实现计算两个时间之间相差天数的方法
May 10 Python
Scrapy框架CrawlSpiders的介绍以及使用详解
Nov 29 Python
python @property的用法及含义全面解析
Feb 01 Python
django+mysql的使用示例
Nov 23 Python
Python实现最大子序和的方法示例
Jul 05 Python
python3中eval函数用法使用简介
Aug 02 Python
使用Python爬虫库requests发送表单数据和JSON数据
Jan 25 Python
解决安装新版PyQt5、PyQT5-tool后打不开并Designer.exe提示no Qt platform plugin的问题
Apr 24 Python
Keras 利用sklearn的ROC-AUC建立评价函数详解
Jun 15 Python
python实现图书馆抢座(自动预约)功能的示例代码
Sep 29 Python
教你怎么用python selenium实现自动化测试
May 27 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版自动生成文章摘要
2008/07/23 PHP
PHP数据库调用类调用实例(详细注释)
2012/07/12 PHP
服务器上配置PHP运行环境教程
2015/02/12 PHP
javascript里的条件判断
2007/02/27 Javascript
推荐一些非常不错的javascript学习资源站点
2007/08/29 Javascript
js中访问html中iframe的文档对象的代码[IE6,IE7,IE8,FF]
2011/01/08 Javascript
JavaScript将XML转成JSON的方法
2015/03/12 Javascript
js实现带有介绍的Select列表菜单实例
2015/08/18 Javascript
javascript实现获取浏览器版本、浏览器类型
2015/12/02 Javascript
微信小程序 wxapp内容组件 progress详细介绍
2016/10/31 Javascript
解决BootStrap Fileinput手机图片上传显示旋转问题
2017/06/01 Javascript
微信小程序如何访问公众号文章
2019/07/08 Javascript
layui多图上传实现删除功能的例子
2019/09/23 Javascript
python复制文件代码实现
2013/12/23 Python
关于你不想知道的所有Python3 unicode特性
2014/11/28 Python
利用Python中的输入和输出功能进行读取和写入的教程
2015/04/14 Python
python执行等待程序直到第二天零点的方法
2015/04/23 Python
Python Matplotlib库入门指南
2015/05/18 Python
Python线程下使用锁的技巧分享
2018/09/13 Python
Python通过TensorFlow卷积神经网络实现猫狗识别
2019/03/14 Python
对python 树状嵌套结构的实现思路详解
2019/08/09 Python
python实现简单的购物程序代码实例
2020/03/03 Python
Python抖音快手代码舞(字符舞)的实现方法
2021/02/07 Python
纯HTML5+CSS3制作生日蛋糕(代码易懂)
2016/11/16 HTML / CSS
软件测试常见笔试题
2012/02/04 面试题
业务员薪酬管理制度
2014/01/15 职场文书
消防安全标语
2014/06/07 职场文书
工厂车间标语
2014/06/19 职场文书
公证委托书标准格式
2014/09/11 职场文书
死亡证明书样本说明
2014/10/18 职场文书
第二批党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
2014年教师个人工作总结
2014/11/10 职场文书
2014年图书室工作总结
2014/12/09 职场文书
电影雨中的树观后感
2015/06/15 职场文书
公司管理建议书
2015/09/14 职场文书
小学毕业教师寄语
2019/06/21 职场文书