[機械学習] ① AI技術と機械学習の概要

# 導入
私自身AIに関する知識が浅く、エキスパートなんてものとは程遠いレベルではありますが技術者として機械学習に触れる機会があり、折角なのでメモ用に勉強したことを残そうと思います。

本記事は機械学習技術への導入として教師あり学習、教師なし学習、強化学習とはどのようなものなのか概要をざっくりとまとめた位置付けとなりますので詳しい内容は別の記事で更新していく予定です。

## 1. AIの種類について
"機械学習"と"AI(Artificial Intelligence : AI)"の関係性について意外とちゃんとわかっていなかったなぁ。と思い調べたことをまとめます。(分かってるよ！という方は読み飛ばしていただければと。)

そもそもAIというものの概念自体はかなり広く、コンピュータに人間のような知能を持たせることを目標とした学問全般をAIと呼んでいます。
AIの中でも種類というか段階のようなものがあり、それぞれ **「弱いAI」「強いAI」「超知能」** と呼ばれるものがあります

|種類  |特徴  |例  |
|---|---|---|
|弱いAI (Narrow AI)|特定のタスクに特化<br>現在のサービスはほぼこれに該当  | Chat GPT, 画像認識、検索エンジンとか  |
|強いAI (General AI)|汎用的なタスクを柔軟にこなせるAI<br>研究段階で商用サービスは特になし  |-  |
|超知能 (SuperIntelligence)| 強いAIの発展で人の知能を超えたもの<br>ほぼSF|スカイネット|

このようにAIというのは目標や機能のフェーズにより呼ばれ方が変わってくるようですね。
あまり意識したことありませんでしたが、現状世に出回っているものはほぼ全て弱いAIという事になりますね。

## 2. AI技術について
AIを実現するための手段としての位置付けが**機械学習**だったり、**深層学習**が相当します。
他にも色々とあるようで、以下に調べて分かったものをまとめてました。

|名称 |特徴 |
|---|---|
|ルールベースのAI|人間がルールを設けて動作する<br>専門家の知識をルール化した医療相談や法律相談AIなどが該当|
|機械学習|データからパターンを学習して予測や分類を行う手法<br>1.教師あり学習 2.教師なし学習、3.強化学習にさらに種類が分かれる(後述)|
|深層学習|機械学習の一種です(機械学習 $\supset$ 深層学習)。こちらは大量のデータを用いて特徴量を自動的に抽出する<br>画像や音声などの様な非構造データに強い|
|自然言語処理|人間の言語を解釈して生成する技術<br>テキスト分析、翻訳、感情分析など|
|コンピュータビジョン|画像や動画から情報を抽出し認識や分類を行う技術<br>物体認識、顔認識、顔分類など|
|進化的アルゴリズム|生物の進化プロセスを模倣して大域的最適解を目指す技術<br>GA(遺伝的アルゴリズム)など|
|ファジイ論理|不確実な情報を扱うための論理体系|

## 3.機械学習の分類について
テーブルにもあるように機械学習には
* 教師あり学習
* 教師なし学習
* 強化学習

があります。
それではそれぞれの手法の違いをまとめていきます。

### 3.1 教師あり学習 (Supervised Learning)
教師あり学習は **訓練データ(Training Data)** よりパターンを学習してモデルを訓練します。
**訓練データ = 入力データ(特徴量) + 教師データ(ラベル)** といった関係があり、「これこれこういう特徴を持つものはxxに分類されますよ」といったデータセットと考えればよろしいかなと。
これらのデータを元に入力データと教師データのパターンを学習させ、関係性(モデル)を求めます。

訓練されたモデルを将来的にどうなるのか予測したいデータ(テストデータ)に当てはめることで推定データを得ることが教師なし学習の目標となります。

![fig1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/836555/9c870f95-3196-54e6-f84d-373d20924037.jpeg)

また、出力の性質として離散値であれば **分類(Classification)** 、連続値なら **回帰(Regression)** とさらにサブフィールドへ分かれたりします。

#### 3.1.1 分類
* 出力がクラスやカテゴリといった離散値になる場合
    * バイナリのような二値分類
    * 「Aクラス」「Bクラス」「Cクラス」といった多クラス分類
->目的 :  データがどのクラスに属するのか判定する

実際のデータセットは以下のような感じです。
(書籍などでもよく例で挙げられるアヤメのデータセットというやつですね。一部抜粋しています。)

|がくの長さ |がくの幅 |ラベル　|
|---|---|---|
|5.1|3.5|0|
|4.9|3|0|
|7|3.2|1|
|6.9|3.1|1|
|6.3|3.3|2|

ここで1,2列目が訓練データにあたり、ラベルの列が教師データにあたります。
ちなみにラベルが0, 1, 2といったように整数で格納されていますが、それぞれの番号がアヤメ品種のクラスラベルと対応しています。
これは技術的ミスや消費メモリを抑えるためなどの意図があり、クラスラベルは整数として符号化するのが推奨されていて機械学習ライブラリでは慣例化しています。

以下にイメージ図を示しています。
上記のデータセットから決定境界を訓練し、クラスを分割することが目標です。

![fig2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/836555/f27718fb-02a9-1050-a99b-e95f396e2ea1.jpeg)


#### 3.1.2 回帰
* 出力が数値的に連続した値になる場合
    * 数年後の株価とか来月の気温など
-> 目的 : データから **数値を予測する** こと

説明変数Xに対する目的変数yの関係性をある関数によりモデル化できないか。といった試みになります。
(分類ではXを特徴量、yを教師データと呼びますが、回帰ではXを**説明変数**、yを**目的変数**と呼ぶ文化の違いがあるみたいです。)

下図の例に挙げたように点群が線形のモデルによって適合できる場合は**線形回帰**、非線形関数が適合する場合は**非線形回帰**と特に呼んだりします。

これらの関数モデル傾きや切片を最適化することによりモデルの訓練が行われます。

![fig3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/836555/bc060357-5893-57b2-ca4a-a8c499a51990.jpeg)


### 3.2 教師なし学習 (Unsupervised Learning)
教師なし学習では答えがすでにわかっているデータ。すなわち **訓練データに教師データが含まれている** 場合での話でした。

しかし

* ラベル付きデータの収集には多くの時間やコストがかかること
* 未知の構造を見逃してしまうこと
* ビッグデータなどでは量が膨大なためにラベル付けが困難なこと

などが理由で必ずしも訓練データに教師データが含まれるわけではありません。
そういった特徴量のみの訓練データでデータの構造やパターンを発見するのに有用なのが **教師なし学習** となります。



教師なし学習の代表的な手法として **クラスタリング** と **次元削減** という領域があります。

#### 3.2.1 クラスタリング
クラスタリングは与えられた特徴量データをいくつかのグループに分ける手法となります。ここでデータをまとめたグループのことを **クラスタ** と呼びます。

![fig4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/836555/92edc99a-4e04-e14d-73a3-dbac45e980f8.png)

クラスタリングはさらにいくつかのアプローチに分類されます。
データ全体をどのように分割・結合するかに関するアプローチ : **階層的クラスタリング**、**非階層的クラスタリング**
データからクラスタをどのように生成するかに関するアプローチ :**ハードクラスタリング**、 **ソフトクラスタリング**

#### 3.2.1.1 階層的クラスタリング
特徴量データ群の中で類似な対象を組み合わせてクラスタの階層構造を作成していくことが目標です。
クラスタリングはさらに**分割型(トップダウン)**、**凝集型(ボトムアップ)** の2パターンの方式が存在します。

* トップダウン

![fig4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/836555/aab156a9-8a57-317d-60a1-3071af010be1.jpeg)


始めにデータ全てを一つのクラスタとしてみなし、そこから段階的にクラスタを分割していき最終的にデータ1つに対して1つのクラスタが割り当てられるまで繰り返して階層構造を作成する方式です。

* ボトムアップ

![fig5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/836555/61de23e1-dcd8-1d08-e626-0e6ea39da8ac.jpeg)


こちらはトップダウンとは逆のアプローチですね。
始めにデータ1つ1つに対してクラスタを割り当てて、そこから近いものと思われるものを段階的にグルーピングしていき、最終的に1つのクラスタになるまで繰り返して階層構造を作成する方式です。こちらの手法の方がメジャーな印象あります。

上の例をデンドログラム(樹形図)で階層構造を表すと以下のような感じになります。

![fig6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/836555/21210240-5efd-6574-5dfa-8cbafa031627.jpeg)

AとC、それに続きBとEが最も類似度の高いサンプルであるという事がパッと見で分かるかなと思います。

#### 3.2.1.2 非階層的クラスタリング
非階層的クラスタリングはその名の通り、特徴量データ群を階層構造を作らずに類似もの同士でグルーピングを行うクラスタリングです。


代表的な手法として分けたいk個のクラスタの重心を用いるという意味を込められた **k-means法** などがあります。

![fig7.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/836555/f294eacc-e20c-0cfe-4af5-d9540d8288c4.jpeg)

#### 3.2.1.3 ハードクラスタリング
ハードクラスタリングはデータが必ずどこかのクラスタに属す手法となります。
明確なグルーピングを行いたい目的ならば、こちらの方法が有用と思われます。

![fig8.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/836555/9441af43-918d-c185-6fb6-a5ab7ee285af.jpeg)

#### 3.2.1.4 ソフトクラスタリング
各データに対してクラスタ毎に重みや確率を持たせ、部分的に含ませる手法となります。
先ほどとはことなり、あいまいさ(ファジー性)を考慮したい目的ならば、こちらの方法を採ると良いかもしれませんね。

![fig9.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/836555/6f832960-aa64-1d1c-fba5-1f5e2022d1ba.jpeg)

#### 3.2.1.5 クラスタリングまとめ
与えられた特徴量をグルーピングするアプローチとして1.クラスタ構造の手法分類と2.クラスタ生成の手法分類と2つの観点があることをまとめました。
これらはの手法は組み合わせられるため、クラスタリングには以下のような4パターンがあるという事になります。(該当する代表的なアルゴリズムを抜粋しています。)

![fig10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/836555/52f26b7f-8930-affe-fca1-b46b2065156f.jpeg)

#### 3.2.2 次元削減
(次元削減に関しては勉強中。あまり詳しくないので~~この記事を覚えていれば~~ある程度理解したら追加しようと思います。)


## 4.おわりに
AI分野に関して門外漢な私が解釈した内容のアウトプットとして本記事を書かせていただきました。
ここ違うよ、などのご指摘等ございましたらコメントいただければと思います。