まずは機械学習を知ろう! ということで
この記事を読んでみます。 qiita.com
「機械学習で何をしたいのか」を決めてほしい
競艇または競輪の結果を予測してお小遣い稼ぎがしたい!
理論の完璧な理解は後回しでいい
はい!!
高校時代の数学すら忘れました
入力データをそのまま学習できるわけではない
ふむ?
まず識別っていう概念があるらしいですね。
例えば、5x5の大きさの白黒の画像はこんな感じで表わせます。 [[0 3 3 8 6] [5 7 8 0 1] [1 8 7 1 4] [2 0 8 1 5] [9 9 5 7 4]]
つまり、画像の縦x横の大きさの配列に、ピクセルごとの明るさを格納すればいいわけです。
これを1次元の配列になおしてみるとこうなります。
[0 3 3 8 6 5 7 8 0 1 1 8 7 1 4 2 0 8 1 5 9 9 5 7 4]
白黒だから明るさ情報(灰色にちかいとか)だけを数列に格納するなるほど。
機械学習アルゴリズムにこのベクトルを入力しても、うまく学習を行うことができません。画像をベクトルに変換できたし機械学習アルゴリズムに入力して学習させてみよう!と意気込んでやってみると精度が出なくてがっかりします。これを次元の呪いといいます。
ふーむ、なんで?
なぜこのようなことが起きるかというと、機械学習アルゴリズムは「ブドウとリンゴのどこに着目すれば両者を分類できるか」を判断できないからです。 ブドウとリンゴの色に着目すればいいのか、形に着目すればいいのか。どこを見れば両者を分類できるかを、機械学習アルゴリズムが判定することは基本的にはできません。よって、ブドウとリンゴのどこを見ればいいのかを、人間が教えてあげる必要があります。
なんか難しくなってきた…
つまり競艇とかで考えると、選手やコースのデータを大量に食わせたら誰が次1位になるかを判断させるためには、何の値が1位に紐付いているかを教えてあげないといけない…?
この識別したい物体やデータからより有用な情報を取り出す操作を特徴抽出といいます。
ふーむ。
ここまで読みましたがきになるコメントが。
とても役立ちます、ありがとうございます 。ただ、重箱の隅つつくつもりは無いのですがミスリーディングな感じがします。
まず「入力データをそのまま学習できるわけではない」と大きく書かれていますが、理屈の上では「入力データはそのまま学習できます」よね?ただ、次元が高すぎると学習完了までの時間が膨大で利用者が許容できないという問題に当たります。それを何とかするための「特徴抽出」です。
超ざっくり言えば
・次元が高い方が一般的に精度が高い(ノイズのことは無視して超ざっくり言ってます) ・次元が高いと遅い ので、何とかするために :fearful: 特徴抽出して次元を落としたり、並列計算できるようにしたり、ハードウェア自体を設計して高速化をはかって皆がんばってます。
とあるので、マシンリソースさえあれば一から十までやってくれるけど、自分の中であたりをつけながら(=特徴抽出)やるほうがリソースくわないよーってことですかね。