1 最小二乘法
参考 http://www.cnblogs.com/iamccme/archive/2013/05/15/3080737.html
https://blog.csdn.net/yhao2014/article/details/51491413
1.1 解释“最小二乘法”
我们以最简单的一元线性模型来解释最小二乘法。什么是一元线性模型呢? 监督学习中,如果预测的变量是离散的,我们称其为分类(如决策树,支持向量机等),如果预测的变量是连续的,我们称其为回归。回归分析中,如果只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。对于二维空间线性是一条直线;对于三维空间线性是一个平面,对于多维空间线性是一个超平面...
对于一元线性回归模型,假设从总体中获取了n组观察值(X1,Y1),(X2,Y2), …,(Xn,Yn)。对于平面中的这n个点,可以使用无数条曲线来拟合。要求样本回归函数尽可能好地拟合这组值。综合起来看,这条直线处于样本数据的中心位置最合理。 选择最佳拟合曲线的标准可以确定为:使总的拟合误差(即总残差)达到最小。有以下三个标准可以选择,以确定直线位置:
(1) “残差和最小”
缺点是“残差和”之间存在相互抵消的问题,会影响最终的“残差和”
(2) “残差绝对值和最小”
缺点是绝对值在计算上比较麻烦,增加了计算复杂度
(3) “残差平方和最小”
这个思想就是“最小二乘法”的原则,既可以避免残差之间互相抵消的问题,也可以降低计算复杂度。这种方法对异常值十分敏感
使用最多的是“普通最小二乘法OLS(Ordinary Least Square)”:其回归模型应该能够使得训练集的“残差平方和”达到最小。Q为残差平方和-代价函数,也叫平方损失函数
1.2 最小二乘法的定义:
对于给定的数据,在取定的假设空间H中,求解h(x)∈H,使得残差的最小,即
1.3 最小二乘法的解
从几何上讲,就是寻找与给定点距离平方和最小的曲线y=h(x)。h(x)称为拟合函数或者最小二乘解,求解拟合函数h(x)的方法称为曲线拟合的最小二乘法
h(x)一般情况下是一条多项式的曲线:
这里h(x,w)是一个n次多项式,w是其参数。也就是说,最小二乘法就是要找到这样一组,使得最小。
1.4 求解最小二乘法
以一个比较简单的线性函数举例:
求解最小二乘法实质就是找出这么一组w,使得残差平方和最小
这里令为样本的平方损失函数
这里的Q(w)即为我们要进行最优化的风险函数。这是一个典型的求解极值的问题,只需要分别W0,W1对求偏导数,然后令偏导数为0,即可求解出极值点,即:
1.5 python实现
# _*_ coding: utf-8 _*_
import numpy as np # 引入numpy
import scipy as sp
import pylab as pl
from scipy.optimizeimport leastsq # 引入最小二乘函数
n = 9 # 多项式次数
# 目标函数y=sin(2πx)
def real_func(x):
return np.sin(2 * np.pi * x)
# 多项式函数
def fit_func(p, x):
f = np.poly1d(p)
return f(x)
# 残差函数
def residuals_func(p, y,x):
ret =fit_func(p, x) - y
return ret
x = np.linspace(0, 1,9) # 随机选择9个点作为x
x_points =np.linspace(0, 1, 1000) # 画图时需要的连续点
y0 = real_func(x) # 目标函数
y1 =[np.random.normal(0, 0.1) + y for y in y0] # 添加正太分布噪声后的函数
p_init =np.random.randn(n) # 随机初始化多项式参数
plsq =leastsq(residuals_func, p_init, args=(y1, x))
print 'FittingParameters: ', plsq[0] # 输出拟合参数
pl.plot(x_points,real_func(x_points), label='real')
pl.plot(x_points,fit_func(plsq[0], x_points), label='fitted curve')
pl.plot(x, y1, 'bo',label='with noise')
pl.legend()
pl.show()