最⼩⼆乘法及python实现
参考
什么是” 最⼩⼆乘法” 呢
定义:最⼩⼆乘法(⼜称最⼩平⽅法)是⼀种数学优化技术,它通过最⼩化误差的平⽅和寻数据的最佳函数匹配。
作⽤:利⽤最⼩⼆乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平⽅和为最⼩。
原则:以” 残差平⽅和最⼩” 确定直线位置 (在数理统计中,残差是指实际观察值与估计值之间的差)
数学公式:
基本思路:对于⼀元线性回归模型, 假设从总体中获取了 n 组观察值(X1,Y1),(X2,Y2), …,(Xn,Yn),对于平⾯中的这 n 个点,可以使⽤⽆数条曲线来拟合。⽽线性回归就是要求样本回归函数
尽可能好地拟合这组值,也就是说,这条直线应该尽可能的处于样本数据的中⼼位置。因此,选择最佳拟合曲线的标准可以确定为:使总的拟合误差(即总残差)达到最⼩。求最⼩,那就通过对参数分别求导数联⽴⽅程组来解。
最⼩⼆乘法是直接利⽤最⼩化误差平法和,来对参数求导,求得参数解,属于⽐较确定的值
⽽,属于迭代法,知道梯度下降的⽅向刘,挨个去迭代。
1. 最⼩⼆乘法的原理与要解决的问题 
2. 最⼩⼆乘法的代数法解法
3.最⼩⼆乘法的局限性和适⽤场景 
##最⼩⼆乘法
import numpy as np  ##科学计算库
import scipy as sp  ##在numpy基础上实现的部分算法库
import matplotlib.pyplot as plt  ##绘图库
from scipy.optimize import leastsq  ##引⼊最⼩⼆乘法算法
'''
设置样本数据,真实数据需要在这⾥处理
'''
##样本数据(Xi,Yi),需要转换成数组(列表)形式
Xi=np.array([6.19,2.51,7.29,7.01,5.7,2.66,3.98,2.5,9.1,4.2])
Yi=np.array([5.25,2.83,6.41,6.71,5.1,4.23,5.05,1.98,10.5,6.3])
'''
设定拟合函数和偏差函数
函数的形状确定过程:
1.先画样本图像
2.根据样本图像⼤致形状确定函数形式(直线、抛物线、正弦余弦等)
'''
##需要拟合的函数func :指定函数的形状
def func(p,x):
k,b=p
return k*x+b
##偏差函数:x,y都是列表:这⾥的x,y更上⾯的Xi,Yi中是⼀⼀对应的
def error(p,x,y):
return func(p,x)-y
'''
主要部分:附带部分说明
1.leastsq函数的返回值tuple,第⼀个元素是求解结果,第⼆个是求解的代价值(个⼈理解)
2.官⽹的原话(第⼆个值):Value of the cost function at the solution
3.实例:Para=>(array([ 0.61349535,  1.79409255]), 3)
4.返回值元组中第⼀个值的数量跟需要求解的参数的数量⼀致
'''
#k,b的初始值,可以任意设定,经过⼏次试验,发现p0的值会影响cost的值:Para[1]
p0=[1,20]
#把error函数中除了p0以外的参数打包到args中(使⽤要求)
Para=leastsq(error,p0,args=(Xi,Yi))
#读取结果
k,b=Para[0]
正则化的最小二乘法曲线拟合python
print("k=",k,"b=",b)
print("cost:"+str(Para[1]))
print("求解的拟合直线为:")
print("y="+str(round(k,2))+"x+"+str(round(b,2)))
'''
绘图,看拟合效果.
matplotlib默认不⽀持中⽂,label设置中⽂的话需要另⾏设置如果报错,改成英⽂就可以
'''
#画样本点
plt.figure(figsize=(8,6)) ##指定图像⽐例: 8:6
plt.scatter(Xi,Yi,color="green",label="样本数据",linewidth=2) #画拟合直线
x=np.linspace(0,12,100) ##在0-15直接画100个连续点
y=k*x+b ##函数式
plt.plot(x,y,color="red",label="拟合直线",linewidth=2)
plt.legend(loc='lower right') #绘制图例
plt.show()
结果如下所⽰:
输出结果:
k= 0.900458420439 b= 0.831055638877
cost:1
求解的拟合直线为:
y=0.9x+0.83
绘图结果:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。