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聊天室实例程序分享
Jan 05 Python
用Python逐行分析文件方法
Jan 28 Python
Python实现E-Mail收集插件实例教程
Feb 06 Python
Python实现多线程/多进程的TCP服务器
Sep 03 Python
Python英文文章词频统计(14份剑桥真题词频统计)
Oct 13 Python
python如何使用jt400.jar包代码实例
Dec 20 Python
关于tf.reverse_sequence()简述
Jan 20 Python
Python 读取xml数据,cv2裁剪图片实例
Mar 10 Python
Pandas将列表(List)转换为数据框(Dataframe)
Apr 24 Python
Python通过zookeeper实现分布式服务代码解析
Jul 22 Python
Python使用Pygame绘制时钟
Nov 29 Python
Python使用tkinter实现小时钟效果
Feb 22 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下删除字符串中HTML标签的函数
2008/08/27 PHP
PHP之密码加密的几种方式
2015/07/29 PHP
PHP中的session安全吗?
2016/01/22 PHP
PHP实现Session入库/存入redis的方法
2017/05/04 PHP
jquery在IE、FF浏览器的差别详细探讨
2013/04/28 Javascript
jQuery Animation实现CSS3动画示例介绍
2013/08/14 Javascript
javascript阻止浏览器后退事件防止误操作清空表单
2013/11/22 Javascript
JavaScript基础重点(必看)
2016/07/09 Javascript
jQuery简单实现列表隐藏和显示效果示例
2016/09/12 Javascript
JS利用cookies设置每隔24小时弹出框
2017/04/20 Javascript
JavaScript模拟文件拖选框样式v1.0的实例
2017/08/04 Javascript
详解vue-cli本地环境API代理设置和解决跨域
2017/09/05 Javascript
使用jQuery动态设置单选框的选中效果
2018/12/06 jQuery
JS+canvas五子棋人机对战实现步骤详解
2020/06/04 Javascript
[38:30]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场2
2014/05/24 DOTA
跟老齐学Python之编写类之三子类
2014/10/11 Python
简单介绍使用Python解析并修改XML文档的方法
2015/10/15 Python
解决python3 urllib 链接中有中文的问题
2018/07/16 Python
python如何使用socketserver模块实现并发聊天
2019/12/14 Python
详解python中GPU版本的opencv常用方法介绍
2020/07/24 Python
python 8种必备的gui库
2020/08/27 Python
CSS3制作翻转效果_动力节点Java学院整理
2017/07/11 HTML / CSS
HTML5 创建canvas元素示例代码
2014/06/04 HTML / CSS
HTML5新特性之type=file文件上传功能
2018/02/02 HTML / CSS
保安拾金不昧表扬信
2014/01/15 职场文书
创业计划书的主要内容有哪些
2014/01/29 职场文书
开朗女孩的自我评价
2014/02/10 职场文书
爱护花草树木的标语
2014/06/11 职场文书
庆祝儿童节标语
2014/10/09 职场文书
工厂门卫岗位职责
2015/04/13 职场文书
写一个Python脚本自动爬取Bilibili小视频
2021/04/24 Python
redis 限制内存使用大小的实现
2021/05/08 Redis
Java中的随机数Random
2022/03/17 Java/Android
德生BCL3000抢先使用感受和评价
2022/04/07 无线电
JavaScript设计模式之原型模式详情
2022/06/21 Javascript