100日後にエンジニアになるキミ - 76日目 - プログラミング - 機械学習について

昨日までのはこちら

[100日後にエンジニアになるキミ - 70日目 - プログラミング - スクレイピングについて](https://qiita.com/otupy/items/f53e2e7d16adf80b5acf)

[100日後にエンジニアになるキミ - 66日目 - プログラミング - 自然言語処理について](https://qiita.com/otupy/items/5828ac7450c5ba8d6931)

[100日後にエンジニアになるキミ - 63日目 - プログラミング - 確率について1](https://qiita.com/otupy/items/0196897ae4d2134794fa)

[100日後にエンジニアになるキミ - 59日目 - プログラミング - アルゴリズムについて](https://qiita.com/otupy/items/f1a5e81633b868f3b5ed)

[100日後にエンジニアになるキミ - 53日目 - Git - Gitについて](https://qiita.com/otupy/items/0abaad82a7f3fea73f1f)

[100日後にエンジニアになるキミ - 42日目 - クラウド - クラウドサービスについて](https://qiita.com/otupy/items/d1765f1541a104ed6133)

[100日後にエンジニアになるキミ - 36日目 - データベース - データベースについて](https://qiita.com/otupy/items/7af17635d576677606dc)

[100日後にエンジニアになるキミ - 24日目 - Python - Python言語の基礎1](https://qiita.com/otupy/items/6d1e5453f530e07b7aec)

[100日後にエンジニアになるキミ - 18日目 - Javascript - JavaScriptの基礎1](https://qiita.com/otupy/items/2f71d5f9c754b29d9555)

[100日後にエンジニアになるキミ - 14日目 - CSS - CSSの基礎1](https://qiita.com/otupy/items/61a97863f6df14171994)

[100日後にエンジニアになるキミ - 6日目 - HTML - HTMLの基礎1](https://qiita.com/otupy/items/cd2315dcb38671cfded0)

今回は機械学習についてのお話です。

## 機械学習について

昨今色々な事情で休校になったり、出勤できなかったりしてたりするので
この機会にお勉強はいかがでしょうか？

機械学習について数式なんかを用いずに
小学生でも分かるような内容で説明してみたいと思います。

解説動画はこちら

[![表示されなかったらすみません](https://img.youtube.com/vi/Hx_lVH8Hwn8/0.jpg)](https://youtu.be/Hx_lVH8Hwn8)

### 機械学習って何？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/de662208-5b7c-42ba-923a-c2cdfab33db5.png)

まずはじめに、機械学習って何？っていうところからです。

機械学習はコンピューターにデータを学習させて
未知データに対して予測をする試みを行うことです。

大量のデータに潜むパターンを覚えさせることを学習
未知のデータを判断するルールのことをモデルと言い
このモデル作りが機械学習のポイントになります。

### 機械学習とAI

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/2522f949-d520-4c91-4aaa-8b79f8e6f14c.png)

次に昨今の人口知能などとの言葉の関係についてです。

`人工知能`のことを英語では`AI`と言っています。
`AI`の多くは`機械学習`を元に作られているものがほとんどです。
そして`機械学習`のことを英語では`マシンラーニング`と呼んでいます。

`深層学習`は`機械学習`の手法の一つで、英語では`ディープラーニング`と呼んでいます。

言葉の関係性は図のような感じです。

### 機械学習はどこで使われているの？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/e98f0a72-2cda-ebeb-8e76-0278a23d06c0.png)

機械学習がどんな場面で用いられているかと言うと現在では様々な分野で幅広く用いられています。

自動運転のために行われる画像の判別や物体検知、人物や動物の分類、手書き文字の判別などが主な分野です。

人の行動に関わるデータについても多く用いられています。
ショッピングサイトでは、入会するかどうか、退会してしまうかどうか
この人のオススメの商品は何か、と言った判断に機械学習が多く用いられています。

学習させたものから、様々なものの生成を行うこともできます。
画像のスタイルを学習させて、それっぽい画風の画像を作ったり、
それっぽい曲を作る、英語の文章を日本語に翻訳するのも機械学習で行われています。


### 機械学習でできること

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/1e69e9fb-f2ee-361c-641b-0b4cc4d4bffa.png)

機械学習でできることは主に3つ
`回帰`
`分類`
`クラスタリング`
です。

それぞれ
`回帰`：数値を予測する
`分類`：カテゴリを予測する
`クラスタリング`：いい感じに分ける
と言うことができます。

### 学習の方法

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/0bd0b50e-f846-2a9e-7ec9-618bbd624ef4.png)

学習方法も大きく分けて3つ
`教師あり学習`
`教師なし学習`
`強化学習`
です。

`教師あり学習`は答えがあって、その答えに沿って学習させる学習方法です。
`教師なし学習`は答えが分からないものに対して行う学習方法です。
`強化学習`はゲームの勝利など、何かしらの価値観に基づき、その価値を最大化させるような学習方法のことを言います。

### 実際のデータ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/bc7072a5-ad43-8099-2aed-a622744264b7.png)

データは縦横のある`表形式のデータ`を用いて行います。
通常はデータの種類(列)は1つではありません。複数存在することがほとんどです。

この列方向のデータの種類のことを機械学習では`変数`とも呼んでいます。

### 教師あり学習

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/079495b0-7820-50dc-a768-5dd01749038c.png)

教師あり学習について

部屋の広さから、価格を当てに行くことを考えてみましょう。
まずはデータ(部屋の広さと価格)を用意しておきます。

データに当てはまるような、いい感じの線を引くことを考えてみてください。

右側の図のような線が引けるんじゃないでしょうか？

この線のようなことを`学習モデル`(判別のルール)と呼んでいます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/bbd7c159-f818-7bb2-eb1e-cb5e11855c98.png)

できた`予測モデル`を用いて、データから予測を行ってみましょう。

部屋の広さのデータから、それに当てはまる線の部分を見ていくと
価格の方が出てきます。これが予測した値になります。

予測はあくまでも答えに近い値を出すだけで、ぴったり当てる事はなかなか難しいです。

またデータは一つだけではないので、いろいろなデータをみながら
いい感じの線を引く方法を考えてあげる必要があります。

今回は数値を当てにいくことを例にしましたが、これは`回帰`と言う方になります。
`男性`,`女性`などの数値でないものを当てに行くものは`判別`と言っています。


### 教師なし学習

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/aebbfbd4-8c5e-623c-50b1-1ab3fa9b1d47.png)

続いて教師なし学習です。

教師なし学習は`クラスタリング`のようにいい感じに分ける学習方法のことを言います。

答えはないので、予測された結果が正しいかどうかは人間の判断に委ねられることになります。

### 深層学習について

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/2fcaff85-d4f9-301d-9f04-0db510250143.png)

深層学習についてです。

`ニューラルネット`という学習モデルを用いた学習方法です。
人の脳の構造を真似した学習モデルで`入力層`、`隠れ層`、`出力層`の3つの層を設定できます。

そのうち、隠れ層が２つ以上のものを`ディープニューラルネットワーク(DNN)`とも呼んでいます。
そのDNNを用いた学習方法が`ディープラーニング`です。

### 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/b8398c3b-313a-1c10-09b8-42f3c0c1af67.png)

めちゃくちゃざっくりですが`ディープラーニング`の何が凄いのかというと
`機械が人間の精度を超えた`ということです。

特に世界的に行われている`画像認識`のコンテストでは
人間の精度を超えるモデルが出来上がっています。

ということで、人間の代わりにより精度の高い判別をしてくれるようになってきたため
英語の文章を日本語に翻訳するなど、様々な分野で活躍するようになってきています。

### 機械学習に必要なもの

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/d8d99944-b0d8-27cc-0e86-225bfc253318.png)

機械学習を初めてみたい方にはまずはPCを用意しましょう。

次にPythonというプログラム言語をインストールしましょう。

最後に機械学習に使う表形式のデータを用意すれば良いです。

さて、機械学習をしてみたいけど`プログラミング`とか分からないなーという方が居たら
当方で講座を用意していますのでそちらを参考にしてみてください！！！

参考：
[Pythonプログラミング講座](https://note.com/otupy/n/nd4d45b841358)

## まとめ

ハイパーざっくりですが機械学習についての説明です。

機械学習自体は、このご時世、どこの企業でも取り入れられており
サービスには欠かすことのできないツールになってしまいました。

そのため、知らないよでは済まされなくなってきています。

概念だけであればあまり難しくはありません。
細かく追求しようとするとキリがありません。

まずはざっくりとした知識として身につけておき
業務などでやるようになったらどうやって実現すれば良いのかを
学べば良いと思います。

君がエンジニアになるまであと24日

## 作者の情報
乙pyのHP：
http://www.otupy.net/

Youtube：
https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw

Twitter：
https://twitter.com/otupython