分类目录归档:大数据

线性回归——最大似然法

似然函数

  似然函数与概率非常类似但又有根本的区别,概率为在某种条件(参数)下预测某事件发生的可能性;而似然函数与之相反为已知该事件的情况下推测出该事件发生时的条件(参数);所以似然估计也称为参数估计,为参数估计中的一种算法; 下面先求抛硬币的似然函数,然后再使用似然函数算出线性回归的参数;
  假如有一枚硬币我们现在不知道它是否为正常硬币(正反面出现概率各位50%),所以想通过抛10次然后通过硬币正反面出现的概率分布判断该硬币是否正常;当抛完10次时出现5次正面向上、5次反面向上,正反面出现的概率符合正常硬币的预期,这时我们可以判断该硬币是正常的;

  抛硬币符合二项分布所以下面计算出概率分布情况:
  enter image description here

  如图:
    enter image description here

    上图中x轴为正面出现的次数,y轴为上述函数的结果

  上面式子中w为正反面出现的比例,y为正面出现的次数;

使用最大似然法求硬币问题

  似然函数为知道了结果求条件,概率问题为知道了条件求概率,在这个问题中就是知道了硬币是正常的,求正反面出现的比例w为何值时该结果最靠谱;所以似然函数等于:

    enter image description here

  函数左边的值并非条件概率中的条件而是该函数的依赖值,似然函数L为在给定结果y的情况下参数w的取值情况,概率函数L为知道了参数w求得y的取值;有了抛硬币情况的概率分布这里就可以给出似然函数

  enter image description here

  似然函数求的是在给定样本向量y的情况下,符合该概率分布的参数向量w取值可能性;该似然函数求的是在w取何值时y=5的可能性更高;就问题而言就是求w取何值时enter image description here的最大值,就如之前梯度下降法一样,求该函数的偏导数就可以求得极大值; 由于直接求偏导数比较复杂,通常情况下都会求对数似然函数,对数函数为单调递增的所以与似然函数具有同样的最大值,该对数似然函数为:

  enter image description here

  下面对该似然对数进行求关于w的偏导数:

  enter image description here

  要求其最大值就是求该导数的拐点,也就是令函数等于0;

  enter image description here

  通过求L关于w的偏导数求得w=0.5,于我们上面概率中的w时一致的,也就是说当w=0.5时y正面出现的次数等于5的可能性是最高的;

线性回归

  通过前面几篇文章我们知道了线性回归的模型为:

  enter image description here

  enter image description here为误差值,所以我们也可以变为:

  enter image description here

  enter image description here代表的是误差,我们知道模型与实际的结果值时一个连续随机变量,也就是说损失函数(loss function)的值时连续随机变量,也就是,模型不可能考虑到所有的特征那也可能就过拟合了所以就会存在噪音,一般来说多种噪音叠加会呈现出正态分布的所以这里假设是正态分布的,训练模型的数据集中肯定不止一条记录,但结果只有一个,所以可以假设每条记录误差都是独立同分布的;

  所以线性回归的概率密度函数为:

  enter image description here

  则似然函数为:

  enter image description here

  上面假设过每条记录误差都是独立同分布的,所以数据集的联合密度为:
  enter image description here
  按照惯例直接求解似然函数比较麻烦所以求解对数似然函数:

  enter image description here
  enter image description here
  enter image description here
  enter image description here

  然后求L关于w的偏导数,令其等于0求拐点enter image description here
  enter image description here

  把式子转为向量形式:
  有:
  所以
  enter image description here

  到这一步我们已经求得到了enter image description here,这与前面我们通过最小二乘法求得的矩阵方程一样,所以w也一定是我们这里求得的w正确解;

  使用最大似然法求解问题的步骤为:
    一、确定问题的随机变量类型是离散随机变量还是连续随机变量
    二、得出问题的概率分布
    三、概率函数转为似然函数
    四、似然函数取对数
    五、求关于某变量的偏导数
    六、解似然方程

参考资料:
http://zh.wikipedia.org/zh-hans/%E4%BC%BC%E7%84%B6%E5%87%BD%E6%95%B0
a first course in machine learning

线性回归——梯度下降法_实例

  上篇文章介绍了梯度下降法在线性回归中的相关理论与证明,这里使用程序实例代码方式看梯度下降法是怎样一步一步下降求出最优解的;

X = [1 4;2 5;5 1;4 2];
y = [19;26;19;20]; 

m = length(y);
alpha = 0.002;   %步长
num_iters = 200;

% Init Theta
theta = zeros(2, 1);

% 数据集大小
m = length(y);  
% 损失函数记录
J_history = zeros(num_iters, 1);

for iter = 1:num_iters   

   h= zeros(m,1);
   h = X*theta;     

   J_history(iter) = (1/(2*m))*sum((h-y).^2);    %计算每次迭代的损失

   tmp1 = zeros(size(X,2),1); 
   for i=1:m
      tmp1= tmp1+(h(i)-y(i)).*X(i,:)';        %等同于公式中累加中的计算结果
   end; 
   theta = theta - (alpha/m)*tmp1;            %每次迭代计算theta的值
   %disp(J_history(iter));
   %disp(theta);
end;

% 绘制图形
figure;
plot(1:numel(J_history), J_history, '-b', 'LineWidth', 2);       %绘制迭代次数于损失值关系图
xlabel('Number of iterations');
ylabel('Cost J');

numel(J_history);

fprintf('Theta computed from gradient descent: \n');
fprintf(' %f \n', theta);
fprintf('\n');


expect = 0;  
X_p=[4 2];     %预测

expect = theta'*X_p';   %预测结果

Expect

enter image description here

  X坐标为迭代次数,Y坐标为损失函数的值,从图中可以看到损失函数下降得很块几乎时线性的,在迭代大约60次的时候损失值已经接近0;这里说的是批量梯度下降法所以数据集有多大也就迭代了多少次;如果数据比较大还是会影响性能,下次有机会再讲讲随机梯度下降法;