最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。
从维基百科中摘取的最小二乘的拟合曲线。
解法:其中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的正则化约束结果还是相当不错的!