码迷,mamicode.com
首页 > 其他好文 > 详细

UFLDL教程笔记及练习答案三(Softmax回归与自我学习)

时间:2015-06-09 21:54:11      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:习题答案   自我学习   softmax回归   

1softmax回归

p(y|x,theta)满足多项式分布,通过GLM对其进行建模就能得到htheta(x)关于theta的函数,将其称为softmax回归。教程中已经给了costgradient的求法。需要注意的是一般用最优化方法求解参数theta的时候,采用的是贝叶斯学派的思想,需要加上参数theta

习题答案:

(1) 数据加载——————代码已给

(2) %% STEP 2: Implement softmaxCost   得到计算costgradient

M = theta*data;  % M的每一列就是一个样本所对应的thta*data(:, i)的值
M = bsxfun(@minus, M, max(M, [],1)); %减去每列的最大值以防止溢出
M = exp(M);   % 
p = bsxfun(@rdivide, M, sum(M));  %得到概率矩阵

cost = -1/numCases .* sum(groundTruth(:)'*log(p(:))) + lambda/2 *sum(theta(:).^2);    % cost function
thetagrad = -1/numCases .* (groundTruth - p) * data' + lambda * theta;               % grad 

(3)gradient check ———代码已给

(4) Learning parameters ---- 代码已给出训练得到最佳的参数theta

(5)测试

[nop, pred] = max(theta * data); % nop存放的是每列的最大值,pred存放的是该最大值所在的行号

 

2:自我学习和无监督特征学习

过程是这样子的:原始数据一部分是有标签,一部分是没有标签的,我们使用无标签的数据去训练得到一个稀疏自编码器(AutoEncoder),然后我们将一部分有标签的数据输入该编码器,并将第二层hidden layer的激励值作为新的特征来代替(合并)原有的特征,用新的特征及其标签训练一个softmax回归模型,然后将剩余的有标签数据作为测试集(注意这里的测试输入softmax中的数据是稀疏编码器第二层的激励值)

注意:这里没有对数据进行白化的预处理,有时间会做下,比对下效果。

习题答案——最后的准确率是98.189306%

(1) %  Find opttheta by running thesparse autoencoder on

% unlabeled Training Images

 

options.Method = 'lbfgs'; % Here, we use L-BFGS to optimize our cost
                          % function. Generally, for minFunc to work, you
                          % need a function pointer with two outputs: the
                          % function value and the gradient. In our problem,
                          % sparseAutoencoderCost.m satisfies this.
options.maxIter = 400;	  % Maximum number of iterations of L-BFGS to run 
options.display = 'on';


[opttheta, cost] = minFunc( @(p) sparseAutoencoderCost(p, ...                   %通过L-BFGS得到最佳的cost与gradient
                                   inputSize, hiddenSize, ...
                                   lambda, sparsityParam, ...
                                   beta, unlabeledData), ...
                              theta, options);

(2) Extract Features from the Supervised Dataset

b1 = repmat(b1, 1, size(data, 2));
Z1 = W1*data + b1;
activation = sigmoid(Z1);

(3) %% STEP 4: Train the softmax classifier

  

lambda = 1e-4;                                                   %% lambda设置的过大 效果没有达到98%
numClasses = numLabels;
softmaxModel = softmaxTrain(hiddenSize, numClasses, lambda, ...                    %% 注意这里不再是trainData,而是在稀疏自编码算法中提取的第二层结点的激励值作为新的特征值
                            trainFeatures, trainLabels, options);

(4)测试

[pred] = softmaxPredict(softmaxModel, testFeatures);   %%% 对结果进行预测


UFLDL教程笔记及练习答案三(Softmax回归与自我学习)

标签:习题答案   自我学习   softmax回归   

原文地址:http://blog.csdn.net/lu597203933/article/details/46432113

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!