最小二乘拟合,L1、L2正则化约束

最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。

从维基百科中摘取的最小二乘的拟合曲线。


解法:其中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的正则化约束结果还是相当不错的!




你可能感兴趣的:(机器学习基础算法)