機械学習入門

SaaS型Webアプリ診断ツール「AeyeScan」を運営している株式会社エーアイセキュリティラボが、セキュリティテストの自動化、脆弱性診断の内製化、AI/機械学習などの技術情報の共有を目的とした記事です。
AeyeScanの情報はこちら https://www.aeyescan.jp
エーアイセキュリティラボの情報はこちら、https://www.aeyesec.jp

[![2022-155641.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/dd3f69d5-879a-ed11-d6ac-353a85523c43.png)](https://www.aeyescan.jp)

#1.はじめに
この記事は、機械学習を解説するものです。入門書および入門記事をベースにしているため、あくまで概要レベルの資料です。また、簡単な説明にするために、数式は極力使わずに解説します。
#2.機械学習とは
機械学習とは、データ群からルールを抽出する能力をコンピュータに与える技術です。通常のプログラミングでは、ルールをプログラマが指定し、そのルールに基づいてコンピュータが処理を行います。しかし機械学習のプログラミングでは、ルールを抽出するためのルールをプログラマが指定し、コンピュータがルールの抽出とそれに基づく処理を行います。
#3.機械学習の分類
機械学習は、学習の方法で以下に分類できます。

* 教師なし学習
* 教師あり学習
* 強化学習

「教師なし学習」とは、入力するデータに答えの情報が付いていない場合の学習方法です。データのグループ関係を発見する「クラスタリング」や、データの特徴を維持したままデータを圧縮する「次元削減」がこれに該当します。「クラスタリング」の利用例としては、ニュースサイトで類似のニュースを自動的にグループ化する場合が該当します。

「教師あり学習」とは、入力するデータに、ラベルや正解値のような答えの情報が付いている場合の学習方法です。データのラベルを予測する「分類」や、データの値を予測する「回帰」がこれに該当します。「分類」の利用例としては、スパムメールのフィルタが該当します。また「回帰」の利用例としては、株価の予測が該当します。

「強化学習」とは、入力するデータに、答えの情報を付ける代わりに、「報酬」と呼ばれる、行動の出来具合の評価値を付ける学習方法です。「強化学習」を行うプログラムは「エージェント」と呼ばれ、「エージェント」は「報酬」を最大化するように行動し、継続的にルールを学習します。「強化学習」の例としては、ロボットの歩行動作のAIが該当します。

#4.機械学習の利用手順
機械学習を利用する手順は次の通りです。

1. 入力データの整形
1. アルゴリズムの選択
1. ハイパーパラメータの最適化

##4.1.入力データの整形
入力データの整形では、機械学習のアルゴリズムを実行するために、生のデータを、アルゴリズムが利用可能なデータに変換します。この過程では生のデータから特徴量を抽出します。そして、特徴量の大きさの水準を同じにするために、スケーリングを行います。さらに、アルゴリズムの計算量を減らすために特徴量の次元を削減する場合もあります。
###4.1.1.特徴選択
生のデータを、分析対象の有識者が立てた仮説をもとに、意味のある特徴量に変換します。例えば、類似の文章を探すために機械学習を利用する場合、生の文章を単語の出現頻度という特徴量に変換します。選択するアルゴリズムによっては、特徴量と答えの間に線形性（二次元でいうと直線のような関係）があることを前提とする場合があります。この場合、特徴量を抽出する際には、答えとの関係が線形になると思われる特徴量を選択する必要があります。
###4.1.2.スケーリング
多くの機械学習のアルゴリズムが、特徴量の大きさの水準が同じであることを前提としています。そのため、特徴量の大きさを均一にする処理が必要となります。これは、データを0以上1以下の範囲に変換したり、平均が0で分散が1の標準正規分布に変換することで実現します。
###4.1.3.次元削減
アルゴリズム実行時の計算量が現実的に処理できる量ではない場合、特徴の次元を減らすことが有効です。相関が高い特徴量を１つの特徴量に集約したり、影響が少ない特徴を削減します。次元削減の手法としては、主成分分析や線形判別分析、多次元尺度構成法などがあります。
##4.2.アルゴリズムの選択
アルゴリズムの選択では、有効と思われる機械学習のアルゴリズムを洗い出し、各アルゴリズムに実際にデータを与えてトレーニングし、その性能を比較します。
###4.2.1.アルゴリズムの候補の洗い出し
械学習のアルゴリズムは、主に以下の要素で構成されます。

* アイデア　
* 数理モデル
* 損失関数
* 最適化法

構成例

| アルゴリズム | アイデア | 数理モデル | 損失関数 | 最適化法 |
|:--|:--|:--|:--|:--|
|線形回帰|特徴量と正解値を直線の関係で近似して値を予測する|アフィン変換|正解値と予測値の誤差の二乗|数式を解く/勾配法|
|ニューラルネットワーク|神経細胞の入出力ネットワークを再現する|アフィン変換＋活性化関数|正解値と予測値の誤差の二乗/負の対数尤度|   勾配法|
|サポートベクタマシン|マージンを最大化する境界を探して分類する|アフィン変換＋カーネル法|ヒンジ損失|凸二次計画法|

上記の要素をもとに、有効と思われる機械学習のアルゴリズムを選択します。参考として、解決する問題ごとに代表的なアルゴリズムを列挙します。

* 分類
	* パーセプトロン
	* ロジスティック回帰
	* ニューラルネットワーク
	* k近傍法
	* 決定木
	* サポートベクタマシン
	* ナイーブベイズ
* 回帰
	* 線形回帰
	* ニューラルネットワーク
* クラスタリング
	* k平均法
	* EMアルゴリズム
	* トピックモデルLDA

また、複数の学習器を融合させて１つの学習器を作ることで性能が向上する場合もあります。この手法を「アンサンブル学習」と呼びます。「アンサンブル学習」のアルゴリズムには「バギング」「ブースティング」などがあります。

###4.2.2.トレーニング
アルゴリズムにデータを与えてアルゴリズムの内部状態をトレーニングします。

トレーニングの結果を評価するために、データは訓練用と評価用で分けておく必要があります。（なお、実運用の際の性能を予測するために、これらとは別に、テスト用のデータも用意しておく必要があります。）代表的なデータの分け方としてはクロスバリデーション（交差検証）があります。クロスバリデーションでは、データをN分割し、そのうちの１つを評価用に、それ以外を訓練用にします。こうしてできるNパターンの評価用と訓練用のデータを利用して、N回の訓練と評価を行い、評価の平均をアルゴリズムの評価結果とみなします。
![image1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/2bc25d62-a897-759d-b5b3-8e222f1ac5e4.png)

###4.2.3.トレーニングアルゴリズムの比較評価
各アルゴリズムの評価結果を比較します。評価の指標は、機械学習で解決する問題によって異なります。例えば「分類」問題の場合、「正答率」や「F値」（＝「適合率」と「再現率」の調和平均）を使用します。「回帰」問題の場合、「決定係数」（＝実測値と予測値の誤差の度合い）を使用します。

##4.3.ハイパーパラメータの最適化
機械学習のアルゴリズムの中には、学習時の振る舞いを指定するための設定値を持つものが存在します。こうした設定値を「ハイパーパラメータ」と呼びます。アルゴリズムの性能を高めるためには、複数の「ハイパーパラメータ」の組み合わせを試し、最適な組み合わせを探す必要があります。例えば「グリッドサーチ」では、各ハイパーパラメータの候補となる値を予め決めておき、すべての組み合わせを試して、最良の組み合わせを探します。また「ランダムサーチ」では、各ハイパーパラメータをランダムに変化させ、最良の組み合わせを探します。

#5.参考図書
* 株式会社システム計画研究所 (2016) 『Pythonによる機械学習入門』，オーム社．
* 中井 悦司 (2015) 『ITエンジニアのための機械学習理論入門』，技術評論社．
* Willi Richert (著), Luis Pedro Coelho (著), 斎藤 康毅  (翻訳) (2014) 『実践 機械学習システム』，オライリージャパン．
* Sebastian Raschka  (著), 株式会社クイープ (翻訳), 福島真太朗 (翻訳) (2016) 『Python機械学習プログラミング 達人データサイエンティストによる理論と実践』，インプレス．

[![2022-155641.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/dd3f69d5-879a-ed11-d6ac-353a85523c43.png)](https://www.aeyescan.jp)