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 参数列表中的self 显式不等于冗余
Dec 01 Python
python抓取京东价格分析京东商品价格走势
Jan 09 Python
django model去掉unique_together报错的解决方案
Oct 18 Python
Python3 replace()函数使用方法
Mar 19 Python
Centos 升级到python3后pip 无法使用的解决方法
Jun 12 Python
解读python如何实现决策树算法
Oct 11 Python
Python实现KNN(K-近邻)算法的示例代码
Mar 05 Python
详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果
May 07 Python
python读取指定字节长度的文本方法
Aug 27 Python
python 爬虫百度地图的信息界面的实现方法
Oct 27 Python
python实现二分类的卡方分箱示例
Nov 22 Python
Python 高级库15 个让新手爱不释手(推荐)
May 15 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
数据库的日期格式转换
2006/10/09 PHP
php生成扇形比例图实例
2013/11/06 PHP
php mysql数据库操作类(实例讲解)
2017/08/06 PHP
PHP PDOStatement::errorCode讲解
2019/01/31 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
2020/03/27 PHP
javascript 的Document属性和方法集合
2010/01/25 Javascript
javascript 获取所有id中包含某关键字的控件的实现代码
2010/11/25 Javascript
js点击更换背景颜色或图片的实例代码
2013/06/25 Javascript
jquery异步跨域访问代码
2013/06/28 Javascript
javascript计算用户打开网页的停留时间
2014/01/09 Javascript
jQuery获取(选中)单选,复选框,下拉框中的值
2014/02/21 Javascript
jquery如何获取元素的滚动条高度等实现代码
2015/10/19 Javascript
javascript产生随机数方法汇总
2016/01/25 Javascript
JS实用的带停顿的逐行文本循环滚动效果实例
2016/11/23 Javascript
基于javascript的Form表单验证
2016/12/29 Javascript
Three.js利用顶点绘制立方体的方法详解
2017/09/27 Javascript
vue.js开发实现全局调用的MessageBox组件实例代码
2017/11/22 Javascript
JavaScript实现文件下载并重命名代码实例
2019/12/12 Javascript
如何通过vscode运行调试javascript代码
2020/07/24 Javascript
python之import机制详解
2014/07/03 Python
深入理解python多进程编程
2016/06/12 Python
Python环境变量设置方法
2016/08/28 Python
python生成不重复随机数和对list乱序的解决方法
2018/04/09 Python
Windows下Anaconda2安装NLTK教程
2018/09/19 Python
如何利用pygame实现简单的五子棋游戏
2019/12/29 Python
解析PyCharm Python运行权限问题
2020/01/08 Python
吉力贝官方网站:Jelly Belly
2019/03/11 全球购物
城市规划毕业生求职信
2013/10/10 职场文书
新婚姻法离婚协议书范文
2014/11/30 职场文书
2015年学雷锋活动总结
2015/02/06 职场文书
努力工作保证书
2015/02/28 职场文书
小学语文教师研修感悟
2015/11/18 职场文书
2016大一新生军训心得体会
2016/01/11 职场文书
《失物招领》教学反思
2016/02/20 职场文书
写作技巧:怎样写好一份优秀工作总结?
2019/08/14 职场文书
导游词之阆中古城
2019/12/23 职场文书