MatLab实现Softmax Regression

来源:互联网 发布:停用移动数据总是弹出 编辑:程序博客网 时间:2024/06/07 03:37

资料参考于NG的深度学习网站:http://ufldl.stanford.edu/tutorial/supervised/SoftmaxRegression/,实现课程中的练习题目

Softmax Regression

Softmax原理

softmax是Logistic Regression的泛化,其属于广义线性回归模型,具体的证明推导可以参见该博客;

由上面的证明可以得到损失函数:

J(θ)=[i=1mk=1K1{y(i)=k}logeθ(k)x(i)Kj=1eθ(j)x(i)]

梯度为:

θ(k)J(θ)=mi=1[x(i)(1{y(i)=k}P(y(i)=k|x(i);θ))]

其中:

P(y(i)=k|x(i);θ)=eθ(k)x(i)Kj=1eθ(j)x(i)

Softmax实现

维度

因为实现过程中使用的都是向量运算,所以首先注明在实现过程中的各变量的维度。
(n指的是加上常数项+1后的特征个数)
(k指减去最后一项-1后的分类个数)
1. θ:nk
2. X:nm
3. gnk
4. f
5. Pkm
6. Akm

实现过程

1.首先求P(y(i)=k|x(i);θ)

  b=theta'*X;  b(size(b,1)+1,:)=0;  a=exp(b);  sum_col = sum(a);  P=bsxfun(@rdivide,a,sum_col);

2.构造一个矩阵A(km),其中Akm=1表示第m个样本的分类为k;

  A = zeros(num_classes,m);  I = sub2ind(size(A),y,1:size(A,2));%search for the position  A(I) = 1;

3.计算J(θ)的取值

  P_log=log(P);  f=-sum(P_log(I));%I表示位置

4.计算梯度

  g = - X*(A(1:size(A,1)-1,:)-P(1:size(A,1)-1,:))';  g=g[:]

5.最后使用minfunc函数求解θ的值

——2017.2.11

0 0