最小二乘拟合,L1、L2正则化约束--转
原文地址:http://blog.csdn.net/u013164528/article/details/45042895
最小二乘法(又稱最小平方法)是一種數學優化技術。它通過最小化誤差的平方和尋找數據的最佳函數匹配。利用最小二乘法可以簡便地求得未知的數據,并使得這些求得的數據與實際數據之間誤差的平方和為最小。
從維基百科中摘取的最小二乘的擬合曲線。
?
解法:其中Y為列向量,X為N*K的矩陣,W為K*1的行向量
?
雖說Matlab中有現成的擬合函數,但是,當有些正則化約束來限制W的取值時,就無法用擬合函數來實現。這時,需要我們自己寫出求解的代碼,才行。
?
與前面提到的相同,
下面公式中,X為N*K矩陣,Y為N維列向量,而W為K*1的行向量
?
?
無約束的線性最小二乘擬合:。解法
L1正則化約束的最小二乘擬合:,解法
L2正則化約束的最小二乘擬合:,解法
?
?
而相應的代碼實在是太簡單了,代碼中,默認為1,而為常數項。
?
Matlab代碼:
?
x=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1;
195,189,193,162,189,182,211,167,176,154,169,166,154,247,193,202;
36,37,38,35,35,36,38,34,31,33,34,33,34,46,36,37;
50,52,58,62,46,56,56,60,74,56,50,52,64,50,46,62]
y=[60,60,101,37,58,42,38,40,40,250,38,115,105,50,31,120]
?
%無約束
K0=inv(x*x')*x*y'
%L1正則化約束
K1=inv(x*x')*(x*y'-0.5)
%L2正則化約束
K2=inv(x*x'+eye(4))*x*y'
?
執行結果:
?
K0 =125.6309?? -1.6503???6.9934??? 0.0385
K1 =116.3166?? -1.6595???7.2063??? 0.0984
K2 =6.4473??-1.7536??? 9.6298??? 0.8152
?
?
L1的正則化約束結果不是那么明顯,但L2的正則化約束結果還是相當不錯的!
轉載于:https://www.cnblogs.com/davidwang456/articles/5582794.html
總結
以上是生活随笔為你收集整理的最小二乘拟合,L1、L2正则化约束--转的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最小二乘法多项式拟合的Java实现--转
- 下一篇: Huber loss--转