|
|
|
@ -6,7 +6,7 @@
|
|
|
|
|
|
|
|
|
|
## イントロダクション
|
|
|
|
|
|
|
|
|
|
回帰の最後のレッスンでは、古典的な機械学習手法の一つである、「ロジスティック回帰」を見ていきます。この手法は、2値のカテゴリを予測するためのパターンを発見するために使います。例えば、「このキャンディは、チョコレートかどうか?」、「この病気は伝染するかどうか?」、「この顧客は、この商品を選ぶかどうか?」などです。
|
|
|
|
|
回帰の最後のレッスンでは、古典的な機械学習手法の一つである、「ロジスティック回帰」を見ていきます。この手法は、2値のカテゴリを予測するためのパターンを発見するために使います。例えば、「このお菓子は、チョコレートかどうか?」、「この病気は伝染するかどうか?」、「この顧客は、この商品を選ぶかどうか?」などです。
|
|
|
|
|
|
|
|
|
|
このレッスンでは以下の内容を扱います。
|
|
|
|
|
|
|
|
|
@ -35,7 +35,7 @@
|
|
|
|
|
|
|
|
|
|
### 2値分類
|
|
|
|
|
|
|
|
|
|
ロジスティック回帰は、線形回帰とは異なる特徴を持っています。ロジスティック回帰は、二値のカテゴリー(「オレンジ色かオレンジ色でないか」)についての予測を提供するのに対し、線形回帰はは連続的な値を予測することができます。例えば、カボチャの産地と収穫時期が与えられれば、その価格がどれだけ上昇するかを予測することができます。
|
|
|
|
|
ロジスティック回帰は、線形回帰とは異なる特徴を持っています。ロジスティック回帰は、二値のカテゴリー(「オレンジ色かオレンジ色でないか」)についての予測を行うのに対し、線形回帰は連続的な値を予測します。例えば、カボチャの産地と収穫時期が与えられれば、その価格がどれだけ上昇するかを予測することができます。
|
|
|
|
|
|
|
|
|
|
![カボチャ分類モデル](../images/pumpkin-classifier.png)
|
|
|
|
|
> [Dasani Madipalli](https://twitter.com/dasani_decoded) によるインフォグラフィック
|
|
|
|
@ -43,7 +43,7 @@
|
|
|
|
|
|
|
|
|
|
ロジスティック回帰には他にもMultinomialやOrdinalなどの種類があります。
|
|
|
|
|
|
|
|
|
|
- **Multinomial**: これは2つ以上のカテゴリーを持つこと場合です。 (オレンジ、白、ストライプ)
|
|
|
|
|
- **Multinomial**: これは2つ以上のカテゴリーを持つ場合です。 (オレンジ、白、ストライプ)
|
|
|
|
|
- **Ordinal**: これは、順序付けられたカテゴリを含むもので、有限の数のサイズ(mini、sm、med、lg、xl、xxl)で並べられたカボチャのように、結果を論理的に並べたい場合に便利です。
|
|
|
|
|
|
|
|
|
|
![Multinomial vs ordinal 回帰](../images/multinomial-ordinal.png)
|
|
|
|
@ -55,15 +55,15 @@
|
|
|
|
|
|
|
|
|
|
### 変数が相関している必要はない
|
|
|
|
|
|
|
|
|
|
線形回帰は、相関性の高い変数ほどよく働くことを覚えていますか?ロジスティック回帰は、そうではありません。相関関係がやや弱いこのデータには有効ですね。
|
|
|
|
|
線形回帰は、相関性の高い変数ほどよく働くことを覚えていますか?ロジスティック回帰は、そうとは限りません。相関関係がやや弱いこのデータには有効ですね。
|
|
|
|
|
|
|
|
|
|
### 大量のきれいなデータが必要です
|
|
|
|
|
|
|
|
|
|
ロジスティック回帰は、より多くのデータを使用すれば、より正確な結果が得られます。私たちの小さなデータセットは、このタスクには最適ではありませんので、その点に注意してください。
|
|
|
|
|
一般的にロジスティック回帰は、より多くのデータを使用すれば、より正確な結果が得られます。私たちの小さなデータセットは、このタスクには最適ではありませんので、その点に注意してください。
|
|
|
|
|
|
|
|
|
|
✅ ロジスティック回帰に適したデータの種類を考えてみてください。
|
|
|
|
|
|
|
|
|
|
## エクササイズ - データの整理
|
|
|
|
|
## エクササイズ - データの整形
|
|
|
|
|
|
|
|
|
|
まず、NULL値を削除したり、一部の列だけを選択したりして、データを少し綺麗にします。
|
|
|
|
|
|
|
|
|
@ -81,7 +81,7 @@
|
|
|
|
|
new_pumpkins = new_pumpkins.apply(LabelEncoder().fit_transform)
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
新しいデータフレームをいつでも覗くことができます。
|
|
|
|
|
新しいデータフレームはいつでも確認することができます。
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
new_pumpkins.info
|
|
|
|
@ -89,7 +89,7 @@
|
|
|
|
|
|
|
|
|
|
### 可視化 - グリッド状に並べる
|
|
|
|
|
|
|
|
|
|
ここまでで、[スターターノートブック](../notebook.ipynb) にパンプキンデータを再度読み込み、`Color`を含むいくつかの変数を含むデータセットを保持するように整形しました。別のライブラリを使って、ノートブック内のデータフレームを可視化してみましょう。[Seaborn](https://seaborn.pydata.org/index.html) というライブラリを使って、ノートブック内のデータフレームを可視化してみましょう。このライブラリは、先ほど使った`Matplotlib`をベースにしています。
|
|
|
|
|
ここまでで、[スターターノートブック](../notebook.ipynb) にパンプキンデータを再度読み込み、`Color`を含むいくつかの変数を含むデータセットを保持するように整形しました。別のライブラリを使って、ノートブック内のデータフレームを可視化してみましょう。[Seaborn](https://seaborn.pydata.org/index.html) というライブラリを使って、ノートブック内のデータフレームを可視化してみましょう。このライブラリは、今まで使っていた`Matplotlib`をベースにしています。
|
|
|
|
|
|
|
|
|
|
Seabornには、データを可視化するためのいくつかの優れた方法があります。例えば、各データの分布を横並びのグリッドで比較することができます。
|
|
|
|
|
|
|
|
|
@ -141,7 +141,7 @@ Seabornプロットでは、変数を並べて表示することができます
|
|
|
|
|
|
|
|
|
|
> **🧮 数学の確認**
|
|
|
|
|
>
|
|
|
|
|
> 線形回帰では、通常の最小二乗法を用いて値を求めることが多かったことを覚えていますか?ロジスティック回帰は、[シグモイド関数](https://wikipedia.org/wiki/Sigmoid_function) を使った「最尤」の概念に依存しています。シグモイド関数」は、プロット上では「S」字のように見えます。その曲線は「ロジスティック曲線」とも呼ばれます。数式は次のようになります。
|
|
|
|
|
> 線形回帰では、通常の最小二乗法を用いて値を求めることが多かったことを覚えていますか?ロジスティック回帰は、[シグモイド関数](https://wikipedia.org/wiki/Sigmoid_function) を使った「最尤」の概念に依存しています。シグモイド関数は、プロット上では「S」字のように見えます。その曲線は「ロジスティック曲線」とも呼ばれます。数式は次のようになります。
|
|
|
|
|
>
|
|
|
|
|
> ![ロジスティック関数](../images/sigmoid.png)
|
|
|
|
|
>
|
|
|
|
@ -165,7 +165,7 @@ Seabornプロットでは、変数を並べて表示することができます
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
2. これで、学習データを使って`fit()`メソッドを呼び出し、その結果を出力することで、モデルを訓練することができます。
|
|
|
|
|
2. これで、学習データを使って`fit()`メソッドを呼び出し、モデルを訓練し、その結果を出力することができます。
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
from sklearn.model_selection import train_test_split
|
|
|
|
@ -181,7 +181,7 @@ Seabornプロットでは、変数を並べて表示することができます
|
|
|
|
|
print('Accuracy: ', accuracy_score(y_test, predictions))
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
自分のモデルのスコアボードを見てみましょう。1000行程度のデータしかないことを考えると、悪くないと思います。
|
|
|
|
|
モデルのスコアボードを見てみましょう。1000行程度のデータしかないことを考えると、悪くないと思います。
|
|
|
|
|
|
|
|
|
|
```output
|
|
|
|
|
precision recall f1-score support
|
|
|
|
|