はじめに
普段はJSとnodeを使ってフロントとバックエンドをやっているのですが、これから会社で機械学習もやることになったので、基礎から応用まで自分が理解したことをQiitaにまとめていきます。
間違ったことを書いていたり、足りない情報があった場合どしどしコメント欄に書いていただけると嬉しいです。
まず、第一回なので機械学習の概要について簡単に
機械学習の分類
機械学習分野の魅力は企業に蓄えられたデータを知識に変換できることだと思います。
おおまかな分類として、
- 教師あり学習
- 分類
- 2値分類
代表例) メールスパムフィルタ - 多クラス分類
代表例) 手書き文字認識
- 2値分類
- 回帰
- 分類
- 教師なし学習
- クラスタリング
- 教師なし分類とも呼ばれる
- 次元削減
- 特徴量の前処理に使用されるアプローチの1つ
- 特徴量の前処理に使用されるアプローチの1つ
- クラスタリング
- 強化学習
- 代表例) チェスエンジン
モデルを構築するためのロードマップ
-
前処理
ここが最も時間がかかる。
主に生のデータから特徴量を抽出し、トレーニングデータセットとテストデータセットに分割する。テストデータセットは最終モデルを評価するときまでとっておく。
ほかにもスケーリングや次元削減、サンプリングなど様々な前処理手法がある。このあたりは今後の記事でおいおい紹介していきます。 -
学習
トレーニングデータセットを用いて学習させる。また予測モデルの比較選択。それぞれのアルゴリズムに本質的に特性がある。このあたりも今後の記事で紹介していきます。 -
評価
テストデータセットに最終モデルを適用し、評価を行う。 -
予測
新しいデータで予測。
バッチ学習とオンライン学習
バッチ学習
バッチ学習は学習対象となるデータを全てまとめて一括で処理する方法になります。
一般的な教師あり学習を行う時の流れとして
1. 現在weightの値で予測する
2. 予測した値を元にコスト関数を計算する
3. weightの値を更新する
という流れとなっていました。これは基本的にバッチ学習を想定していることが多いです。
オンライン学習
バッチ学習に対して、オンライン学習とは学習データが入ってくるたびにその都度、新たに入ってきたデータのみを使って学習を行うものになります。
大きな違いとして、学習を行う際に1からモデルを作り直すのではなく、そのデータによる学習で今あるモデルのパラメータを随時更新していくと流れになります。
これはWebアプリケーションの顧客データなど、大量のデータが蓄積されているときに役立ちます。
オンライン学習を利用すれば変化に強いモデルを構築できるでしょう。
終わりに
今回は機械学習の基本的な考え方について書いてきました。このあたりをしっかり理解できていればいいと思います。
次回以降パーセプトロンやADALINEを実装してみたり、scikit-learnやTensorFlowなどのライブラリを用いて実際に学習させていきたいと思います。