SSブログ

Cousera Machine Learningの受講を終了した [Octave]

(2018.10.05)

Coursera Machine Learning(↓)の受講を終了しました。
https://www.coursera.org/learn/machine-learning/home/welcome
2018_1005_001.png受講終了

凡そ1ヶ月の受講でした。終わってみればあっと言う間ですが、試験に落ちまくったり、課題のプログラムが上手く動かなくて悩んだり・・・大変な思いもしました。それでも、中だるみすることもなく、最後まで一気に受講することが出来たのは、とても良いコースであるためだと思いました。

最初に受講を開始したときは手探り状態でしたが、段々様子が分かってきて(<==Week5の頃?)からビデオ講義の視聴も楽になりました。

私が掴んだコツは『新しい数式が出てきたときは一度ビデオを止め、良く眺めてから講義を再開する』というものです。丁寧に何度も繰り返すNg先生の説明を聞いて(見て?)いると何となく数式の意味が分かってきます。そして、ビデオ講義では曖昧だった理解も、プログラム課題に取り組む中ではっきりしたものになっていきます。
なので、プログラム課題の前に行う『テスト』では落ちまくります。orz

参考資料の中にある、『Tutorial』『Eratta』『Lecture Note』は必見です。
2018_1005_002.png参考資料

2018_1005_003.pngLecture Note

Lecture Noteは綺麗にまとめられていて講義資料として手元に残して置きたいのですが、ログインしないと表示されない仕組みになっていました。(<==受講期間は11月初旬まで)

早速Courseraから「修了証」取得のお勧めメールが届きました。受講は無料ですが修了証を頂くには受講料(↓)を支払う必要があるようです。
2018_1005_004.png受講料を支払うと修了証が貰える

このコースへの感謝の気持ちを込めて修了証代(?)を支払う方も多いようですが・・・
さて、どうしようか?
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー





nice!(3)  コメント(0) 
共通テーマ:日記・雑感

Week9を終了した [Octave]

(2018.10.01)
Machine Learning(↓)のWeek9まで課題をクリアしました。
https://www.coursera.org/learn/machine-learning/home/welcome

== Part Name | Score | Feedback
== --------- | ----- | --------
== Estimate Gaussian Parameters | 15 / 15 | Nice work!
== Select Threshold | 15 / 15 | Nice work!
== Collaborative Filtering Cost | 20 / 20 | Nice work!
== Collaborative Filtering Gradient | 30 / 30 | Nice work!
== Regularized Cost | 10 / 10 | Nice work!
== Regularized Gradient | 10 / 10 | Nice work!
== --------------------------------
== | 100 / 100 |
パチパチパチ~

第9週は、異常検知(anomaly detection)と協調フィルタリング(Collaborative Filtering)でした。考え方としては判り易いと感じていたのですが・・・
また、テスト(Recommender System)に落ちてしまいました。orz

一番苦労した問題がこれ(↓)です。
2018_1001_1.png問1から躓いた

次がこれ(↓)です。
2018_1001_2.png問2にも苦労した
最初の2問がなかなかクリアできず(<==この時点で不合格)、何度も受け直す羽目になりました。厄介なのは設問が微妙に変化するところです。また、講義では説明のなかった(<==多分)内容が設問に出てくるので、講座をしっかり理解できていないと、管理人のように何度もテストを受け直すことになります。

で、ようやく・・・
2018_1001_001.pngなんとか合格できた

厳しい~
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
たまにはのんびり過ごしたいなぁ~





nice!(2)  コメント(0) 
共通テーマ:日記・雑感

Week8を終了した [Octave]

(2018.09.28)
Machine Learning(↓)のWeek8まで課題をクリアしました。
https://www.coursera.org/learn/machine-learning/home/welcome
第8週は教師無し学習によるクラスタリング(K-means Clustering )と主成分分析(Principal Component Analysis)でした。昔、手計算でとても苦労して値を求めた(<==計算をミスして正解が出せなかった)記憶が蘇りました。

教師無し学習によるクラスタリングの実行結果です。二次元平面に散らばった点(便宜上色分けされている)をクラスター3でK-meansクラスタリングを反復して、収束する様子を描画した(↓)ものです。
2018_0928_3.pngK-means Clustering
<K-meansクラスタリング>
(1)サンプルデータを最も近い収束点(仮)に振り分ける。
(2)振り分けられたデータの平均値を次の収束点(仮)とする。
収束点に振り分けられるデータが変化しなくなるまで、この手順を反復して収束点を求めます。
最初の収束点(仮)をランダムに選んで、クラスタリングを複数回実施して最もバラツキの小さな収束点の組を選択します。

3次元ベクトルを2次元ベクトルに変換する例です。
2018_0928_1.png3次元ベクトル(元)

主成分分析を用いて、2次元ベクトルに変換した。
2018_0928_2.png2次元ベクトル(2次元近似)
<3次元データの2次元近似>
(1)正規化した元データ(3次元)の共分散行列を求める Sig=X'*X/m
(2)共分散行列の主成分分析(特異値分解?)を行う [U S V]= svd(Sig)
(3)2次元近似データを求める Z = X*U(:,1:K);

Octaveだとたったの3行で表現できてしまいます。
Octaveすげ~

<結果>
== Part Name | Score | Feedback
== --------- | ----- | --------
== Find Closest Centroids (k-Means) | 30 / 30 | Nice work!
== Compute Centroid Means (k-Means) | 30 / 30 | Nice work!
== PCA | 20 / 20 | Nice work!
== Project Data (PCA) | 10 / 10 | Nice work!
== Recover Data (PCA) | 10 / 10 | Nice work!
== --------------------------------
== | 100 / 100 |
==
パチパチパチ~

思いの外、順調に課題をクリアしています。
10月第一週の受講終了を目指します。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
息抜きも必要です。(↓)



管理人もお世話になっています。



nice!(1)  コメント(0) 
共通テーマ:日記・雑感

Week7を終了した [Octave]

(2018.09.26)

Machine Learning(↓)のWeek7まで課題をクリアしました。
https://www.coursera.org/learn/machine-learning/home/welcome
第7週はサポートベクターマシン(SVM)を使った識別でした。
<結果>
==
== Part Name | Score | Feedback
== --------- | ----- | --------
== Gaussian Kernel | 25 / 25 | Nice work!
== Parameters (C, sigma) for Dataset 3 | 25 / 25 | Nice work!
== Email Preprocessing | 25 / 25 | Nice work!
== Email Feature Extraction | 25 / 25 | Nice work!
== --------------------------------
== | 100 / 100 |
パチパチパチ~

今回初めて参考資料のTutorialを利用して課題に取り組みました。
2018_0926_1.pngEx6 Tutorialsが第7週の分
かみ砕いて説明してくれる訳ではありませんが、関数等の利用の仕方が示されるので、課題に取り組む方針が何となく見えてきます。

SVMのモデル作成と評価の手順は関数化されています(svmTrain関数とsvmPredict関数を利用する)。ですので、課題もSVMをどう使うか?という比較的優しい内容でした。

SVMのモデル構築と評価はこんな感じ(↓)です。
model= svmTrain(X, y, T_C, @(x1, x2) gaussianKernel(x1, x2, sig));
pred = svmPredict( model, Xval);
error = sum((pred - yval).^2);

今回の一番大きな収穫は『デバッグ・モード』が使えるようになったことです。
Tutorialで「ブレーク・ポイントを設定して・・・」という説明を見て初めて、Octaveでプログラムにブレーク・ポイントを設定出来ることを知りました。(<==もっと早く知りたかった)

使い方はこんな感じです。

>> dbstop('ex6_spam',36); <==36行目にブレーク・ポイントを設定する
>> dbstatus
breakpoint in ex6_spam at line 36
>>ex6_spam
(プログラムが走って・・・)
=========================
stopped in C:\Users\akira\Desktop\Machine-Learning\machine-learning-ex6\ex6\ex6_spam.m at line 36
36: fprintf('Word Indices: \n'); <==36行目の実行前にブレークが掛かる
debug> <==デバッグモードのプロンプト

debug> who
Variables in the current scope:

file_contents word_indices <==関数内のローカル変数が見える

debug> dbstep <==ステップ実行する
Word Indices:   <== 36行目の実行結果
stopped in C:\Users\akira\Desktop\Machine-Learning\machine-learning-ex6\ex6\ex6_spam.m at line 37
37: fprintf(' %d', word_indices);  <==37行目の実行前に再びブレークが掛かる

debug> dbstep <==ステップ実行する
86 916 794 1077 883 370 1699 790 1822 1831 883 431 1171 794 1002 1893 1364 592 1676 238 162 89 688 945 1663 1120 106
2 1699 375 1162 479 1893 1510 799 1182 1237 810 1895 1440 1547 181 1699 1758 1896 688 1676 992 961 1477 71 530 1699 5 <== 37行目の実行結果
31stopped in C:\Users\akira\Desktop\Machine-Learning\machine-learning-ex6\ex6\ex6_spam.m at line 38
38: fprintf('\n\n');
debug>dbquit <==デバッグ・モードを抜ける

>>

ブレーク・ポイントを設定したプログラムをエディタでみるとこんな感じ(↓)でした。
2018_0926_2.pngブレークを設定すると行番号の左に赤丸が付く

行番号の左(赤丸の位置)をマウスでクリックするだけでブレーク・ポイントを設定/解除出来ることが判りました。(<==これは使える)

この技を知って、デバッグがかなり楽になったのではないか?と思います。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
管理人もお世話になっています。





nice!(2)  コメント(0) 
共通テーマ:日記・雑感

Week6の中間テストに落ちた [Octave]

(2018.09.25)

Machine Learning(↓)を受講しています。
https://www.coursera.org/learn/machine-learning/home/welcome

Week6の中間テストに落ちてしまいました.orz
テストの回答が手元に残らないので、何故不正解となったのか?回答のどこに誤りがあったのか?検討できないのが困りものです。

3回までのリトライが許されていて、3回とも80点以下だと再度試験を受ける前に8時間の補講時間が課せられます。3回目を受ける前に講義資料には目を通したのに落ちるとは・・・

一晩寝てから講義資料に今一度目を通し、再受験してようやく中間テストに合格しました。

ふと気がつくと、COURSERAからメールが届いていました。表題は『Don't give up!』

細やかな気遣いに感謝! <(_ _)>
大丈夫です。諦める気は有りません。ここまで来たんですから・・・

何とか後半のテストとプログラミング課題も提出し、Week6は4日掛けて受講を終えることが出来ました。

やれやれ

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

これまでディスカッションフォーラム(↓)は見ていなかったのですが、講義の補講として参照するのも良いかもしれません。
https://www.coursera.org/learn/machine-learning/discussions

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
やっぱりPython・・・と言う方には(↓)



管理人もお世話になってます。(↓)




nice!(2)  コメント(0) 
共通テーマ:日記・雑感

Week4のプログラミング課題を見直した [Octave]

(2019.09.22)
Machine Learning(↓)のWeek6を受講しています。Andrew Ng先生のビデオ講義にも慣れました。
https://www.coursera.org/learn/machine-learning/home/welcome

少し難し目のコースを順調に受講できているのは、プログラムが上手く動かない時に他の方のコードを参照することを厭わないためだと思っています。自嘲気味に『カンニング』と呼んでいますが・・・

学校なら『カンニング』はタブーかもしれません。けれどもエンジニアの現場では不具合を確実かつ速やかに解決するための手段は選びません。確かな情報を求めて手あたり次第に調べるのは当然のことです。なので、自分で書いたコードが上手く動かないとき、他の方のコードを参照して不具合箇所を探すことにためらいはありません。いずれ、正解の無い問題に取り組むことになるのですから、正解がそこにある間はそれを利用した方が良いと思います。これはCoursera-Honor-Codeを知った上で表明する管理人の考えです。もしMachine Learningコースを受講中で、Coursera-Honor-Codeを知らずにこのサイトを訪れた方がいらっしゃいましたら、是非Coursera-Honor-Code(↓)をご一読下さい。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
<Coursera-Honor-Code>
https://learner.coursera.help/hc/en-us/articles/209818863-Coursera-Honor-Code
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

先日(↓)、Week4のプログラミング課題を達成率80%で合格したとお伝えしました。
https://broadbeans.blog.so-net.ne.jp/2018-09-20

気になっていたので、少し調べて(<==他の方のコードと比べて)みることにしました。
lrCostFunction.mは・・・問題なさそうです。oneVsAll.mも問題無さそうなんだけど・・・ん!
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
英語で受講するのは・・・やっぱりPythonが・・・という方にこれなどは如何でしょう


ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
<誤>
    for c = 1:10
      [ theta ] = fmincg (@(t)(lrCostFunction(t, X, (y == c), lambda)), initial_theta, options);
      all_theta(c,:) = theta(:);
    endfor

submitした結果
Iteration    28 | Cost: 3.391340e-01
Iteration    25 | Cost: 6.631438e-02
Iteration    31 | Cost: 1.002636e-01
Iteration    20 | Cost: 3.598119e-01
Iteration    50 | Cost: 2.353348e-07
Iteration    50 | Cost: 2.353348e-07
Iteration    50 | Cost: 2.353348e-07
Iteration    50 | Cost: 2.353348e-07
Iteration    50 | Cost: 2.353348e-07
Iteration    50 | Cost: 2.353348e-07
==
==                                   Part Name |     Score | Feedback
==                                   --------- |     ----- | --------
==             Regularized Logistic Regression |  30 /  30 | Nice work!
==              One-vs-All Classifier Training |   0 /  20 |       <==不正解
==            One-vs-All Classifier Prediction |  20 /  20 | Nice work!
==          Neural Network Prediction Function |  30 /  30 | Nice work!
==                                   --------------------------------
==                                             |  80 / 100 |
==

<正>
    for c = 1:num_labels
      [ theta ] = fmincg (@(t)(lrCostFunction(t, X, (y == c), lambda)), initial_theta, options);
      all_theta(c,:) = theta(:);
    endfor

submitした結果
Iteration    28 | Cost: 3.391340e-01
Iteration    25 | Cost: 6.631438e-02
Iteration    31 | Cost: 1.002636e-01
Iteration    20 | Cost: 3.598119e-01
==
==                                   Part Name |     Score | Feedback
==                                   --------- |     ----- | --------
==             Regularized Logistic Regression |  30 /  30 | Nice work!
==              One-vs-All Classifier Training |  20 /  20 | Nice work!
==            One-vs-All Classifier Prediction |  20 /  20 | Nice work!
==          Neural Network Prediction Function |  30 /  30 | Nice work!
==                                   --------------------------------
==                                             | 100 / 100 |


『 for c = 1:10』を『 for c = 1:num_labels』に替えてようやく正解になりました。

やれやれ
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
<Pythonを使って機械学習>



nice!(1)  コメント(0) 
共通テーマ:日記・雑感

Week5(ニューラル・ネットワークの第2週)を終了した [Octave]

(2018.09.21)
Machine Learning(↓)のWeek5まで終了しました。
https://www.coursera.org/learn/machine-learning/home/welcome

構築したニューラル・ネットワークを使って手書き文字(数字)を認識した結果(↓)です。

Training Set Accuracy: 95.260000

先日調べたニューラル・ネットワークの認識率(<==97.52%)より若干低くなった理由は分かりません。取り敢えず提出してみると・・・

>> submit
== Submitting solutions | Neural Networks Learning...
Use token from last successful submission :
==
== Part Name | Score | Feedback
== --------- | ----- | --------
== Feedforward and Cost Function | 30 / 30 | Nice work!
== Regularized Cost Function | 15 / 15 | Nice work!
== Sigmoid Gradient | 5 / 5 | Nice work!
== Neural Network Gradient (Backpropagation) | 40 / 40 | Nice work!
== Regularized Gradient | 10 / 10 | Nice work!
== --------------------------------
== | 100 / 100 |
パチパチパチ~

バックプロパゲーション(実行結果から逆に、重みづけベクターを修正していく)の組み込みはとても苦労しました。なんとか書き上げて実行してみたのですが結果が合いません。orz

何度見直しても駄目だったので、止む無く他の方のコードを拝見したのですが・・・

????(ほとんど)同じ????


他の方のコードに置き換えると正しい実行結果が得られるのに、自分のコードだと何故駄目なのか?
途中の計算を比較しても、違いが見つかりません。orz

順番に確認を進めて、最後に出力する行列のサイズを調べたところ・・・あっ!


Theta2_grad = (D3' * A2)/m + lambda*Theta2/m;
Theta1_grad = (D2' * A1)/m + lambda*Theta1/m;


Theta1_grad = (D3' * A2)/m + lambda*Theta2/m; <== これを間違えていた
Theta2_grad = (D2' * A1)/m + lambda*Theta1/m; <== これを間違えていた

戻り値は1次元ベクトルなので、Theta1_gradとTheta2_gradが入れ替わっても、その後の計算は支障なく進んだものと思われます。(<==結果だけが異なる)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
管理人もお世話になっています(↓)


ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

バックプロパゲーションの回答部分だけを記すとこんな感じ(↓)です。
A1 = [ones(m, 1) X];
Z2 = A1 * Theta1';
A2 = sigmoid( Z2 );
A2 = [ones(m, 1) A2];
Z3 = A2 * Theta2';
A3 = sigmoid( Z3 );

for c =1:num_labels
  J = J - sum((y==c).*log(A3(:,c))+(1-(y==c)).*log(1-A3(:,c)))/m;
endfor
  Theta1(:,1) = 0;
  Theta2(:,1) = 0;
  J = J + lambda*(sum(Theta1(:).^2)+sum(Theta2(:).^2))/(2*m);
  
D3 = zeros(size(A3));

for c =1:num_labels
  D3(:,c) = A3(:,c) - (y==c);
endfor
  
  D2 = (D3*Theta2).*sigmoidGradient( [ones(size(Z2, 1), 1) Z2] );
  D2 = D2(:, 2:end);
  
  Theta2_grad = (D3' * A2)/m + lambda*Theta2/m;
  Theta1_grad = (D2' * A1)/m + lambda*Theta1/m;


どうやら、大きな山場を越えたようです。

これで管理人は、自力でニューラル・ネットワークを構築できるようになりました。(多分)
<==本当かね~

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
管理人もお世話になっています(↓)







nice!(2)  コメント(0) 
共通テーマ:日記・雑感

いよいよNeural Networksに取り組む [Octave]

(2018.09.20)
Machine Learning(↓)の受講を始めて3週間近く経ちました。
https://www.coursera.org/learn/machine-learning/home/welcome

途中経過はこんな感じ(↓)です。
9/3 受講開始
9/10 第1週の課題提出(<==期限ギリギリ)
9/17 第2週の課題提出(<==期限ギリギリ)
9/19 第3週の課題提出(<==余裕の提出)
9/20 第4週の課題提出(<==勢い付いて連続提出) 

ここに来て調子付いてます。¥(・_・)

2018_0920_1.png手書きの数字
いよいよニューラル・ネットワークで手書き文字の認識!と張り切ったのですが、
最初の課題は、ロジスティック回帰分析を使ったマルチクラスの分類でした。

先週の課題で分かったつもりになっていた『ロジスティック回帰分析』でしたが、実際にマルチクラスの分類をやらされて、四苦八苦しました。

それでも、何とかlrCostFunction.mを書き上げて(<==カンニングしてません)実行すると・・・
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
Program paused. Press enter to continue.

実行した結果とExpectedが一致しました。
パチパチパチ~

lrCostFunction.mの回答はこんな感じ(↓)
hx = sigmoid(X * theta );
theta(1) = 0;
J = -sum(y.*log(hx)+(1-y).*log(1-hx))/m + lambda/(2*m)*(sum(theta.^2));
grad = X'*(hx - y)/m + lambda/m*theta;

マルチクラスの分類でも合否判定(二値)クラスの分類と同じコスト関数です。
当然と言えば当然なんですが・・・添え字でループ回したらこうは行きません。
あらためてベクトル表記の威力を感じます。

続いて、20×20ピクセル画像5000枚を教師付き学習(<==Θベクトルを最適化)するonevsAll.mを書き上げて(<==カンニングしてません)実行すると・・・
Training One-vs-All Logistic Regression...
Iteration 50 | Cost: 1.405529e-02
Iteration 50 | Cost: 5.725224e-02
Iteration 50 | Cost: 6.397841e-02
Iteration 50 | Cost: 3.810361e-02
Iteration 50 | Cost: 6.186249e-02
Iteration 50 | Cost: 2.205048e-02
Iteration 50 | Cost: 3.554620e-02
Iteration 50 | Cost: 8.549827e-02
Iteration 50 | Cost: 7.939720e-02
Iteration 50 | Cost: 9.886766e-03
Program paused. Press enter to continue.

何か結果は出ますが、この段階では正否は分かりません。

さらに結果を判定するpredictOneVsAl.mを書いて実行した結果は・・・
Training Set Accuracy: 9.80000 <== 認識率9.8% orz

どこに間違いがあるのか????

最初は何も考えず、ex2からコピーしたコード(↓)をpredictOneVsAl.mに書きました。
hx = sigmoid(X * theta);
for i=1:m
if( hx(i) >= 0.5 )p(i)=1;
endif
endfor

改めて、predictOneVsAl.mに書かれた指示を読み直すと・・・
『You should set p to a vector of predictions (from 1 to num_labels).』
『Hint: This code can be done all vectorized using the max function.』

今ならすんなり読み取れますが、最初は回答のことを考えながら目で英文を追いかけるので意味が読み取れません。hxの中(5000×10ベクトル)を調べなおして、漸く指示(↑)の意味が分かってきました。

書きなおしたpredictOneVsAl.mのコードがこれ(↓)です。
hx = sigmoid( X1 * all_theta' );
for i=1:m
[ w,iw ] = max ( hx(i,:) );
p(i)=iw;
endfor

で、改めてex3を実行してみると・・・
Training Set Accuracy: 95.000000
パチパチパチ~

if( hx(i) >= 0.5 )p(i)=iw;とすると89%に下がります。どちらが正しいのか?分かっていません。

勢いに乗ってpredict.mを書き上げex3_nnを実行すると・・・
Loading and Visualizing Data ...
Program paused. Press enter to continue.

Loading Saved Neural Network Parameters ...

Training Set Accuracy: 97.520000
Program paused. Press enter to continue.

ロジスティック回帰の認識率が95.00%
ニューラル・ネットワークの認識率が97.52%
思ったより地味な結果です。
しかしこの後、さらに驚きの結果が待ち受けていました。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
管理人もお世話になっています(↓)


ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

>> submit
== Submitting solutions | Multi-class Classification and Neural Networks...
Use token from last successful submission :
Iteration 33 | Cost: 3.391340e-01
Iteration 23 | Cost: 6.631438e-02
Iteration 34 | Cost: 1.002636e-01
Iteration 20 | Cost: 3.598119e-01
Iteration 50 | Cost: 2.353348e-07
Iteration 50 | Cost: 2.353348e-07
Iteration 50 | Cost: 2.353348e-07
Iteration 50 | Cost: 2.353348e-07
Iteration 50 | Cost: 2.353348e-07
Iteration 50 | Cost: 2.353348e-07
==
== Part Name | Score | Feedback
== --------- | ----- | --------
== Regularized Logistic Regression | 30 / 30 | Nice work!
== One-vs-All Classifier Training | 0 / 20 | <==何故!
== One-vs-All Classifier Prediction | 20 / 20 | Nice work!
== Neural Network Prediction Function | 30 / 30 | Nice work!
== --------------------------------
== | 80 / 100 |
==

自力でここまで(なんとか)やってきたのですが、この結果に打ちのめされました。orz

しかし、『困った時のGoogle先生』で他の方の回答を調べても、間違いは見つかりませんでした。
これは一体どういうことなのでしょうか?

暫し悩んで・・・

まぁ、達成率80%でも合格ですから気にせず先に進みます。(<==結果オーライな奴)

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
管理人もお世話になっています(↓)


nice!(1)  コメント(0) 
共通テーマ:日記・雑感

Machine LearningのWeek3を終了した [Octave]

(2018.09.19)
Machine Learning(↓)を受講しています。
https://www.coursera.org/learn/machine-learning/home/welcome

期限ギリギリで課題を提出したWeek1とWeek2と違って、今回(Week3)は余裕です。¥(・_・)
ビデオ講義の受講に大夫慣れてきた気がします。先達の知恵を借りて予習しているのが大きいようです。
こことか(↓)
https://qiita.com/junichiro/items/ee50af10df77d52cd432
こことか(↓)
https://qiita.com/katsu1110/items/423fc9ac567710a1bd9b

2018_0919_1.png発展課題にも着手した
lambda = 1,0,100,0.3についてフィッティングの様子を調べてみました。

costFunctionReg.mの課題を最初はこんな風に書いたのですが・・・
hx = sigmoid(X * theta );
J = -sum( y.*log(hx) + (1-y).*log(1-hx))/m + lambda/(2*m)* ( sum( theta .^2 ) - theta(1).^2);
grad = X'*( hx - y )/m + lambda/m*theta;
grad(1) = X(:,1)'*( hx - y )/m;

先達の知恵を借りてこんな風に書き直しました。
theta(1) = 0;
J = -sum(y.*log(hx)+(1-y).*log(1-hx))/m + lambda/(2*m)* ( sum( theta.^2));
grad = X'*( hx - y )/m + lambda/m*theta;

なるほど~
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
機械学習に興味はあるけど英語は嫌! Pythonが良い!と言う方には



学びに疲れた時は・・・

Octaveは凄い [Octave]

(2018.09.17)

今、これ(↓)に取り組んでいます。
https://www.coursera.org/learn/machine-learning/home/welcome

段々、受講のコツが掴めてきました。
(1)日本語テキストを斜め読みして、ザッと内容を把握しておく。
(2)日本語字幕を眺めながら説明ビデオを見る。
(3)課題はちゃんと取り組む。

概論的な内容で1週目が済んだので気楽に構えていたら、2週目のエクササイズでガツンとやられました。提出期限ぎりぎりだというのにOctaveを上手く扱えません。orz

結局、カンニング(↓)して課題をクリアしました。
http://blog.soushi.me/entry/2017/03/10/125749

2018_0917_1.png何とか課題をクリア?

このままでは落ちこぼれ必至なので、おまけの課題(多変数の線形回帰と正規方程式を用いた解法)に取り組むことにしました。ここでベクトル表記の威力が炸裂しました。

1変数のコスト関数がこちら(↓)で、
J = sum((X*theta-y).^2)/(2*m); <==これをパクッてきた

2変数のコスト関数は・・・
J = sum((X*theta-y).^2)/(2*m); <==これは自分で考えた(?)

1変数の最急降下法がこちら(↓)で、
for iter = 1:num_iters
    theta = theta - alpha / m * X' * (X * theta -y);    <==パクッてきた
    J_history(iter) = computeCost(X, y, theta);
end

2変数の最急降下法は・・・
for iter = 1:num_iters
    theta = theta - alpha / m * X' * (X * theta -y);  <==これは自分で考えた(?)
    J_history(iter) = computeCostMulti(X, y, theta);
end

そうなんです。ベクトルで表記すると1変数も多変数も同じなんです。さらっと行列計算をこなすOctaveすげ~

正規化方程式だって・・・
theta = pinv(X'*X)*X'*y; <==これは自分で考えた(?)
考えたって言うレベルではありませんね。これ以外に書きようが無いんだから・・・
2018_0917_2.png補講もクリア

自分で課題を解いてみて、少しやる気が出てきました。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー






nice!(1)  コメント(0) 
共通テーマ:日記・雑感

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。