最小二乘法 python实现

 1 import numpy as np
 2
 3 def SumSquareError(dataset,A):
 4     # 输入目标数据集与假设曲线函数,计算误差平方和
 5     # 数据形式 dataset[i] = [x,y],y = hypfunc(x)
 6     # A: 多项式系数[a0,a1,...,an-1]
 7     hypresult = [hypfunc(dataset[i,0],A) for i in range(dataset.shape[0])]
 8     sse = np.sum((hypresult - dataset[:,1])**2)
 9     return sse
10
11 def hypfunc(x,A):
12     # 输入:x 横坐标数值, A 多项式系数 [a0,a1,...,an-1]
13     # 返回 y = hypfunc(x)
14     return np.sum(A[i]*(x**i) for i in range(len(A)))
15
16 """
17 最小二乘思路
18 设 假设 yh = a0x^0 + a1x^1 + a2x^2 +...+ akx^k
19 则误差 R2 = sum(y(xi)-yh(xi)) i = 1...n
20       R2 = sum [(yi-(a0x^0 + a1x^1 + a2x^2 +...+ akx^k))]2 ~ 0
21     R2对ai求偏导:并令(共k+1个方程)
22     div(R2,ai) = -2 * sum(yi-(a0x^0 + a1x^1 + a2x^2 +...+ akx^k)) * x^i = 0
23     有如下矩阵 用方程求解
24      [[1 x1 ... x1^k],...,[1 xn ... xn^k]] * [a0,...,ak] = [y1,...,yn]
25 """
26
27 import random
28 import matplotlib.pyplot as plt
29
30 if __name__=="__main__":
31     pass
32     # 生成曲线上各个点
33     x = np.arange(-1,1,0.02)
34     y = [((a*a-1)*(a*a-1)*(a*a-1)+0.5)*np.sin(a*2) for a in x]
35     xa = []
36     ya = []
37     # 对曲线上每个点进行随机偏移
38     for i in range(len(x)):
39         d = np.float(random.randint(60,140))/100
40         ya.append(y[i]*d)
41         xa.append(x[i]*d)
42     n = len(xa)     # 数据个数
43
44     order = 9   # 设定k阶多项式 0 ~ k
45     # 根据数据点构造X,Y的 范德蒙德矩阵
46     matX = np.array([[np.sum([xa[i]**(k2+k1) for i in range(n)])
47              for k2 in range(order+1)] for k1 in range(order+1)])
48
49     matY = np.array([np.sum([(xa[i]**k)*ya[i] for i in range(n)])
50             for k in range(order+1)])
51     print matX.shape,matY.shape
52
53     A = np.linalg.solve(matX, matY)
54     print A
55
56     # 画出数据点与拟合曲线
57     plt.figure()
58     # 输出数据点
59     plt.plot(xa,ya,linestyle=‘‘,marker=‘.‘)
60
61     # 画出拟合后曲线
62     yhyp = [hypfunc(x[i],A) for i in range(n)]
63     plt.plot(x,yhyp,linestyle=‘-‘,marker=‘‘)
64
65     plt.show()
时间: 2024-10-08 20:26:29

最小二乘法 python实现的相关文章

python 最小二乘 leastsq 函数实现

代码修改自 http://www.cnblogs.com/NanShan2016/p/5493429.html 网上百度了一下,主要是两个例子,一个利用了多项式函数,一个就是这个.有些细节没看懂,主要是忽略了p是个参数的数组而非一个数(Python基础问题),纠结完加上注释做个笔记 # 修改自 http://www.cnblogs.com/NanShan2016/p/5493429.html ### 最小二乘法 python leastsq### import numpy as np from

python 最小二乘 leastsq 函数实现 法线式 解决与x轴垂直问题

当使用y=kx+b时,与x轴垂直的直线无法计算.因此使用法线式ysin(theta)+xcos(theta) = dist.貌似这么用有点复杂了,直接使用ax+by=1不知道能不能计算,未测试. # 修改自 http://www.cnblogs.com/NanShan2016/p/5493429.html ### 最小二乘法 python leastsq### import numpy as np import math from scipy.optimize import leastsq ##

Python闲谈(二)聊聊最小二乘法以及leastsq函数

1 最小二乘法概述 自从开始做毕设以来,发现自己无时无刻不在接触最小二乘法.从求解线性透视图中的消失点,m元n次函数的拟合,包括后来学到的神经网络,其思想归根结底全都是最小二乘法. 1-1 “多线→一点”视角与“多点→一线”视角 最小二乘法非常简单,我把它分成两种视角描述: (1)已知多条近似交汇于同一个点的直线,想求解出一个近似交点:寻找到一个距离所有直线距离平方和最小的点,该点即最小二乘解: (2)已知多个近似分布于同一直线上的点,想拟合出一个直线方程:设该直线方程为y=kx+b,调整参数k

Python中如何使用最小二乘法

之所以说"使用"而不是"实现",是因为python的相关类库已经帮我们实现了具体算法,而我们只要学会使用就可以了.随着对技术的逐渐掌握及积累,当类库中的算法已经无法满足自身需求的时候,我们也可以尝试通过自己的方式实现各种算法. 言归正传,什么是"最小二乘法"呢? 定义:最小二乘法(又称最小平方法)是一种数学优化技术,它通过最小化误差的平方和寻找数据的最佳函数匹配. 作用:利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误

python数据分析入门——matplotlib的中文显示问题&最小二乘法

正在学习<用python做科学计算>,在练习最小二乘法时遇到matplotlib无法显示中文的问题.查资料,感觉动态的加上几条语句是最好,这里贴上全部的代码. # -*- coding: utf-8 -*- """ Created on Wed Aug 10 23:20:26 2016 @author: Administrator """ import numpy as np from scipy.optimize import le

python最小二乘法拟合

知道函数形式,python用最小二乘法拟合函数参数 例子: #-*- coding: utf-8 -*- #最小二乘拟合 #知道函数形式了,拟合函数的参数 #通过leastsq函数对带噪声的实验数据x, y1进行数据拟合,可以找到x和真实数据y0之间的正弦关系的三个参数: A, k, theta import numpy as np from scipy.optimize import leastsq import matplotlib.pyplot as pl def func(x,p): "

最小二乘法及其python实现

最小二乘法Least Square Method,做为分类回归算法的基础,有着悠久的历史(由马里·勒让德于1806年提出).它通过最小化误差的平方和寻找数据的最佳函数匹配.利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小.最小二乘法还可用于曲线拟合.其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达. 那什么是最小二乘法呢?别着急,我们先从几个简单的概念说起. 假设我们现在有一系列的数据点,那么由我们给出的拟合函数h(x)得到的估计量就是,

学习大数据第五天:最小二乘法的Python实现(二)

1.numpy.random.normal numpy.random.normal numpy.random.normal(loc=0.0, scale=1.0, size=None) Draw random samples from a normal (Gaussian) distribution. The probability density function of the normal distribution, first derived by De Moivre and 200 ye

机器学习:Python中如何使用最小二乘法

之所以说"使用"而不是"实现",是因为python的相关类库已经帮我们实现了具体算法,而我们只要学会使用就可以了.随着对技术的逐渐掌握及积累,当类库中的算法已经无法满足自身需求的时候,我们也可以尝试通过自己的方式实现各种算法. 言归正传,什么是"最小二乘法"呢? 定义:最小二乘法(又称最小平方法)是一种数学优化技术,它通过最小化误差的平方和寻找数据的最佳函数匹配. 作用:利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误