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实现将n个点均匀地分布在球面上的方法
Mar 12 Python
Python中列表的一些基本操作知识汇总
May 20 Python
运用TensorFlow进行简单实现线性回归、梯度下降示例
Mar 05 Python
Python 正则表达式匹配字符串中的http链接方法
Dec 25 Python
在Qt中正确的设置窗体的背景图片的几种方法总结
Jun 19 Python
pandas.cut具体使用总结
Jun 24 Python
python按修改时间顺序排列文件的实例代码
Jul 25 Python
Python 简单计算要求形状面积的实例
Jan 18 Python
Python3 Click模块的使用方法详解
Feb 12 Python
python软件都是免费的吗
Jun 18 Python
Python通过format函数格式化显示值
Oct 17 Python
Autopep8的使用(python自动编排工具)
Mar 02 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 正则表达式小结
2009/08/31 PHP
php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
2010/10/22 PHP
php流量统计功能的实现代码
2012/09/29 PHP
ThinkPHP访问不存在的模块跳转到404页面的方法
2014/06/19 PHP
PHP实现的json类实例
2015/07/28 PHP
javascript 控制弹出窗口
2007/04/10 Javascript
js活用事件触发对象动作
2008/08/10 Javascript
JQuery+CSS提示框实现思路及代码(纯手工打造)
2013/05/07 Javascript
extjs表格文本启用选择复制功能具体实现
2013/10/11 Javascript
JavaScript中的console.dir()函数介绍
2014/12/29 Javascript
Javascript非构造函数的继承
2015/04/27 Javascript
javascript页面倒计时实例
2015/07/25 Javascript
js实现页面刷新滚动条位置不变
2016/11/27 Javascript
微信小程序 定位到当前城市实现实例代码
2017/02/23 Javascript
微信小程序新增的拖动组件movable-view使用教程
2017/05/20 Javascript
vue中路由参数传递可能会遇到的坑
2017/12/07 Javascript
Vue+Jwt+SpringBoot+Ldap完成登录认证的示例代码
2018/05/21 Javascript
Vue2.2.0+新特性整理及注意事项
2018/08/22 Javascript
新手入门js闭包学习过程解析
2019/10/08 Javascript
vue 实现强制类型转换 数字类型转为字符串
2019/11/07 Javascript
解决vue+elementui项目打包后样式变化问题
2020/08/03 Javascript
JSON 入门教程基础篇 json入门学习笔记
2020/09/22 Javascript
[09:34]2018DOTA2国际邀请赛寻真——永不放弃的iG
2018/08/14 DOTA
Python实现简单拆分PDF文件的方法
2015/07/30 Python
Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法
2018/05/04 Python
Python切片操作去除字符串首尾的空格
2019/04/22 Python
python实现发送form-data数据的方法详解
2019/09/27 Python
浅谈keras保存模型中的save()和save_weights()区别
2020/05/21 Python
Bose法国官网:购买耳机、扬声器、家庭影院、专业音响
2017/12/21 全球购物
经理管理专业毕业自荐书范文
2014/02/12 职场文书
2014元旦晚会策划方案
2014/02/19 职场文书
提拔干部考察材料
2014/05/26 职场文书
贪污检举信范文
2015/03/02 职场文书
100句拼搏进取的名言警句,值得一读!
2019/10/07 职场文书
MySQL之高可用集群部署及故障切换实现
2021/04/22 MySQL
教你用Java在个人电脑上实现微信扫码支付
2021/06/13 Java/Android