1:softmax回归
当p(y|x,theta)满足多项式分布,通过GLM对其进行建模就能得到htheta(x)关于theta的函数,将其称为softmax回归。
教程中已经给了cost及gradient的求法。须要注意的是一般用最优化方法求解參数theta的时候,採用的是贝叶斯学派的思想,须要加上參数theta。
习题答案:
(1) 数据载入——————代码已给
(2) %% STEP 2: Implement softmaxCost 得到计算cost和gradient
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 通常採用L-BFGS进行迭代得到最佳參数。L-BFGS眼下被觉得是最有效的无约束优化问题。
(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); %%% 对结果进行预測