最小二乘法则是一种统计学习优化技术,它的目标是最小化误差平方之和来作为目标J(θ)J(θ),从而找到最优模型。

7. SciPy最小二乘法

最小二乘法则是一种统计学习优化技术,它的目标是最小化误差平方之和来作为目标J(θ),从而找到最优模型。

1、线性最小二乘法

假设真实的模型是y=2x+1,我们有一组数据(xi,yi)共100个,看能否基于这100个数据找出xi和yi的线性关系方程y=2x+1?我们可以通过以下几步来完成。

1).首先是通过程序构造出100个(xi,yi)数据。

xi = x + np.random.normal(0, 0.05, 100)

yi = 1 + 2 * xi + np.random.normal(0, 0.05, 100)

2).接下来给出模型f(x)=a+bx的矩阵A,由于有100个观测(xi,yi)的数据,那么就有:

将以上式子写成如下矩阵的形式:

A = np.vstack([xi**0, xi**1])

AT即100×2的那个矩阵

3).调用scipy.linalg.lstsq传入AT和观测值里的yii即程序里的yi变量即可求得f(x)=a+bx里的a和b。a和b记录在lstsq函数的第一个返回值里。

sol, r, rank, s = la.lstsq(A.T, yi)

4). scipy.linalg.lstsq的第一个返回值sol共有两个值,sol[0]即是估计出来的f(x)=a+bx里a,sol[1]代表f(x)=a+bx里b。因此f(x)为:

y_fit = sol[0] + sol[1] * x

至此找到了这100个(xi,yi)的模型方程。从print sol语句的输出结果可以看出数据还是比较接近y=2x+1的。

完整的代码如下所示:

import scipy.linalg as la
import numpy as np
import matplotlib.pyplot as plt
m = 100
x = np.linspace(-1, 1, m)
y_exact = 1 + 2 * x
xi = x + np.random.normal(0, 0.05, 100)
yi = 1 + 2 * xi + np.random.normal(0, 0.05, 100)
A = np.vstack([xi**0, xi**1])
sol, r, rank, s = la.lstsq(A.T, yi) #求取各个系数大小
y_fit = sol[0] + sol[1] * x
fig, ax = plt.subplots(figsize=(12, 8))
ax.plot(xi, yi, 'go', alpha=0.5, label='Simulated data')
ax.plot(x, y_exact, 'k', lw=2, label='True value y = 1 + 2x')
ax.plot(x, y_fit, 'b', lw=2, label='Least square fit')
ax.set_xlabel("x", fontsize=18)
ax.set_ylabel(”y", fontsize=18)
ax.legend(loc=2) #设置曲线标注位置
plt.show()

2、二次函数最小二乘法
这个程序和上面的程序差不多,只不过模型变成了f(xi)=a+bx+cx2f(xi)=a+bx+cx2了而已,请自己分析分析。
完整程序如下:
import scipy.linalg as la
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-1, 1, 100)
a, b, c = 1, 2, 3
y_exact = a + b * x + c * x**2
m = 100
xi=1 - 2 * np.random.rand(m)
yi=a + b * xi + c * xi**2 + np.random.randn(m)
A = np.vstack([xi**0, xi**1, xi**2])
sol, r, rank, s = la.lstsq(A.T, yi)
y_fit = sol[0] + sol[1] * x + sol[2] * x**2
fig, ax = plt.subplots(figsize=(12, 4))
ax.plot(xi, yi, 'go', alpha=0.5, label='Simulated data')
ax.plot(x, y_exact, 'k', lw=2, label='True value $y = 1 + 2x + 3x^2$')
ax.plot(x, y_fit, 'b', lw=2, label='Least square fit')
ax.set_xlabel("x", fontsize=18)
ax.set_ylabel("y", fontsize=18)
ax.legend(loc=2)
plt.show()
具体结果展示如下:


 

pyhton scipy最小二乘法(scipy.linalg.lstsq模块)的更多相关文章

  1. 矩阵压缩写法 scipy spark.ml.linalg里都有,CRS,CCS

    CRS 表示:Compressed Row Storage CCS 表示:Compressed Column Storage CRS的表示参考: https://blog.csdn.net/buptf ...

  2. scipy笔记—scipy.misc.imresize用法(方便训练图像数据)

    scipy.misc.imresize 不同于普通的reshape, imresize不是单纯的改变图像矩阵的维度,而是能将图片重采样为指定像素,这样给深度学习中训练图像数据带来方便. import ...

  3. Pyhton 学习总结 21 :fileinput模块

    fileinput模块可以对一个或多个文件中的内容进行迭代.遍历等操作.该模块的input()函数有点类似文件readlines()方法,区别在于前者是一个迭代对象,需要用for循环迭代,后者是一次性 ...

  4. Pyhton开发堡垒机之paramiko模块

    堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: + ...

  5. 结合scipy.linalg在Python中使用线性系统

    摘要:将线性代数概念应用到实际问题中scipy.linalg 使用 Python 和 NumPy处理向量和矩阵 使用线性系统模拟实际问题 使用求解线性系统 scipy.linalg 本文分享自华为云社 ...

  6. Scipy学习笔记 矩阵计算

    Scipy学习笔记 非本人原创  原链接 http://blog.sina.com.cn/s/blog_70586e000100moen.html 1.逆矩阵的求解 >>>impor ...

  7. Python教程:进击机器学习(五)--Scipy《转》

    Scipy简介 文件输入和输出scipyio 线性代数操作scipylinalg 快速傅里叶变换scipyfftpack 优化器scipyoptimize 统计工具scipystats Scipy简介 ...

  8. 1.5 Scipy:高级科学计算

    sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005269003&am ...

  9. SciPy 优化

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

随机推荐

  1. 吴裕雄--天生自然 JAVA开发学习:解决java.sql.SQLException: The server time zone value报错

    这个异常是时区的错误,因此只你需要设置为你当前系统时区即可,解决方案如下: import java.sql.Connection ; import java.sql.DriverManager ; i ...

  2. 吴裕雄--天生自然ORACLE数据库学习笔记:表分区与索引分区

    create table ware_retail_part --创建一个描述商品零售的数据表 ( id integer primary key,--销售编号 retail_date date,--销售 ...

  3. Android开发之显示分辨率及单位

    Android 各种屏幕分辨率: VGA:         Video Graphics Array,即:显示绘图矩阵,相当于640×480 像素: HVGA:       Half-size VGA ...

  4. Windows 10 20H1版名称被定为Windows 10 Version 2004版以示区分

    导读 我们知道Windows 10 20H1 版目前的开发工作已经接近完成,当前微软主要通过新版本来修复部分已知的问题. 而名称上面按照以往规律推算应该是 Windows 10 Version 200 ...

  5. [原]JointJS流程图

    最近项目上需要用流程图来做问题定界分析,之前有同事用jsPlumb做过,但是阅读代码后觉得比较麻烦,所以自己又找了一圈,找到一个叫Dagre-D3的开源类库,画出来的效果如下图,Dagre-D3最大的 ...

  6. SRSniffer抓包工具的使用

    1.打开SRSniffer软件 2.按照1-->2-->3依次点击 3.点击左侧的启动监听按钮 4.打开要记录api的软件,查看效果

  7. 无需密码攻击 Microsoft SQL Server

    最近的一次渗透测试里,在我们捕获的一些数据包中发现了一些未经加密的 Microsoft SQL Server(MSSQL) 流量.起初,我们认为这样就可以直接嗅探到认证凭证,然而,MSSQL 加密了认 ...

  8. Vue 项目开发

    目录 Vue 项目开发 项目目录结构解析 入口文件 main.js (项目入口) 根组件 app.vue index.html 文件入口 router 路由 components 子组件 项目初始化 ...

  9. webpack 4 脚手架搭建

    1.在cmd控制台安装环境  npm install express (这是一个本地服务器配置) 2.在src 文件夹下建 mian.js 和 express.js 两个jS文件

  10. python内置函数二

    issubclass(a,b)   判断a类是否属于b的子类    返回为布尔值 locals()   显示局部变量 max()   取最大值 min()   取最小值 zip()    拉链方法  ...