我发现 R 函数ridge.cv非常有用。
我想在 MATLAB 中实现等效函数。作为起点,我使用了 MATLAB function b0 = ridge(y,X,k,scale),但是它给出了完全不同的结果。为什么会发生这种情况?我应该为变量“比例”设置什么值(1 或 0,它们有什么区别?)?我如何在 MATLAB 中从头开始实现它?
我发现 R 函数ridge.cv非常有用。
我想在 MATLAB 中实现等效函数。作为起点,我使用了 MATLAB function b0 = ridge(y,X,k,scale),但是它给出了完全不同的结果。为什么会发生这种情况?我应该为变量“比例”设置什么值(1 或 0,它们有什么区别?)?我如何在 MATLAB 中从头开始实现它?
岭回归的一种形式是问题:
最小化 |Ax - b|,并使 x 保持在给定点 x0(通常为 0)附近。
如果我们将其转换为:
最小化 |Ax - b|^2 + w^2 |x - x0|^2,
我们可以通过在这些扩展输入上运行最小二乘来解决它:
[ A ] [ b ]
[ w I ] [ w x0 ]
这里 w 是平衡最小化 |Ax - b| 和保持 x 接近 x0 的权重因子。
不知道该怎么选?经验法则是使 |Ax - b| 和 |x - x0| 大致相等——打印这些值。
补充:
加权最小二乘,具有不同的权重 w, 是一种强大的方法。
例如,w
推动小 x朝向 0(想想 iPhone 的手指),“稀疏化”——
一个穷人的 L1 范数正则化方法;见套索。
不是 Matlab,但希望这会有所帮助。