さて、今回は番外編ということで”Courcera Machine Learning Week 4”より、非常に難解だったニューラルネットワークを少し応用して遊んでみたいと思います。
今回やりたいことは、前回に続いて2つ目です!
- 与えられたデータをトレーニング/テストセットに分けてモデルの精度確認
- 予測の結果、学習させたモデルによって間違えて予測した数字の表示
- ペイントで書いた数字を入力して予測!
※前提として、Courcera Machine Learning Week 4の課題が終わっていることとします。もし終わっていない方はこっそり参考にしてください。
2.間違えてしまった画像データの確認
ニューラルネットワークでも予測が困難なへたくそな字を確認するコードを作っていきたいと思います。
まずはpred関数に学習済みシータ1,2とまだ見ぬデータX_testを入れて予測してみましょう。pred_testに予測結果が入ります。
pred_test = predict(Theta1, Theta2, X_test);
続いて間違えて予測した画像データが何番目のなのかカウントしていきます。
ここでは、for文を用いて一つずつpred及びyを照らし合わせていきます。pred(i)においてy(i)の値と差があった行番号を行列mis_numに格納していきます。
t=size(pred,1);
mis=zeros(t,1);
mis_num=0;
for i=1:t
if (pred(i)~=y(i))
mis(i)=1;
mis_num=[mis_num i];
endif
end
そして得られたmis_num行列をdisplayData関数に入れてみましょう。
displayData(X_test(mis_num,:));
するとこんな感じに表示されます。
左:間違えて予測した画像データ 右:元のデータからランダムに抽出した画像
確かに、人間の目で見てもこれは何て書いてあるかわからない!というのが多い気がしますが、明らかに分類できよこれ!ってのもありますね。
こうして考えると人間の目は相当優秀な分類器なんですね。
さて、次回は実際に自分で書いた数字を分類させたいと思います!
コメント