丹羽の卒論日誌
https://www.str.ce.akita-u.ac.jp/~gotouhan/aono/a.txt
python3 -m venv .venv(最初のみ) source .venv/bin/activate ←仮想環境に入る これでpip installができる deactivate ←仮想環境から出るコマンドの表示と実行 →python:インタープリターを選択 →VSコードでも仮想環境に入ることができる
MNISTというものを用いて機械学習の練習をした.
・MNISTとは
MNISTとは、機械学習や画像認識の分野でよく使われる有名なデータセット.MNISTは、「0〜9の手書き数字画像」を集めたデータセットで、主に画像分類アルゴリズムの学習・評価に使われる~
具体的には:
0〜9の数字(10クラス)
白黒の小さな画像(28×28ピクセル)
学習用に約60,000枚、テスト用に約10,000枚
という構成になっている.
・今回使ったモデル:ニューラルネット
・ニューラルネットが画像処理に強い理由
| 画像 | ニューラルネット |
| ---------- | ------------ |
| 点が近いと線になる | 近い情報から特徴を作る |
| 線が集まって形になる | 特徴を積み上げて形になる |
なので相性が良い.
例えば決定木では位置や形に弱く,質問を投げるだけで法則を見つけ出すのは非常に難しい.
ニューラルネットは層に分けて画像の特徴を計算するのでうまく行きやすい.
・6万個のデータを3回学習させてできたモデルのテスト精度は96.92%と高い数値であった.
・次に自分が手書きで書いた数字「3」を学習させたモデルに見せてちゃんと3と判別するのか試してみる.

結果は3とでて,当てることに成功した.テスト精度は97.22%だった.
・欠損値が欠けているとき,そのデータが時系列データのとき,欠損値の穴埋めは線形補間が有効.時系列データには「相互に依存する」という特徴があるため欠損値の前後の値をもとに欠損値を予測することは非常に有効.
・前処理の段階で,欠損値を予測するために機械学習を行うのも有効.
・axis=0 → 縦方向(行をまたぐ)
・axis=1 → 横方向(列をまたぐ)
・前回まではホールドアウト法によってデータをテストデータと訓練データに分割したが,トライ&エラーを繰り返しているうちにテストデータに都合がいいようにチューニングしていると言える.
→したがってこの問題に対処するために,
①学習に使用するデータ
②学習には使用せずにチューニングの参考に使用するデータ
③チューニングを行った最終的な学習済みモデルに対して予測性能を評価するためのテストデータ
の3つに分割する.
・使用する特徴量を絞り込む際,はずれ値をチェックしてから,相関係数をチェック.理由はこの順番を逆で行うと相関係数が外れ値の影響を受けてしまうから.
・重回帰分析ではAIによってつくられた計算式の係数の大きさでそれらの特徴量の影響度を比較するが影響度が大きいとはいえ,その特徴量を1増やす労力が非常に大変で結果,係数は小さいがその特徴量のほうが影響を出しやすいという場合が存在する.
model = tree.DecisionTreeClassifier(max_depth = 5, random_state = 0,class_weight ='balanced')
は不均衡データで比率の大きいデータの影響力を小さくし,比率の小さいデータの影響力を大きくするため分岐条件を考える際の影響度という点で均一になり,予測性能の高いモデルを作れる確率が上がる.
mean()
すると文字列列を自動無視してくれました。
今の pandas は:
「文字列があるならエラーにする」
という仕様になっています。
今後のコツ
groupby().mean() を使うときは、
['Age'] ['Fare'] ['Survived']
みたいに、
「どの数値列を平均するか」
を明示すると安全です。
今まで扱っていたデータは(例)アヤメの種類分別 では3種類の正解データがそれぞれ50種類均等にあったが,今回行う客船沈没事故での生存予測では正解データである死亡者データが549件,生存者データが342件と正解データの件数の比率に差が生じている. このようなデータを不均衡データという.
・決定木モデルは他のモデルに比べ,外れ値の影響を受けにくい.
例えば生存者データが5%,死亡者データが95%であった場合,モデルは法則など関係なくとりあえず死亡とすれば正解してしまうため,よくない.
明日以降は例題のコードを一から打つのではなく,修正だけしていく