![見出し画像](https://assets.st-note.com/production/uploads/images/145584687/rectangle_large_type_2_cc54a09ad06e7d2c345a204b6f90cb12.png?width=1200)
野良DSの適当な解説~学習に必要なデータ数ってどれぐらいなの?
最初のQA
質問)機械学習のデータってどれぐらい用意すればいいの?
回答)必要な量を用意するのはほぼ無理です。だから、データが足りないことを常に意識して対応しましょう。
解説しよう
機械学習が学習フェーズでやっていることは、変数の推定であるとここ(機械学習の学習ってなに?)で書きました。
んで、一番素直なケースでは、未知の変数の数だけデータがないと変数の推定は出来ません。
f(x,y) = ax + by + c
なんて場合で、f() = 0 となるような a,b,c の組み合わせを求める場合、データは最低3つ必要ですよね。
だから、厳密に求めるんだったら、最低限、変数の数だけデータを用意するべきです。もちろん、これは機械学習でも一緒。
そして、機械学習では f() = 0 という条件も実は与えられなかったりする。というわけで、必要なデータの数はもっと増えていくわけです。
たまりませんよね。
だから、機械学習(とくにDNNみたいな奴)は、厳密に計算することをあきらめています。
他にも、学習するにあたり乱数を使っているようなモデルは、大抵厳密な計算をあきらめていると思って構わないかと思います。
適当に計算することを考えると、乱数ってとっても便利なんですよ。
んで、適当に計算するから、どこまで計算して良いのかが判んなくなってくる。だから、ある程度の成績になったところで計算を止めるという処理なんてものも出てくる。
ある程度の成績、つまり、適当に計算した値がそこそこの結果を示すようになったって状態です。厳密解を求めたいわけじゃないんで、当然ここで処理は打ちきる流れとなります。
ちなみに、そうするための処理方法は色々。
単純に繰り返し計算の数を決めているというシンプルなものから、繰り返し計算をするたびにモデルを評価して、モデル性能の推移を見て決めるもの、
色々とデータの重要度をいじりつつ、モデルをひたすら拡大していきながら、良い感じの性能になったら止めるもの。
まぁ、本当に色々です。
適当に計算する方の利点は案外少ないデータでも何とかなってしまうというところにもあります。
も・ち・ろ・ん、データはあるに越したことはありません。何故なら、データが与えられなかった箇所については、どんなに頑張っても適当な結果しか返さないからです。
でも、どんなに頑張ってもこれが限界ってケースがある。その場合は、色々な工夫をして、それでも何とか解を求めようと頑張るのです
結局、満足いくデータが集められるケースなんてほとんどないんですよね。だから、実のところどれだけデータを用意すれば良いの?に対するベストな解なんてものはありません。
でも、それがわからないとデータ収集の計画が立てられないですよね。困りますよね。
真面目なデータサイエンティストは、適当なことを言うことに対して非常に強い心理的抵抗を感じるので、明確な答えを聞くことは出来ません。
だって、ないんだもん。答えられるわけがない。
でもまぁ、目安となる数値はいっぱいあります。
モデルの変数の数
実のところモデルなんてまだ決まっていないからわからないと思うんですが、でもまぁ、これぐらいの規模のモデルであると雑に見積もって変数の数を推定しちゃいます。で、更に f() = 0 というシンプルな問題だと割り切っちゃう。すると、必要なデータ数 = 変数の数となります。一時期、画像認識に必要なデータ数が数百万という話がありましたが、その辺で使うモデルの変数の数も数百万ぐらいだったんで、まぁ、こういう目安が一番わかりやすいかなと思います。
説明変数の数
内容的には、説明変数の数からモデルの複雑さを類推しようといったところです。説明変数一つあたり変数がどれぐらいあるのか?なんてものは本気でケースバイケースなのですが、こんなものは概算。ざっくり行きましょう。3層のニューラルネットワークという結構シンプルなモデルを考えたとき、説明変数が100あると、中間層が50で出力層が20で…とか考えると、そこそこ大変な量の変数になります。ざっくり 101*50+ 51 * 20 = 6070 ですから、説明変数一つあたりこの場合は60変数ぐらいですね。500 - 100 - 20 ぐらいで考えると、501 * 100 + 101 * 20 = 52120 ですから、説明変数1つあたりの変数は104。とまぁ、モデルによって色々変わるわけですが、余裕をみて、説明変数の数×100ぐらいでも良いかもしれませんね。
データの多様性も大事です
でも、これだけ用意してねっていっても、データの多様性に乏しいものが100万あってもしょうがないんで、そこはしっかりと理解してください。
データを用意するときに必要なのは数と質の両方です。例えば天気の予測モデルを作りたいのでとりあえず夏のデータを用意しましたでは意味が無いのはわかりますよね。夏のデータから冬のデータを推測することは正直無理です。でも、季節の問題だとわかるのに、自分の仕事のデータになると何故かわかんなくなる人が多数。あんなにたくさんデータを用意したのにとか文句を言われちゃいます。
だから、データの多様性についても大事ですよ。これはまた別の記事で書きますね。
そして頭を悩ますノイズの問題
データ中に嘘が紛れ込むこともあるんですよ。正直、こういうデータがあるとかなり困る。
学習の過程でノイズが埋もれていくような手法だとまだ何とかなるんですが、ブースティングとかの重みをいじる系の手法だとほんとにダメ。で、手法にもよるのですが、ノイズが一つ紛れ込むと、そいつを打ち消すために更に大量のデータが必要になります。
ここもデータの質の問題の一つですね。逆に、ノイズが減らせればモデルの質も上がるし良いことだらけだったりもします。
というわけで、データの質を改善するため、いろんな事をやらないといけないんです。
今回の結論
「機械学習で必要なデータはとっても多いし、単純に決めることは難しい。」
「データの数だけではなくデータの質も大事です。特に多様性とノイズには注意しましょう。」
覚えときましょう。
この記事が気に入ったらサポートをしてみませんか?