白话多项式拟合

数学推导

过程参考于:

李航《统计学习方法》多项式函数拟合问题V2 https://blog.csdn.net/xiaolewennofollow/article/details/46757657

《统计学习方法》中关于求拟合多项式系数的问题? - wanger的回答 - 知乎https://www.zhihu.com/question/23483726/answer/73307537

假定给定一个训练数据集:

T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\}

其中,x_i∈R是输入x的观测值,y_i∈R是相应的输出y的观测值,i=1,2,⋯,N,多项式函数拟合的任务是假设给定数据由M次多项式函数生成,选择最有可能产生这些数据的M次多项式函数,即在M次多项式函数中选择一个对已知数据以及未知数据都有很好预测能力的函数。
M次多项式为
f_M(x,w)=w_0+w_1x+w_2x^2+\cdots+w_Mx^M=\sum\limits_{j=0}^Mw_jx^j=[X]_i^Tw
w_0,w_1,⋯,w_mM+1个参数。其中[X]_i为矩阵X的第i行:

用平方损失作为损失函数L,系数1/2是为了方便计算,将模型与训练数据代入,有
L(w)=\frac{1}{2}\sum\limits_{i=1}^{N} \big(\sum\limits_{j=0}^Mw_jx_i^j-y_i\big)^2
w_j求偏导并令其为0
set \frac{\partial\ L(w)}{\partial {w_k}}=0\Rightarrow\\ \frac{1}{2}\sum \limits_{i=1}^{N}2\big(\sum\limits_{j=0}^Mw_jx_i^j-y_i\big)\times x_i^k=0\Rightarrow\sum \limits_{i=1}^{N}\sum\limits_{j=0}^Mw_jx_i^j-\sum \limits_{i=1}^{N}x_i^ky_i=0(k=0,1,2,\cdots,M)
上式可以化简为:


再化简得:

这样就得到了w的解析解,当然我们也可以用最小二乘法来得到w的解,最小二乘法会更加通用.

python

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d

size = 10 #取点的多少
n = 9 #多项式的阶数
x = np.linspace(0,1,size)
noise = np.random.normal(loc=0.0, scale=0.3, size=size)#加噪声
y = np.sin(x*2*np.pi)+noise

# 生成X矩阵
X = np.zeros((size,n+1))
for i in range(0,n+1):
    X[:,i] = np.power(x,i)

# 计算梯度
w = np.dot(np.linalg.inv(np.dot(X.T,X)),np.dot(X.T,y))
print(w)
Y = np.sum(X*w,1)
plt.plot(x,Y)
plt.plot(np.linspace(0,1,100),np.sin(np.linspace(0,1,100)*2*np.pi),label='sin')
plt.scatter(x,y)

过拟合欠拟合分析

n=9,过拟合
n=3,正常拟合
n=2,欠拟合

如上图所示,当n=9,3,2时,分别出现了过拟合,正常拟合,欠拟合的情况,由此可见阶数n对拟合情况的影响。
接下来我们考察数据规模对模型的影响,在n=9的情况下,加大数据点数size到15与100

n=15(左),n=100(右)

可以看出增大数据集的规模可以减小过拟合情况,也就是说数据集越大,模型受噪声的影响越小,越能体现数据真正的规律.

正则化

正则化的原理其实就是通过给误差函数加一个惩罚项,使得系数不会达到很大的值,系数变小后自然过拟合的可能性就降低了。
这个行为也符合奥卡姆剃刀原理:在所有可能选择的模型中,能够很好地解释已知数据并十分简单的才是最好的模型。
引入正则项后,我们就不太方便直接求得w的解析解,因此我们引入最小二乘法来计算w.
L(w) = \frac{1}{2}\sum\limits_{i=1}^{N} \big(\sum\limits_{j=0}^Mw_jx_i^j-y_i\big)^2 + \frac{\lambda}{2}||w||^2

from scipy.optimize import leastsq
def fit_func(w,x):
    f = np.poly1d(w)
    return f(x)

def cost(w,x,y):
    res = fit_func(w,x)-y
    return res

def cost_with_reg(w,x,y):
    res = fit_func(w,x)-y
    res = np.append(res,np.sqrt(regularization) * w)
    return res

regularization =1.52299797e-8#正则化系数
w = np.random.randn(n)
w = leastsq(cost_with_reg,w,args=(x,y))
plot_x = np.linspace(0,1,100)
print('拟合参数: ', w) 
plt.plot(plot_x,fit_func(w[0],plot_x))
plt.plot(np.linspace(0,1,100),np.sin(np.linspace(0,1,100)*2*np.pi),label='sin')
plt.scatter(x,y,None,'r')
plt.text(0.7,0.8,'lnλ=-18',fontsize=20)

对比未加正则项的结果:

可以看出给正则项合适的lambda可以大大增加模型的泛化能力,并且对比参数表可知,加了正则项后w的大小有了很好的限制,不会像无正则项时变得非常大.

附录:
参数表:
无正则项,n=9时:[ 1.11448699e+04, -4.42672236e+04, 7.16836458e+04, -6.09053586e+04,
2.90933720e+04, -7.73548740e+03, 1.03777920e+03, -5.22070047e+01,
7.96235723e-01]
有正则项lnλ=0,n=9时:[ 0.24473024, 0.2027851 , 0.14337231, 0.05886199, -0.0607331 ,
-0.22495246, -0.42590437, -0.5518487 , 0.43506335]
有正则项lnλ=-18,n=9时:[ 174.12842562, -389.84399225, 133.95566243, 185.06182615,
-37.81153661, -108.20050901, 46.69397522, -4.59371681,
0.7814253 ]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容