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中文问题解决方法(总结了多位前人经验,初学者必看)
Mar 13 Python
在Linux下使用Python的matplotlib绘制数据图的教程
Jun 11 Python
简介Python设计模式中的代理模式与模板方法模式编程
Feb 02 Python
python字典多键值及重复键值的使用方法(详解)
Oct 31 Python
浅谈python中的实例方法、类方法和静态方法
Feb 17 Python
基于Linux系统中python matplotlib画图的中文显示问题的解决方法
Jun 15 Python
详解Python 模拟实现生产者消费者模式的实例
Aug 10 Python
实例讲解Python脚本成为Windows中运行的exe文件
Jan 24 Python
Python里字典的基本用法(包括嵌套字典)
Feb 27 Python
Python实现二叉树的常见遍历操作总结【7种方法】
Mar 06 Python
在Python中过滤Windows文件名中的非法字符方法
Jun 10 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
Oct 24 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的urlencode()URL编码函数浅析
2011/08/09 PHP
PHP多进程编程实例
2014/10/15 PHP
PHP 7.0.2 正式版发布
2016/01/08 PHP
thinkphp整合微信支付代码分享
2016/11/24 PHP
PHP简单实现合并2个数字键数组值的方法
2017/05/30 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
2017/09/17 PHP
关于URL中的特殊符号使用介绍
2011/11/03 Javascript
jquery数据验证插件(自制,简单,练手)实例代码
2013/10/24 Javascript
深入探寻javascript定时器
2015/01/02 Javascript
利用HTML5的画布Canvas实现刮刮卡效果
2015/09/06 Javascript
浅析js绑定事件的常用方法
2016/05/15 Javascript
JS实现的加减乘除四则运算计算器示例
2017/08/09 Javascript
mui 打开新窗口的方式总结及注意事项
2017/08/20 Javascript
JS实现的DOM插入节点操作示例
2018/04/04 Javascript
ES6 迭代器与可迭代对象的实现
2019/02/11 Javascript
深入学习TypeScript 、React、 Redux和Ant-Design的最佳实践
2019/06/17 Javascript
uni-app自定义导航栏按钮|uniapp仿微信顶部导航条功能
2019/11/12 Javascript
JavaScript 俄罗斯方块游戏实现方法与代码解释
2020/04/08 Javascript
在项目vue中使用echarts的操作步骤
2020/09/07 Javascript
python sqlobject(mysql)中文乱码解决方法
2008/11/14 Python
用不到50行的Python代码构建最小的区块链
2017/11/16 Python
Linux下python3.6.1环境配置教程
2018/09/26 Python
django和vue实现数据交互的方法
2019/08/21 Python
python装饰器代码深入讲解
2021/03/01 Python
一百多行代码实现react拖拽hooks
2021/03/23 Javascript
公司授权委托书
2014/04/04 职场文书
对祖国的寄语大全
2014/04/11 职场文书
大学生入党积极分子党校学习思想汇报
2014/10/25 职场文书
紫日观后感
2015/06/05 职场文书
企业安全生产规章制度
2015/08/06 职场文书
文明礼仪主题班会
2015/08/13 职场文书
致运动员的广播稿
2015/08/19 职场文书
给学校的建议书400字
2015/09/14 职场文书
家长对孩子的寒假评语
2015/10/09 职场文书
pyqt5蒙版遮罩mask,setmask的使用
2021/06/11 Python
关于 Python json中load和loads区别
2021/11/07 Python