机器学习 Exercise 3(Ⅰ):多元分类(未)

1.多元分类

利用一对多逻辑回归以及神经网络识别手写数字(0--9)

1.1 数据集

ex3data1.mat文件中包含5000个手写数字的训练样本。mat格式文件意味着数据已经以矩阵形式被保存在matlab中,该文件可通过load命令将保存的数据载入。

这5000个样本中的每个样本都是20像素*20像素的灰度图像,每个像素由一个浮点数表示,指示该位置的灰度强度,20*20的像素网络被展为一400维向量。在矩阵X中,每个训练样本都是单独一行,这给了我们一个5000*400的矩阵X,其中每一行都是一个手写数字图像的样本。

 第二部分训练集是一个5000维的向量y,包含了所有训练样本的标签,其中数字“0”标记为10,其余正常标记对应数字。

1.2 数据可视化

首先对训练集中的子集进行可视化,ex3.m中part1将从X中随机挑选100行,将其传给displaydata函数。该函数将一并绘制这些数据的像素块图像

function [h, display_array] = displayData(X, example_width)

if ~exist('example_width', 'var') || isempty(example_width) 
	example_width = round(sqrt(size(X, 2)));
end

colormap(gray);

[m n] = size(X);
example_height = (n / example_width);

display_rows = floor(sqrt(m));
display_cols = ceil(m / display_rows);

pad = 1;

display_array = - ones(pad + display_rows * (example_height + pad), ...
                       pad + display_cols * (example_width + pad));

curr_ex = 1;
for j = 1:display_rows
	for i = 1:display_cols
		if curr_ex > m, 
			break; 
		end
		% Copy the patch
		
		% Get the max value of the patch
		max_val = max(abs(X(curr_ex, :)));
		display_array(pad + (j - 1) * (example_height + pad) + (1:example_height), ...
		              pad + (i - 1) * (example_width + pad) + (1:example_width)) = ...
						reshape(X(curr_ex, :), example_height, example_width) / max_val;
		curr_ex = curr_ex + 1;
	end
	if curr_ex > m, 
		break; 
	end
end

h = imagesc(display_array, [-1 1]);

axis image off

drawnow;

end

1.3 代价函数与梯度向量化

建立多元分类器,因为有十个分类,所以需要训练10个分离逻辑回归分类器。为了使训练有效,要确保代码向量化

代价函数如下:

 使用矩阵乘法可以快速计算h_θ,将X和θ定义为:

 计算X*θ得到:

a^T*b=b^T*a 

function [J, grad] = lrCostFunction(theta, X, y, lambda)

m = length(y); % number of training examples

J = 0;
grad = zeros(size(theta));

part1=-y'*log(sigmoid(X*theta));
part2=(1-y)'*log(1-sigmoid(X*theta));
reg=lambda*theta'*theta/(2*m);

J=(part1-part2)/m+reg;

grad=X'*(sigmoid(X*theta)-y')/m+lambda*theta/m;

grad = grad(:);
end

 1.4 一对多分类

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值