今年も気がつけばもう12月ですね。
昨年に引き続き、今年もできる範囲で走り続けていこうと思います。
株式会社ブライト・ヴィー 2018年版 アドベントカレンダー
今年も宜しくお願い致します。
はじめに
今年の1月~10月頃まで私個人として機械学習やディープラーニング周りの勉強を本格的に行ってきました。
大学時代は多目的最適化など最適化問題を扱う勉強などをしていたので、
こういう分野にはもともと興味があり、そろそろ本格的に仕組みを学んでみたいと思ったのがきっかけでした。
なので今回は「機械学習」を学ぶにあたって、そもそもどんな流れで行われていたり、
何をしなきゃいけないかなど簡単に概要を記載してみようと思います。
そもそも機械学習を行うためには
機械学習を行うためには分析を行うためのデータがまず必要になります。
そのデータから表記ブレや欠損値の補完、ダミー変数化などの「前処理」と呼ばれる重要なプロセスを行い、データの性質を把握し、
そして「アルゴリズムを検討」「モデル評価」「モデル最適化」を繰り返しながら予測精度を高めていく流れとなります。
- データの入手
- データ前処理
- 基礎集計, グラフ化, 特徴量の設計など
- アルゴリズムの検討
- モデルの評価
- モデル最適化
- 4~6を繰り返し行い、モデルを決定
1~3では、主にデータの特徴や性質をしっかり理解することが大事であり、
4~7では、利用するアルゴリズムの特徴を理解した上で、
やりたいこと求めたいことなどの目的を達成するためのアルゴリズムを選択し、チューニングしていく必要があります。
機械学習のアルゴリズムってどんなのがあるのか
様々なサイトで紹介されているのでここでは簡単に記載するのみとしますが、
大きな分類としては3種類に分けることが出来るようです。
分類 | 説明 | 一言で表すと |
---|---|---|
教師あり | 事前に与えられたデータを元に学習を行う手法 | データに正解がある |
教師なし | 学習対象のデータはあるが、何が正解か与えられていないので、何かしらの構造や法則を見出すための手法 | データに正解がない |
中間的手法 | 教師あり/なしに分類できないときの方法 | - |
そしてそれぞれの分類ごとのアルゴリズムを単語だけあげると
- 教師あり
- 線形回帰
- ロジスティック回帰
- サポートベクターマシーン(SVM)
- パーセプトロン
- 決定木
- ランダムフォレスト
- アンサンブル学習
- ナイーブベイズ
- k近傍法 ( KNN )
- ニューラルネットワーク ( NN )
- 畳み込みニューラルネットワーク ( CNN )
- 教師なし
- k平均法 ( k-means )
- 主成分分析 ( PCA )
- 自己組織化マップ ( SOM )
- X-means
- 中間的手法
- Q学習
など上記に記載した以外でも様々なアルゴリズムが存在しており、
この中から目的にあったアルゴリズムを選定し、
パラメータのチューニングをしていくことで予測精度を高めていくような流れとなります。
また、これらのアルゴリズムを簡単に利用できる有名所なライブラリとしては、
「scikit-learn」という、Pythonのオープンソース機械学習ライブラリなどがあります。
使う側が機械学習の手法そのものを実装しなくても「scikit-learn」のように完成度の高いライブラリを使うことで、データを分析予測していくことが可能となります。
「scikit-learn」で利用できるアルゴリズムも下記記事で紹介されているので、参考までに
統計学との違いは
「統計学」と「機械学習」って何が違うんだろうと感じて調べてみたところ、どちらも密接な関係はありますが、
- 統計学は、少ないデータを元に「データを「説明」すること」により重きを置く
- 機械学習は、大量のデータを元に「データから「予測」すること」により重きを置く
といった性質の違いがあるようですね
まとめ
今日は、機械学習を学び始めるにあたっての概要だけを簡単にまとめてみました。
私自身が取り組んだときには、これらの手順を1つずつ手を動かしながら学んでいき、
ときにはライブラリを利用せずにアルゴリズムを自分で実装するといったことも行いながら
ロジック面での仕組みの理解やアルゴリズムの特徴の理解などをより深めることが個人としては出来ました。
また機械学習を行う上ではデータが非常に重要になりますが
kaggle(カグル)などでは企業からデータが提供されていたり、
問題も豊富に取り揃えられているため、ぜひチャレンジしてみるのも良いのかなと思います。