编程作业(三)

多类别分类问题

该部分使用之前的逻辑回归模型对手写数字0~9的识别。手写数字使用20*20像素的灰度图片,因此特征变量x的个数为400个。由于Octave\MATLAB的下标由1开始,因此我们使用10表示手写数字中的0。

任务一 可视化数据

随机选择100条数据,通过绘图函数将数据可视化。其在代码已在ex3.m和displayData.m文件中写好,只需在Octave中运行该部分代码即可,其结果如下:

任务二 向量化后的代价函数和梯度下降算法

向量化后的代价函数和梯度下降算法的公式分别为:

代价函数J(θ)

梯度下降算法

因此,我们根据上述公式在lrCostFunction.m文件中补充的代码如下:

J = (-y' * log(sigmoid(X * theta)) - (1-y)' * log(1 - sigmoid(X * theta))) / m;
grad = (X' * (sigmoid(X * theta) - y)) / m;

在编程作业(二)中,我们也在相应文件中补充过相同代码。其中,梯度下降算法我们只补充了迭代表达式,这是为了在此之后便于调用高级选择算法。(注:在编程作业(二)中未曾说明,此处补充说明一下。)

任务三 正则化的代价函数和梯度下降算法

在任务二的基础上,我们将代码修改为正则化的代价函数和梯度下降算法,其代码如下:

temp = theta;
temp(1) = 0;
J = ((-y' * log(sigmoid(X * theta)) - (1-y)' * log(1 - sigmoid(X * theta))) / m) + (lambda / (2 * m) * (temp' * temp));
grad = ((X' * (sigmoid(X * theta) - y)) / m) + ((lambda / m) * temp);

这时,我们运行一下该部分代码,其结果如下:

Testing lrCostFunction() with regularization
Cost: 2.534819
Expected cost: 2.534819
Gradients:
 0.146561
 -0.548558
 0.724722
 1.398003
Expected gradients:
 0.146561
 -0.548558
 0.724722
 1.398003

任务四 采用一对多方法分类

在多类别分类问题中,我们的训练集中有个多个类别,这时可以利用一对多的分类思想将多类别分类问题转化为二元分类问题,该方法也称为一对多分类方法。具体请参考逻辑回归(三)或查阅相关文档。

此处我们通过使用高级选择算法来计算出使得代价函数J(θ)最小化的参数θ的值。

我们在predictOneVsAll.m文件中补充代码如下:

initial_theta = zeros(n + 1, 1);
options = optimset('GradObj', 'on', 'MaxIter', 50);

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

其中,我们使用fmincg函数替代之前我们使用的fminunc函数,是为了提高处理大量参数的运行效率。all_theta矩阵中每一行代表在行数顺序下的参数θ的值。

该部分代码运行结果如下:

Training One-vs-All Logistic Regression...
Iteration    50 | Cost: 1.393306e-002
Iteration    50 | Cost: 5.725244e-002
Iteration    50 | Cost: 6.370451e-002
Iteration    50 | Cost: 3.584608e-002
Iteration    50 | Cost: 6.184004e-002
Iteration    50 | Cost: 2.187578e-002
Iteration    50 | Cost: 3.550127e-002
Iteration    50 | Cost: 8.587966e-002
Iteration    50 | Cost: 7.956057e-002
Iteration    50 | Cost: 9.989593e-003

任务五 结果预测

我们利用之前的计算出的参数参数θ的值,对结果进行预测。

根据逻辑函数g(z)可知:

  • 当z≥0.5时,我们可以预测y=1
  • 当z﹤0.5时,我们可以预测y=0

由此,我们在predictOneVsAll.m文件中补充如下代码:

[a, p] = max(sigmoid( X * all_theta'), [], 2);

其中a代表矩阵中每行最大的值,p代表矩阵中每行最大的值在每一行的位置,即预测的数字。

该部分运行结果如下:

Training Set Accuracy: 95.060000

该结果表明,我们所预测的结果精度大约为95.06%。

神经网络模型

我们使用神经网络模型对手写数字进行识别,由于使用20*20像素的灰度图片,因此输入层的激活单元的个数为400个,隐藏层的激活单元个数为25,输出层的激活单元个数为10个。

任务 预测结果

假设函数hΘ(x):

其中,逻辑函数g(z)图像为:

根据逻辑函数g(z)可知:

  • 当z≥0.5时,我们可以预测y=1
  • 当z﹤0.5时,我们可以预测y=0

因此,我们在predict.m文件中补充如下代码:

X = [ones(m, 1) X];
a2 = sigmoid(X * Theta1');

a2 = [ones(m, 1) a2];
a3 = sigmoid(a2 * Theta2');

[a, p] = max(a3, [], 2);

该部分运行结果为:

Training Set Accuracy: 97.520000
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,639评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,277评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,221评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,474评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,570评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,816评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,957评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,718评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,176评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,511评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,646评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,322评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,934评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,755评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,987评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,358评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,514评论 2 348

推荐阅读更多精彩内容