最小二乘法
【原理】
最小二乘法(又称最小平方法),它的主要思想就是选择未知参数,使得假设拟合函数的理论值与观测值之差的平方和达到最小,即通过最小化误差的平方和寻找数据的最佳函数匹配。
假设拟合函数为 , θ为未知参数,y为观测值,x为样本,m为样本数,则目标函数(loss function)为:
最小二乘法是一种优化方法,求目标函数的最优值。并且也可以用于曲线拟合,来解决回归问题。
监督学习中,如果预测的变量是离散的,我们称其为分类(如决策树,支持向量机等),如果预测的变量是连续的,我们称其为回归。回归分析中,如果只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。对于二维空间线性是一条直线;对于三维空间线性是一个平面,对于多维空间线性是一个超平面。
最小二乘法实际是寻找向量间最佳的线性组合使得其与目标向量的差最小。在向量张成的空间中找到与目标向量残差最小的向量,该向量与目标向量的差即为残差,当目标向量在向量张成的空间的投影最大时残差最小,此时残差与空间垂直。
【代数解法】
求J对各个 的偏导,令其为0,得到关于θ的多元方程组,求解即可得到θ
【矩阵解法】
【simulation】
Code: 直线拟合
#_*_ coding:utf-8 _*_
'''
date:2017/1/7
@author:xl
'''
import numpy as np
from scipy.optimize import leastsq
import matplotlib.pyplot as plt
def fit_function(para,X):
k,b=para;
Y=k*X+b;
return Y;
def residual_function(para,X,Y):
global iteration_times;
iteration_times=iteration_times+1;
return fit_function(para,X)-Y;
def load_data():
Xn=np.array([1.21,2.13,4.27,3.24,5.67,4.38,0.24,5.37,6.19])
Yn=np.array([3.23,1.45,4.35,2.23,6.12,3.45,2.17,2.07,3.28])
return Xn,Yn
def plot_fit(k,b):
#image shown
plt.figure(figsize=(8,6))
plt.scatter(Xn,Yn,color="red",label="Sample Point",s=30)
x=np.linspace(0,10,1000)
y=k*x+b
plt.plot(x,y,color="orange",label="Fitting Line",linewidth=1)
plt.legend()
plt.show()
if __name__ == "__main__":
Xn,Yn=load_data()
iteration_times=0;
para_init=np.random.rand(1,2)
Result=leastsq(residual_function,para_init,args=(Xn,Yn))
print(iteration_times)
k,b=Result[0];
print (k,b)
plot_fit(k,b)
Result: