最小二乘法的原理及python实现

在看RVFL神经网络的时候,在权值更新求解时,从隐含层到输出层的权重,是根据最小二乘法的原理更新求解的。

最小二乘法Least Square Method:

假设有一系列数据值,D = {(x1,y2),(x2,y2),.....................,(xn,yn)},需要去找到一个函数f(x)=ax+b,使得f(x)的输出尽可能和y相近,那么此时最小二乘法,原理的关键就是根据预测值与真实值之间的方差最小的原则,于是得到

                                        

最小二乘法的原理就是让这个Q值最小时得到的a,b。

                                                           

根据这个公式发现这个式子中,只有a,b两个未知变量,那么对其求导可以得到Q最小时的a和b的值,即为以下公式:

                                                       

那么最小二乘法的原理就是利用模型得方差最小,不断求解得到RVFL中输出层的权值,进而求得网络。
 

# _*_ coding: utf-8 _*_
# 作者: yhao
# 博客: http://blog.csdn.net/yhao2014
# 邮箱: yanhao07@sina.com
 
import numpy as np  # 引入numpy
import scipy as sp
import pylab as pl
from scipy.optimize import leastsq  # 引入最小二乘函数
 
n = 9  # 多项式次数
 
 
# 目标函数
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 'Fitting Parameters: ', 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()

从图像上看,很明显我们的拟合函数过拟合了,下面我们尝试在风险函数的基础上加上正则化项,来降低过拟合的现象:


为此,我们只需要在残差函数中将lambda^(1/2)p加在了返回的array的后面


图像如下:


很明显,在适当的正则化约束下,可以比较好的拟合目标函数。


注意,如果正则化项的系数太大,会导致欠拟合现象(此时的惩罚项权重特别高)
如,设置regularization=0.1时,图像如下:

 

此时明显欠拟合。所以要慎重进行正则化参数的选择。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颐水风华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值