python中最小二乘法详细讲解
作者:宋宋大人 发布时间:2022-02-12 22:33:07
标签:python,最小二乘法
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的日志记录模块,于是便学习了一下。python的标准库里的日志系统从Python2.3开始支持。只要
- 本文实例为大家分享了vue更多筛选项小组件的实现方法,供大家参考,具体内容如下效果:就是一个简单的小效果,当有很多筛选条件时,默认只展示几项
- 代码如下:CREATE TABLE #tmptb(tbname sysname,tbrows int ,tbREserved varchar
- 在使用lepus3.7监控MySQL数据库的时候,碰到了以下几个问题,本博客给出了这些问题产生的原因,以及相应的解决办法。1. 问
- MYSQL中批量替换某个字段的部分数据,具体介绍如下所示:1.修改字段里的所有含有指定字符串的文字UPDATE 表A SET 字段B = r
- 1.SQL Server2019安装包下载1.1进入官网SQL Server 20191.2下载安装包1点击Continue2.填写个人信息
- 和我之前写的通过导入jdbc驱动jar包来连接mysql数据库而言,用mybatis来说可以有很多好处呀,首先mybatis,就是对jdbc
- 本文实例为大家分享了Linux下MySQL 5.6.27 安装教程,供大家参考,具体内容如下1、下载地址https://cdn.mysql.
- 最近一直在研究 Javascript 相关的技术。在《Javascript 高级程序设计》有篇章节着重阐述了优化 Javascri
- 对于三目运算符(ternary operator),python可以用conditional expressions来替代如对于x<5
- 如果遇到下述错误,表示当启动mysqld时或重新加载授权表时,在用户表中发现具有非法密码的账户。发现用户'some_user'
- 不同的色彩空间中对图片的色彩体现有很大不同#色彩空间的相互转换:最常见的是HSV与RGB,YUV与RGB的相互转换#常见色彩空间有:#RGB
- 概述concurrent.futures 是 3.2 中引入的新模块,它为异步执行可调用对象提供了高层接口。可以使用 ThreadPoolE
- 1、PRIMARY KEY上期我们讲述了 not null 和 unique 约束,而本期的第一个约束就是这俩的结合体,也成为主键约束。主键
- 导言在前两章的做的DataList的例子里我们都是使用单列的HTML<table>来显示数据.而自定义使DataList将数据显
- 前言在使用传统物理机或云服务器上部署项目都会存在一些痛点比如:项目部署速度慢、资源浪费、迁移难且扩展低而使用 Docker 部署项目的优势包
- 针对16G内存的配置tmp_table_size = 64M先说下tmp_table_size吧:它规定了内部内存临时表的最大值,每个线程都
- 使用OpenCV's Haar cascades作为人脸检测,因为他做好了库,我们只管使用。代码简单,除去注释,总共有效代码只有10
- 弹性管理 ECS 实例获取 RAM 子账号 AK 密钥使用API管理ECS实例,您需要能访问ECS资源的API密钥(AccessKey ID
- 前言:在开发中经常会与时间打交道,如:获取事件戳,时间戳的格式化等,这里简要记录一下python操作时间的方法。python中常见的处理时间