1.1多項式擬合
生成目標數據
目標數據集的生成方式:
- 首先計算函數sin (2πx) 的對應的值
- 然後給每個點增加一個小的符合高斯分佈的隨機噪聲
- 通過使用這種方式產生數據,它們擁有一個內在的規律,這個規律是我們想要學習的。同時也包含隨即噪聲,這種噪聲可能由隨機的過程產生,也可能是由於存在沒有被觀察到的具有變化性的噪聲源。
訓練數據和測試數據:
- 訓練數據用來訓練多項式模型,來學習數據中的規律
- 測試數據,測試模型在新數據上的泛化能力(測試集由100個數據點組成,這100個數據點的生成方式與訓練集的生成方式完全相同,但是在目標值中包含的隨機噪聲的值不同.)
1.2數據可視化:
- 10 個數據點組成的訓練集的圖像,用藍色圓圈標記.
- 100 個數據點組成的測試數據集,用黃色的圓圈標記.
- 紅色曲線給出了用來生成數據的sin (2πx) 函數.
- 我們的目標是對於某些新的 x 值,預測 y 的值.
1.3 多項式函數擬合
- : 多項式的階數
- : 代表係數向量,
1.4 誤差函數
- 誤差函數衡量了對於任意給定的 值,函數 與訓練集數據目標值的差別。
- : 係數向量,通過最小化誤差函數來確定
- : 從數據中學習得到的函數
- : 係數爲了方便計算
- : 樣本的數量
1.5 多項式特徵
例如,如果輸入樣本是二維的並且形式爲,則2次多項式特徵是。
sklearn,提供了多項式特徵的方法:
from sklearn.preprocessing import PolynomialFeatures
X = np.arange(6).reshape(3, 2)
poly = PolynomialFeatures(2)
poly.fit_transform(X)
>>> array([[ 1., 0., 1., 0., 0., 1.],
[ 1., 2., 3., 4., 6., 9.],
[ 1., 4., 5., 16., 20., 25.]])
1.6 LinearRegression擬合多項式特徵
1.6.1 擬合結果
- ( M = 0 )和一階( M = 1 )多項式對於數據的擬合效果相當差
- 三階( M = 3 )多項式似乎給出了對函數sin (2πx) 的最好的擬合
- 當我們達到更高階的多項式( M = 9 ),我們得到了對於訓練數據的一個完美的擬合事實上,。
- 高階多項式特徵雖然完美擬合,然而,但是,擬合的曲線劇烈震盪,就表達函數sin (2πx) 而言表現很差。
- 圖四這種行爲叫做過擬合( over-fitting )
1.7 測試
測試:通過對新數據的預測情況判斷模型()的泛化性。
測試的方式爲:
- 通過一個額外的測試集,這個測試集由100個數據點組成,這100個數據點的生成方式與訓練集的生成方式完全相同,但是在目標值中包含的隨機噪聲的值不同。我們可以定量考察模型的泛化性與 M(階數) 的關係,對於每個 M ,計算測試集的 。
有時候使用根均方(RMS)誤差更方便。這個誤差由下式定義:
- N : (樣本點的數量)以相同的基礎對比不同大小的數據集,
- 平方根確保了與目標變量使用相同的規模和單位進行度量。
學習曲線
1.7.1 測試結果
- M(階數)過大過小都會造成測試誤差很大
- 當 M 的取值爲 3 ≤ M ≤ 6 時,測試誤差較小
1.8 不同階多項式的係數
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0.0 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 |
1 | 0.0 | -1.438176 | -0.985530 | 12.997090 | 17.383902 | 5.641664 | -0.256404 | 1.924420 | -4.560926 | -215.451195 |
2 | 0.0 | 0.000000 | -0.452646 | -37.304887 | -59.458286 | 38.420548 | 111.186592 | 75.201286 | 205.987591 | 5077.185412 |
3 | 0.0 | 0.000000 | 0.000000 | 24.568161 | 60.101335 | -216.569502 | -529.761376 | -316.364404 | -1302.830510 | -45179.500599 |
4 | 0.0 | 0.000000 | 0.000000 | 0.000000 | -17.766587 | 299.360835 | 904.596578 | 301.203617 | 4022.592501 | 210149.339158 |
5 | 0.0 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | -126.850969 | -665.218737 | 214.704064 | -7532.869930 | -569098.691158 |
6 | 0.0 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 179.455923 | -459.109693 | 8579.726633 | 928109.751580 |
7 | 0.0 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 182.447319 | -5351.534105 | -897238.544636 |
8 | 0.0 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 1383.495356 | 473256.605051 |
9 | 0.0 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | -104860.691043 |
係數分析:
- 對於 M = 9,訓練集的誤差爲0,此時的多項式函數有10個自由度,對應於10個係數,所以可以調節模型的參數,使得模型與訓練集中的10個數據點精確匹配。
- 因爲高階多項式包含了所有低階的多項式函數作爲特殊情況。 M = 9 的多項式因此能夠產生至少與 M = 3 一樣好的結果。
- 隨着 M 的增大,係數的大小通常會變大。對於 M = 9 的多項式,通過調節係數,讓係數取相當大的正數或者負數,多項式函數可以精確地與數據匹配,但是對於數據之間的點(尤其是臨近區間端點處的點),函數表現出劇烈的震盪。直覺上講,發生了這樣的事情:有着更大的 M 值的更靈活的多項式被過分地調參,使得多項式被調節成了與目標值的隨機噪聲相符。
1.9 曾加訓練數據的數量
- 給定同樣的階數(即模型的複雜度)
- 對比在相同階數和測試數據下,不同規模數據上模型的泛化情況
- 紅色模型的擬合曲線
增加訓練數據.10倍,100倍
不同量級訓練集對模型權重的影響
1.9.1結果分析
- 給定的模型複雜度,當數據集的規模增加時,過擬合問題減弱
- 數據集規模越大,我們能夠用來擬合數據的模型就越複雜(即越靈活)
- 數據點的數量不應該小於模型的可調節參數的數量的若干倍(比如5或10)
- 因此,我們需要根據訓練數據的規模來限制模型的複雜度(即參數的數量),根據待解決的問題的複雜性來選擇模型的複雜性
1.10 正則化(regularization)
- 正則化是一種控制過擬合現象的技術(即可以在不限制模型複雜度的情況下,降低過擬合)
- 一般給誤差函數增加一個懲罰項,使得係數不會達到很大的值(減小系數的值)
增加L2正則項後的誤差函數
- : 控制正則化的程度,越大,的值越小.
- 注意,通常係數從正則化項中省略
不同正則化係數對模型泛化效果的影
...未完待續