丹羽の卒論日誌


https://www.str.ce.akita-u.ac.jp/~gotouhan/aono/a.txt

python

6月



6/4


CIFAR-10という動物や車,飛行機の画像が大量にあるデータをつかって機械学習の練習をした.まずは代表的なNNであるMLPをつかって行った.epochは3で行った.

6/3


自分が手書きで書いた星を見せたときどんな数字だとモデルが判断するのか試してみた.
http://www.str.ce.akita-u.ac.jp/~gotouhan/j2025/niwa/hosi.png
結果,8と判断した.当然星なので8ではない.このモデルはどんなに数字とはちがくても0〜9のどれかで答えを出すようになっているので,次に確信度0.7以下では数字ではない可能性があると判断できるようにした.
しかし,結果は8で確信度は0.994つまり99.4%と非常に高い確信度で8と判断してしまったので,何が原因か考えている.
他の数字ではない画像で試してみた.
http://www.str.ce.akita-u.ac.jp/~gotouhan/j2025/niwa/uzumaki.png http://www.str.ce.akita-u.ac.jp/~gotouhan/j2025/niwa/ka.png
これらの画像も確信度99%で0,98%で4と判断されてしまった.


・なぜ,数字ではない画像を見せたときに確信度が0.7以下とならず,99%で何らかの数字が選ばれるかの考察
まず,いろいろな数字ではない図形を見せても99%で何らかの数字だと判断される時点で,このモデルがおかしいのではなく,正常に動いた結果そのように判断されていると考察できる.
では,なぜ99%で何らかの数字が出るのか考えてみた.今回のモデルの場合の確信度とはモデルがこの数字だと判断したときの自信の度合いを表す.つまり0か6かで悩んでいた場合は確信度は低くなるということである.このことから今回,数字ではない画像を見せたとき,例えば渦巻の部分的な特徴が0の部分的な特徴と似ていただけでなく他の数字だと0に比べて似ている特徴が少なかったため0が圧倒的有力候補になってしまったと考えられる.
試しに,0か6か判別しづらそうな画像を見せてみた.
http://www.str.ce.akita-u.ac.jp/~gotouhan/j2025/niwa/maru.png
この結果は’数字ではない可能性があります’と出た!つまり上記の考察のもとで考えるとモデルは0か6かで迷って確信度が0.7よりも低くなったため数字ではない可能性がありますと出たと考えられる.
よって数字ではない画像を数字ではないと判別するには,学習データに大量の数字ではないデータを新たに取り入れ,クラス分けを0〜9だけでなく+unknownのようにする必要があると考察できる.


そもそも教師あり学習は特徴量と正解データによって正解を予想するので,学習させてないパターンの画像を見せてもうまく行くわけがないと思った.今回の練習で教師あり学習の基礎を再び思い出すことができた.

6/2


今回は自分の手書きの数字4に線や点などの障害物を加えたときに,うまく4と判別できるか試してみる.さらに新たに確信率というものを加えた.確信度とは,モデルが数字を判断するにあたってどれくらいの自信をもって判断しているかの指標である.
たとえば自分が手書きで書いた数字6でテストした結果コレは6ですと判断したとする.一見すると正解しているので良いと思われるが,確信度が0.60,つまり60%であった場合,モデルはあまり自信ないけど多分6というように判断しているということになる.つまり,答えを出す過程がわかるのでより解像度を上げやすい.
http://www.str.ce.akita-u.ac.jp/~gotouhan/j2025/niwa/4senn.png
結果:ノイズをいれても4と判断してくれた確信度は100%と非常に良い.
テスト精度は99.06%と高いが,間違えているところを見ると0と6で間違えていた.←これは人間でも間違えやすい


明日やること,数字ではない図形を見てどう判断するのか見てみる.このモデルは0〜9のどれかの数字であるとしか判断することができないため,数字ではないものを見せたらどうなるのか見てみたい.

5月

5/29


昨日よりもさらに精度を上げるためにエポック数を3から10に増やした.(しかし,増やしすぎると初見データに弱くなるという過学習が生じるので注意)
結果は97.94%と上昇した.

・更に精度を上げるためにCNNに変えてみた.
 結果,テスト精度が99.07%まで,上昇した.今までlossが低くて20くらいだったが,5くらいまで下がった.

・CNN(畳み込みニューラルネットワークとは) NNの一種で画像処理に特化している.NNは画像を単なる数値として処理しているのでピクセルの並びそのものを覚えているというイメージ.したがって画像の中の対象の位置,場所にとても強いわけではない.一方でCNNは特徴を局所で見る,画像の中の対象の特徴を部品として見るので位置がちがくても対応することができる.つまり,NNは場所ごとの意味を持たないが,CNNは特徴のパターンを学んでいるため位置に強いのである.

CNNは3つの要素で構成されている.
・畳み込み層:局所的な部分の特徴を見つける.小さなフィルター(重み行列)をスライドさせ,エッジを見つける)
・プーリング層:特徴を圧縮する.画像データは大量の数値の塊である,そこで局所的な領域の行列の最大値だけを残すことで情報量を簡素化し,小さな誤差や不要な情報を排除する.
・全結合層:畳み込み+プーリングによって得られた特徴の集合からすべての特徴を重み付きで計算して最終的な判断を下す.

5/28



MNISTというものを用いて機械学習の練習をした.
・MNISTとは

 MNISTとは、機械学習や画像認識の分野でよく使われる有名なデータセット.MNISTは、「0〜9の手書き数字画像」を集めたデータセットで、主に画像分類アルゴリズムの学習・評価に使われる~

 具体的には:
 0〜9の数字(10クラス)
 白黒の小さな画像(28×28ピクセル)
 学習用に約60,000枚、テスト用に約10,000枚
 という構成になっている.

・今回使ったモデル:ニューラルネット

・ニューラルネットが画像処理に強い理由

画像ニューラルネット
----------------------
点が近いと線になる近い情報から特徴を作る
線が集まって形になる特徴を積み上げて形になる

なので相性が良い. 例えば決定木では位置や形に弱く,質問を投げるだけで法則を見つけ出すのは非常に難しい.
ニューラルネットは層に分けて画像の特徴を計算するのでうまく行きやすい.

・6万個のデータを3回学習させてできたモデルのテスト精度は96.92%と高い数値であった.

・次に自分が手書きで書いた数字「3」を学習させたモデルに見せてちゃんと3と判別するのか試してみる.
http://www.str.ce.akita-u.ac.jp/~gotouhan/j2025/niwa/3.png


結果は3とでて,当てることに成功した.テスト精度は97.22%だった.


5/27



・欠損値が欠けているとき,そのデータが時系列データのとき,欠損値の穴埋めは線形補間が有効.時系列データには「相互に依存する」という特徴があるため欠損値の前後の値をもとに欠損値を予測することは非常に有効.
・前処理の段階で,欠損値を予測するために機械学習を行うのも有効.

5/25



・axis=0 → 縦方向(行をまたぐ)
・axis=1 → 横方向(列をまたぐ)


・前回まではホールドアウト法によってデータをテストデータと訓練データに分割したが,トライ&エラーを繰り返しているうちにテストデータに都合がいいようにチューニングしていると言える.

→したがってこの問題に対処するために,
 ①学習に使用するデータ
 ②学習には使用せずにチューニングの参考に使用するデータ
 ③チューニングを行った最終的な学習済みモデルに対して予測性能を評価するためのテストデータ
 の3つに分割する.

・使用する特徴量を絞り込む際,はずれ値をチェックしてから,相関係数をチェック.理由はこの順番を逆で行うと相関係数が外れ値の影響を受けてしまうから.

・重回帰分析ではAIによってつくられた計算式の係数の大きさでそれらの特徴量の影響度を比較するが影響度が大きいとはいえ,その特徴量を1増やす労力が非常に大変で結果,係数は小さいがその特徴量のほうが影響を出しやすいという場合が存在する.

5/21

model = tree.DecisionTreeClassifier(max_depth = 5,
random_state = 0,class_weight ='balanced')

は不均衡データで比率の大きいデータの影響力を小さくし,比率の小さいデータの影響力を大きくするため分岐条件を考える際の影響度という点で均一になり,予測性能の高いモデルを作れる確率が上がる.

mean()

すると文字列列を自動無視してくれました。

今の pandas は:

「文字列があるならエラーにする」

という仕様になっています。

今後のコツ

groupby().mean() を使うときは、

['Age'] ['Fare'] ['Survived']

みたいに、

「どの数値列を平均するか」

を明示すると安全です。

http://www.str.ce.akita-u.ac.jp/~gotouhan/j2025/niwa/abcd.png

5/20

今まで扱っていたデータは(例)アヤメの種類分別   では3種類の正解データがそれぞれ50種類均等にあったが,今回行う客船沈没事故での生存予測では正解データである死亡者データが549件,生存者データが342件と正解データの件数の比率に差が生じている. このようなデータを不均衡データという.

・決定木モデルは他のモデルに比べ,外れ値の影響を受けにくい.

データの比率に違いがあることで起きる問題

例えば生存者データが5%,死亡者データが95%であった場合,モデルは法則など関係なくとりあえず死亡とすれば正解してしまうため,よくない.

5/18

明日以降は例題のコードを一から打つのではなく,修正だけしていく

http://www.str.ce.akita-u.ac.jp/~gotouhan/j2025/niwa/abcd.png

http://www.str.ce.akita-u.ac.jp/~gotouhan/j2025/niwa/b.png


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS