机器学习(5)-逻辑回归练习

简介

使用逻辑回归,来识别手写数字(0-9)。

  • 给的样本中包含5000组训练数据;每组数据包含一个图片(手写的数字照片)和其真实值。图片是20x20像素的,所以每组数据中,向量$x$的为400维。需要的向量$\theta$也为400。因为0-9共有10个数字,这也是一个one-vs-all问题。在训练时需要为每一种可能的结果,训练一组$\theta$。

导入数据

load('ex3data1.mat')后就把数据导入到MATLAB当前空间中了,包含$X$和$y$。其中$X$的每一行都是一组训练图片的数据,其标签在$y$中。
24

矩阵化

矩阵化代价函数

图片本质是一个像素矩阵,采用矩阵运算会方便很多。逻辑回归代价函数为:
25
其中$i$表示一组训练数据,$h_\theta(x^{(i)})=g(\theta^Tx^{(i)})$,$g(z)$是Sigmod函数。定义$X$和$\theta$如下:
26

矩阵化梯度

对于$\theta_j$ ,梯度表达式为:
27
写出计算所有梯度过程:
28
上面$x^{(i)}$是一个向量,而$h_\theta(x^{(i)})-y^{(i)}$是一个标量。

实现

在MATLAB实现时,矩阵或向量的’.*’表示对应元素相乘。实际没有$x_0$,但为了便于矩阵化操作,添加了$\theta_0=1$。在实现one-vs-all时,要对每所有组$\theta$向量进行优化,因此有了如下循环:

1
2
3
4
5
for c = 1:num_labels

all_theta(c,:) = fmincg (@(t)(lrCostFunction(t, X, (y == c), lambda)), ...
initial_theta, options);
end

参考:Programming Exercise 3:Multi-class Classification and Neural Networks

文章目录
  1. 1. 简介
  2. 2. 导入数据
  3. 3. 矩阵化
    1. 3.1. 矩阵化代价函数
    2. 3.2. 矩阵化梯度
  4. 4. 实现
,
#add by kangyabing