0.目录:
序号 | 优化/矩阵方程角度 ,, | 概率学解释 |
1 | 普通最小二乘:向量存在加性误差,即,问题转化为: | 的每一个分量,即: |
2 | 数据最小二乘:b向量无观测误差,A存在加性误差 | 暂时未总结 |
3 | Tikhonov正则化: | 贝叶斯的角度下,引入先验知识 |
1.普通最小二乘与极大似然解释
记,m为训练样本个数,n为特征个数。,线性回归就是求解这个问题,
对于闭式解的形式:。为什么是2范数?对于这个解释从概率角度很好解释,并且从概率得到的答案更有启发性,也就引出了logistic regression。解释如下:
对于每一个样本,把误差当成一个随机变量,由此比较模糊的相关关系就变成了确切的函数关系。
,这里假设误差项且独立同分布,依据就是中心极限定理。
进一步的,,求就是一个参数估计的问题。利用极大似然估计:
做似然函数:
化成对数似然:
最大化对数似然函数,等价于最小化:。
相关代码实现(coursera上机器学习的编程作业完成后,自己的总结代码)
function note2()
%% ======================= Part 1: Plotting ======读取数据并可视化
data = load('ex1data2.txt');%假设数据中有m个训练样本,n个训练特征
X = data(:, 1:end); y = data(:, 2);
m = length(y);
n = size(X,2);
%plot(X, y); %可视化特征之间的相关关系
%数据的预处理:
mu = mean(X);%均值和方差都是行向量
sigma = std(X);
X_norm = (X-repmat(mu,m,1))./repmat(sigma,m,1);
X = [ones(m, 1),X_norm];%针对线性回归,要多加一列
%% =================== Part 2: Cost and Gradient descent ==梯度下降
theta = zeros(n+1,1); % initialize fitting parameters
iterations = 400;% Some gradient descent settings
alpha = 0.01;
% run gradient descent
[theta,J_history] = GradDec(X, y, theta, alpha, iterations);
%% ============= Part 3: Visualizing J(theta_0, theta_1) ===可视化损失函数
plot(1:numel(J_history), J_history, '-b', 'LineWidth', 2);
xlabel('Number of iterations');
ylabel('Cost J');
function J = Compute_Cost(X, y, theta)
m = length(y);
J = sum((X*theta-y).^2)/(2*m);
end
function [theta, J_history] = GradDec(X, y, theta, alpha, num_iters)
m = length(y);
J_history = zeros(num_iters, 1);
for iter = 1:num_iters
theta = theta -(alpha/m)*X'*(X*theta-y);
J_history(iter) = Compute_Cost(X, y, theta);
end
end
end
github的代码在这里
2.数据最小二乘:因为和主要是总结机器学习中的内容,所以此处未总结,有兴趣者查阅:《矩阵分析与应用》第二版(张贤达)P329
以上涉及的1和2中,有两个要求:。
当或者时,如果使用的伪逆做代替,并不是一个很好的选择。
一个比较好的例子解释如下:
上图代码在这里
使用伪逆恢复的信号在左下角,因为A的奇异值中有0,导致的特征值中有零,所以在求伪逆时受到噪声的扰动较大。
理论上的推导这里不详细说。而右下角的就是3中的方法:加入正则化。
3. Tikhonov正则化:
优化角度下:损失函数如下:,
推导出来的闭式解如下:。特别的,在机器学习中使用估计时,可能此处的要以替代。
正则化的应用还有减少过拟合的风险。
4.除了以上所总结的,在《矩阵分析与应用》中,还提到了总体最小二乘的方法,这里也不再细说。
当从概率角度的理解深入后,把正则化的这一部分给推导一下。