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探索之静态方法和类方法的区别详解
Oct 27 Python
python3利用tcp实现文件夹远程传输
Jul 28 Python
pygame游戏之旅 计算游戏中躲过的障碍数量
Nov 20 Python
简单易懂Pytorch实战实例VGG深度网络
Aug 27 Python
关于sys.stdout和print的区别详解
Dec 05 Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
Feb 07 Python
django实现模型字段动态choice的操作
Apr 01 Python
xadmin使用formfield_for_dbfield函数过滤下拉表单实例
Apr 07 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
Nov 05 Python
如何用Django处理gzip数据流
Jan 29 Python
关于Numpy之repeat、tile的用法总结
Jun 02 Python
Python 一键获取电脑浏览器的账号密码
May 11 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 clearstatcache()函数详解
2010/03/02 PHP
php 随机记录mysql rand()造成CPU 100%的解决办法
2010/05/18 PHP
php正则过滤html标签、空格、换行符的代码(附说明)
2010/10/25 PHP
用PHP实现 上一篇、下一篇的代码
2012/09/29 PHP
php并发对MYSQL造成压力的解决方法
2013/02/21 PHP
PHP设计模式之结构模式的深入解析
2013/06/13 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
2017/12/25 PHP
PHP实现cookie跨域session共享的方法分析
2019/08/23 PHP
php libevent 功能与使用方法详解
2020/03/04 PHP
JsEasy简介 JsEasy是什么?与下载
2007/03/07 Javascript
jQuery 注意事项 与原因分析
2009/04/24 Javascript
用jQuery打造TabPanel效果代码
2010/05/22 Javascript
Js 冒泡事件阻止实现代码
2013/01/27 Javascript
javascript中substring()、substr()、slice()的区别
2015/08/30 Javascript
详解AngularJS中自定义过滤器
2015/12/28 Javascript
【经典源码收藏】jQuery实用代码片段(筛选,搜索,样式,清除默认值,多选等)
2016/06/07 Javascript
element-ui 中的table的列隐藏问题解决
2018/08/24 Javascript
RxJS的入门指引和初步应用
2019/06/15 Javascript
JavaScript迭代器的含义及用法
2019/06/21 Javascript
JavaScript或jQuery 获取option value值方法解析
2020/05/12 jQuery
Python datetime时间格式化去掉前导0
2014/07/31 Python
Python中__call__用法实例
2014/08/29 Python
Python的Django框架使用入门指引
2015/04/15 Python
Python基本语法之运算符功能与用法详解
2019/10/22 Python
Python发起请求提示UnicodeEncodeError错误代码解决方法
2020/04/21 Python
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
2021/01/27 Python
html5 Canvas画图教程(11)—使用lineTo/arc/bezierCurveTo画椭圆形
2013/01/09 HTML / CSS
Elemental Herbology官网:英国美容品牌
2019/04/27 全球购物
美国最大的户外装备和服装购物网站:Backcountry
2019/10/15 全球购物
协议书的格式
2014/04/23 职场文书
反腐倡廉警示教育活动总结
2014/05/05 职场文书
档案管理员岗位职责
2015/02/12 职场文书
物流仓管员岗位职责
2015/04/01 职场文书
教研活动主持词
2015/07/03 职场文书
python 爬取京东指定商品评论并进行情感分析
2021/05/27 Python
MySQL系列之七 MySQL存储引擎
2021/07/02 MySQL