Topic:關於多項式正則化問題
Description:對歷屆奧運會男子自由泳100米取勝時間數據進行擬合
Environment:Win 10 + matlab 2015
Date: 2018.10.18-19 by hw_Chen
(需要程序和數據集的朋友可以私聊Q:1621673079,並備注:CSDN + 程序)
1.不對數據做預處理
先觀察數據集分布,大約在1895年時,出現了一個離群點(由於其他數據點均滿足一定的線性關系,並且大致在直線附近,如圖1),同時數據集中存在部分數據的缺失,如1890年等。為了盡可能多的擬合數據點(當然這樣極可能造成很大的過擬合),暫時不對數據點做任何預處理,包括不進行舍棄離群點和對樣本缺失值的補充。選擇六次多項式歸(雖然這並不是很符合實際,但在這里主要以多嘗試不同階次為主,作為平常練習)來對樣本點進行擬合,圖1由程序LineRegression.m畫出,圖2是采用多項式回歸,分別是一元線性回歸、二次多項式回歸、三次多項式回歸、六次多項式回歸,圖3是分別采用標准六次多項式回歸和正則六次多項式。其中紅色線為標准多項式回歸,藍色線為標准多項式回歸。
觀察圖2曲線,由程序PloynomialRegression.m畫出。各多項式曲線與一元線性回歸曲線相比,在訓練集上效果相仿,但在測試集上,一元線性回歸的效果明顯比多項式回歸好,說明在不對數據做任何預處理的情況下,一元線性回歸學習到了訓練集的數據的內在規律,而不是僅僅追求對數據點的盡可能的擬合,其對未知樣本的泛化能力更好,顯然多項式回歸在本例中產生了過擬合。**我們提出假想1:數據本質是一元線性關系,加入多項式后,高次項增加了模型的過擬合。**事實上,拋開誤差較大的數據點,其余數據點是滿足線性關系的,又因為變量只有參會時間,故滿足一元線性關系的。
觀察圖3曲線和訓練及測試損失,正則化的效果都比未正則化的好,雖然正則化后訓練損失增加了,但測試損失減小了,說明對未知樣本的泛化能力更好,能夠更准確地預測未知樣本。實驗中為了方便觀察損失變化,圖3曲線暫時設置lambda=3000,由程序RegularizedPloynomialRegression.m畫出。 (實驗中采用誤差平方和計算公式作為損失計算方法)
圖1 一元線性回歸 圖2 多項式回歸
圖3 標准六次多項式回歸和正則六次多項式回歸
再來看看圖3兩種情況下求解的參數theta的情況:
標准多項式回歸參數theta3:
正則多項式回歸參數theta4:
從上到下依次是一次項、二次項、…、六次項的系數。可以看出正則化后各高次項除五次項外系數都減小了。正則化后的測試損失更小了,我們修改下假想1,提出假想2:加入多項式,高次項增加了過擬合,但正則化后,正則項使多項式系數趨於0,減弱高次項的影響以達到減小損失的目標。
先看看損失計算函數:
標准多項式回歸損失函數計算公式:
(式1)
正則化多項式回歸損失函數計算公式:
(式2)
理論分析下,首先假設使用式1計算得到標准多項式回歸的損失為a,則使用式2計算正則化多項式回歸的損失為a+b,其中a、b均大於0 。在利用梯度下降法求解參數theta的情況下,損失對theta求偏導再乘以學習率alpha即得懲罰,在每一步迭代中,顯然正則多項式對於誤差的懲罰更大,故能夠更最后使得損失會更小。雖然在這里,正則化后訓練損失增大了,那是因為曲線並非完全追求擬合全部的數據點,而是更加注重學習數據內在規律,並且為了使正則化效果看起來更好,此處的lambda也並非最佳取值,在下文中會提到在這個數據集中最佳lambda取值。
梯度下降法迭代公式:
(式3)
利用迭代次數作為梯度下降法的終止條件,值得注意的是,使用梯度下降法時,如果各輸入數據間差距太大時,需要對數據進行規范化,否則梯度下降法下降緩慢,甚至發散。
首先讓我們先看看,當把迭代次數設置成10次時(為什么迭代次數一開始就設置成10呢?后面會提到,因為隨着次數的增加,各個圖的區別越不明顯)。其中橫坐標是迭代次數,縱坐標是參數的變化。theta1是標准六次多項式參數,theta2是正則化六次多項式參數。theta1(1)、theta1(2)、theta1(3)、…、theta1(7)分別是標准六次多項式常數項、一次項、二次項、…、六次項系數,同樣theta2(1)、theta2(2)、theta2(3)、…、theta2(7) 分別是正則六次多項式常數項、一次項、二次項、…、六次項系數,程序由ModifiedRPR.m畫出。先上圖~~
觀察這些圖,除第一幅圖外,即常數項系數圖,其他六幅圖基本趨勢和形狀相同,為了確保所畫圖的真實性,先看theta1和theta2的歷史數據。
theta1歷史數據:
theta2歷史數據:
觀察這些數據,以theta1數據為例,每列從上到下看,2-7列變化趨勢且取值相仿,同樣theta2數據同樣有這樣的規律,說明所畫的圖是正確的。
迭代次數n=10時,它整體長這樣:
n=20:
n=30:
n=60:
n=100:
n=200:
n=1000:
n=2000
N=5000:
n=10000:
從上圖中可以看出(稍微有點多),正如假想2中那樣,正則項的加入能夠使高次項的影響減弱,一次項及高次項系數皆趨近於0,至於為什么擬合的曲線不是一條直線,是因為即使其系數趨於0,但並沒有等於0,對於曲線的構成還有影響。綜上假想2是正確的。
不同的lambda值對曲線的擬合與預測也有不同的影響,下面是不同lambda對應的訓練損失和測試損失。由ModifiedRPR_Lambda.m得出:
可以看出lambda=5時,是最佳的取值,其對應的多項式擬合曲線如下圖:
2.對數據進行預處理
觀察本實驗所用的數據集,發現有離群的噪聲點和數據缺失,如果不進行數據預處理,會影響模型的效果。博客【1】中介紹的介紹了一些異常數據處理的方法,在本次實驗,采用舍棄噪聲較大的離群點和相鄰兩值取平均的插值方法,因為在缺失的1916年和1940及1944年附近數值變化較緩慢,因此采用取平均的插值方法是可行的。下圖是未進行數據處理和進行數據處理的對比圖,由程序ModifiedRPR2.m得出。
再分別對上述兩組數據集作標准六次多項式回歸和正則六次多項式回歸。
左側圖正則六次多項式回歸最佳lambda=5,右側最佳lambda=15。兩兩對比發現,進行數據預處理后的無論是正則化模型還是標准模型對未知樣本的預測能力都更好,擁有更好的泛化能力。尤其是正則化后,訓練損失變為原來的約1/5,測試損失約原來的1/12,因此說明數據預處理的重要性。數據預處理后的正則化曲線近似一條直線,但又帶有一定曲線特征,這再次印證了上面提到的“正則化減小高次項系數的絕對值,以達到減弱高次項影響的效果”。
【1】https://blog.csdn.net/ge341204/article/details/80720369
【2】袁梅宇.機器學習基礎-原理、算法與實踐[M].北京:清華大學出版社,2018