Python知识(7)--最小二乘求解
这里展示利用python实现的最小二乘的直接求解方法。其求解原理,请参考:最小二乘法拟合非线性函数及其Matlab/Excel 实现
1.一般曲线拟合
代码如下:
# -*- coding:utf-8 -*- '''
Created on Feb 20, 2017
最小二乘拟合 给定的函数 fit_fun(x)
已知数据X(2xN),Y(1xN),可直接计算直线的参数a和b
直接计算的公式:ab = inv(XXt)*X*Yt
@author: Xiankai Chen
@email: xiankai.chen@qq.com
'''
import numpy as np
import matplotlib.pyplot as plt def fun2ploy(x,n):
'''
数据转化为[x^0,x^1,x^2,...x^n]
'''
lens = len(x)
X = np.ones([1,lens]);
for i in range(1,n):
X = np.vstack((X,np.power(x,i)))
return X def leastseq_byploy(x,y,ploy_dim):
'''
最小二乘求解
'''
#散点图
plt.scatter(x,y,color="r",marker='o',s = 50) X = fun2ploy(x,ploy_dim);
#直接求解
Xt = X.transpose();
XXt=X.dot(Xt);
XXtInv = np.linalg.inv(XXt)
XXtInvX = XXtInv.dot(X)
coef = XXtInvX.dot(y.T) y_est = Xt.dot(coef) return y_est,coef def fit_fun(x):
'''
要拟合的函数
'''
#return np.power(x,5)
return np.sin(x)
#return 5*x+3 if __name__ == '__main__':
data_num = 100;
ploy_dim =10;
noise_scale = 0.2;
## 数据准备
x = np.array(np.linspace(-2*np.pi,2*np.pi,data_num))
y = fit_fun(x)+noise_scale*np.random.rand(1,data_num)
# 最小二乘拟合
[y_est,coef] = leastseq_byploy(x,y,10) #显示拟合结果
org_data = plt.scatter(x,y,color="r",marker='o',s = 50)
est_data = plt.plot(x,y_est,color="b",linewidth= 3) plt.xlabel("X")
plt.ylabel("Y")
plt.title("Fit funtion with leastseq method")
plt.legend(["Noise data","Fited function"]);
plt.show()
结果图示



当维度增加求解矩阵的你运算会消耗较大的计算资源,通常采用梯度下降法,牛顿法等数值迭代算法进行求解。
参考资料:
[1]. 最小二乘法拟合非线性函数及其Matlab/Excel 实现
Python知识(7)--最小二乘求解的更多相关文章
- 软件测试人必备的 Python 知识图
之前发过蛮多不少关于 Python 学习的文章,收到大家不少的好评,不过大家也有许多困惑: 现在测试不好做,是不是真的该重新去学一门热门的语言? 入门 Python 该学哪些知识点?该看哪些书? 可以 ...
- python知识:json格式文本;异常处理;字符串处理;unicode类型和str类型转换
python进程中的实例和json格式的字符串之间的映射关系是非常直接的,相当于同一个概念被编码成不同的表示: stream in json form ----json.loads(str)----- ...
- python实现一般最小二乘系统辨识方法
问题: 对于一个未知参数的系统,往往需要用到系统辨识的方法,例如对于一个单输入单输出系统: Z(k)+a1*Z(k-1)+a2*Z(k-2)=b1*U(k-1)+b2*U(k-2)+V(k) 其中:V ...
- 小马哥Python知识体系
从今天起,小马哥每天都发表一篇关于Python的博文,知识范围由Python的0基础,逐渐到项目应用. 目的: 在分享中学习 每天的新博文都会加入到这里成为超链接,方便各位点击查阅. Python基础 ...
- Python知识目录
目录 一.计算机基础 二.Python基础 三.函数 四.常用模块 五.模块和包 六.面向对象 七.网络编程socket 八.数据库 九.前端 十.Python Web框架 十一.版本控制--GIT ...
- Python知识(1)----基础入门和进阶总结。
今天把Python的语法过了一遍,学习了慕课网上的教程,简单易懂,1个小时就可以入门Python了.Python有两个主要的版本,Python2.7,Python3.5,后面的版本,改动较大,编写的程 ...
- python知识大全目录,想学的看过来!
Python总结篇——知识大全 python装饰器 PyCharm安装与配置,python的Hello World sort与sorted的区别及实例 我必须得告诉大家的MySQL优化 ...
- Python知识图谱
一.Python全栈图谱 2.Python语言高级 Python 全栈工程师前端 Python全栈工程师后端 Python Linux运维自动化开发 Python KaliLinux信息安全开发和使用 ...
- 在Python中利用CVXOPT求解二次规划问题
工作中需要用到cvxopt,cvxopt安装有坑,大家注意下.1.首先一定要卸载numpy,无论是直接安装的,还是anaconda安装的,主要是必须用whl安装numpy才不会有包的冲突2.二次规划包 ...
随机推荐
- 孤的Scrapy官文阅读进程
上月底开始学习Scrapy爬虫框架,看了一些中文文档,讲应用.讲基础的,对其有一些了解了.终于在28日打开Scrapy的官网,并制作了其文档的思维导图,进而开启了其文档的阅读之旅. 本文展示了从6月2 ...
- linux 命令之cut
cut是一个选取命令,就是将一段数据经过分析,取出我们想要的.一般来说,选取信息通常是针对“行”来进行分析的,并不是整篇信息分析的. (1)其语法格式为:cut [-bn] [file] 或 cut ...
- java基础39 增强for循环(也叫foreach循环)
增强for循环是jdk1.5出现的新功能 1.增强for循环的作用 简化了迭代器的书写格式(注意:增强for循环底层还是使用了迭代器遍历) 2.增强for循环的格式 for(数据类型 变量名:遍历的目 ...
- 洛谷P2279消防局的设立
传送门啦 一个很摸不清头脑的树形dp 状态: $ dp[i][0] $ :选自己 $ dp[i][1] $ :选了至少一个儿子 $ dp[i][2] $ :选了至少一个孙子 ------------- ...
- 学习shell脚本之前的基础知识
日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本的编写是必考的项目.有的单位 ...
- Centos之压缩和解压缩命令
常用压缩格式:.zip .gz .bz2 常用压缩格式:.tar.gz .tar.bz2 zip格式压缩 zip压缩文件名 源文件 压缩文件 zip -r 压缩文件名 源目录 压缩目录 [root@ ...
- Es官方文档整理-3.Doc Values和FieldData
Es官方文档整理-3.Doc Values和FieldData 1.Doc Values 聚合使用一个叫Doc Values的数据结构.Doc Values使聚合更快.更高效且内存友好. Doc Va ...
- python2.7
python2.7支持win32.win64 下载地址:http://pan.baidu.com/s/1dE39eQ9 初学,附一个牛人的python教程地址:http://www.liaoxuefe ...
- TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?
TreeSet要求存放的对象所属的类必须实现Comparable接口,该接口提供了比较元素的compareTo()方法,当插入元素时会回调该方法比较元素的大小.TreeMap要求存放的键值对映射的键必 ...
- 30 最小的k个数
输入n个整数,找出其最小的k个数,例如输入4,5,1,6,2,7,3,8,最小的4个数为1,2,3,4 解法一:快排思想,会改变原数组 O(n) 注意是vector<int>& ...