機械学習のためのデータ
機械学習や深層学習のためのデータについて記事にまとめました。
目次
データの重要性
言うまでもないですが、機械学習にとってデータがとても大事です。
機械学習も、深層学習(ディープラーニング)も、データがなければ、何もできません。
機械学習させるための仕事の80%がデータの用意に費やされていると言われています。
機械学習のために用意された学習データ(訓練データとも言います。)の質が、学習の結果を大きく影響します。
ほとんどの機械学習アルゴリズムは大量のデータを与えなければ正しく動作しないことがよくあります。
人間にとって単純な問題でも、コンピュータに実現してもらうには、大量なデータが必要です。
正確な画像認識や音声認識のタスクを実現するには、数万、数百万の訓練学習データが必要です。
最近優秀な改良されたアルゴリズムは、少ない訓練データでも高い認識率を達成するものも開発されています。
学習用データと検証データ
機械学習において、検証データを用意して、学習の結果を検証するのもとても大切です。一般的なやり方としては、データセットを用意した上で、学習データを8割にして、検証データを2割するのがよくあります。
もちろん、これは、こうしなければいけないというよりは、慣例的にこうなることが多いということです。場合によっては70%と30%の分け方も自由ですし、内容によって臨機応変に決定して良いものです。
機械学習のみならず、深層学習も同様の手法で、学習データと検証データを分けます。
フレームワークによって、自動的に分けてくれる機能も用意されています。
過学習(over feeding)
過学習とは、学習データだけが持つ特徴に対して過剰な学習が行われることにより、実際に予測するデータに対する正解率が下がるということです。
過学習を防ぐためには、ドロップアウトという手法があります。
ニューラルネットワークにドロップアウト層を設けることにします。
ドロップアウト層で、全結合層のノード群と出力層の間の接続の一部をランダムに切断することで過学習を防ぐことができます。
次元の呪い(the curse of dimensionality)
機械学習用のデータの次元が多ければいいというわけではありません。
次元の呪いと言うのはデータの次元数が大きくなり過ぎると、そのデータで表現できる組み合わせが飛躍的に多くなってしまい、その結果、手元にある有限なサンプルデータでは十分な学習結果が得られなくなることを指しています。
次元の呪いに気をつけないと、無駄な計算が発生するだけでなく、有効な学習結果が得られないことになります。
特に関係性のない特徴量を学習させてもそもそも意味がありませんので、学習する前のデータの特徴量を吟味して次元削減も必要です。
データの入手
機械学習のためにデータはどう用意するかが意外と難しいかもしれません。
下記のデータの用意の方法が考えられます:
自分でデータを作る
趣味や研究であれば、データは自作することができます。
もちろん、時間はかかります。会社の業務用でしたら、今まで自社で蓄積したデータを利用することができます。
インタネットスクレイピング
例えば、google image downloader: https://github.com/hardikvasa/google-images-download などのツールがあります。
公開されているデータ(有償・無償)を活用する
コンペサイトのデータを使います。Kaggle(https://www.kaggle.com/)、日本ではSIGNATE(https://signate.jp/)が有名です。
また公開しているサービスのAPIを利用するのも一つの方法です。
まとめ
機械学習や深層学習を最初に勉強する人にオススメするのはすでに公開されている無料のデータセットです。
例えばscikit-learnの手書き数字のデータセット、アヤメのデータセット、CFAR10のデータセット、MNISTの手書き数字データセットなどが定番です。
[amazonjs asin=”4873118689″ locale=”JP” title=”機械学習のための特徴量エンジニアリング ―その原理とPythonによる実践 (オライリー・ジャパン)”]
[amazonjs asin=”4873117585″ locale=”JP” title=”ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装”]