python中最小二乘法详细讲解

作者:宋宋大人 时间:2022-02-12 22:33:07 

python中在实现一元线性回归时会使用最小二乘法,那你知道最小二乘法是什么吗。其实最小二乘法为分类回归算法的基础,从求解线性透视图中的消失点,m元n次函数的拟合,包括后来学到的神经网络,其思想归根结底全都是最小二乘法。本文向大家介绍python中的最小二乘法。

一、最小二乘法是什么

最小二乘 * east 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)

来源:https://www.py.cn/jishu/jichu/24530.html

标签:python,最小二乘法
0
投稿

猜你喜欢

  • Python Collatz序列实现过程解析

    2023-01-11 18:26:23
  • PyCharm使用Docker镜像搭建Python开发环境

    2021-09-24 21:41:16
  • Matplotlib绘制条形图的方法你知道吗

    2022-12-05 15:23:59
  • python进程管理工具supervisor使用实例

    2022-08-24 13:47:03
  • python 将对象设置为可迭代的两种实现方法

    2023-08-24 18:01:39
  • MySQL 数据库存储和分支

    2011-03-11 19:01:00
  • python实现可视化动态CPU性能监控

    2023-08-08 10:23:52
  • 用javascript 转换外部链接样式

    2007-09-17 10:48:00
  • 基于Python组装jmx并调用JMeter实现压力测试

    2023-05-03 04:42:20
  • Python实现从多表格中随机抽取数据

    2022-07-01 01:58:18
  • 请正确认识MySQL对服务器端光标的限制

    2008-12-17 14:58:00
  • 了解ASP的基本语法和变量

    2008-01-16 13:03:00
  • 学以致用 驳“ASP低能论”

    2007-09-30 13:01:00
  • FCKeditor编辑器基本配置优化修改使用方法

    2008-12-31 13:32:00
  • 设计能力决定权力

    2009-06-16 14:48:00
  • Python的加密模块md5、sha、crypt使用实例

    2022-02-17 14:44:44
  • 有时应该告诉我,但有时不应该告诉我

    2009-03-19 13:40:00
  • 详解django中自定义标签和过滤器

    2021-02-16 19:43:38
  • Python处理字符串的常用函数实例总结

    2022-10-19 21:09:39
  • 如何使用数据绑定控件实现不换页提交数据?

    2010-05-16 15:17:00
  • asp之家 网络编程 m.aspxhome.com