Now Loading...

Now Loading...

今回は2クラス分類を行うロジスティック回帰というモデルをPythonで実装しながら学びます。分類タスクを機械学習で解く場合の最も基礎的な部分になるので、ぜひ理解しましょう。

2クラス分類とロジスティック回帰

機械学習で行える基本的なタスクの一つが分類問題です。
特に2つのクラスに分類するものを2クラス分類(二値分類)といいます。
例えば

のような感じです。
(ちなみに、3クラス以上に分類する場合は多クラス分類といいます。)

この2クラス分類を解く最も基本的な手法がロジスティック回帰です。
※名前に「回帰」と付いていますが、回帰問題ではなく分類問題を解く手法なので、気を付けてください。

難しく聞こえますが、実は基本的な流れは線形回帰(機械学習の入り口「線形回帰」の実装を Python × NumPy で体験)と変わらないので、線形回帰の流れを抑えていれば大丈夫です。

使用するデータ

今回は、「工場における欠陥製品の数とその工場が正常に稼働しているかどうか」のデータを用います。
・欠陥製品が1~10個:正常稼働
・欠陥製品が11~20個:異常稼働

とする簡易的なデータです。

また、入力(欠陥製品数)に対応する正解データは、2クラス分類問題では0か1かのラベルを用います。
今回は正常稼働の場合をラベル0、異常稼働の場合をラベル1とします。

NumPy配列を使って以下のように作成します。

 

ロジスティック回帰

今回は上記のデータを使ってロジスティック回帰を説明していきますが、線形回帰と異なるところは「仮説」と「目的関数」だけです
仮説と目的関数の中身が違いますが、全体的な流れは回帰問題の時と同じで、次の通りです。

1. 仮説

さて、モデルの出力値となる仮説ですが、回帰問題の時のようにデータの分布に沿うような関数が欲しいわけではありません。
今回のような二値分類では、各データに対して正解ラベルが0か1かで与えられているのでした。
そのため、データを与えた時の仮説の値によって、そのデータが0か1かということを決められればいいのです。

そのため、ラベルがちょうど切り替わるところで値が変化し、それ以外のところでは0と1で一定値をとり続ける次のような仮説であれば分類が行えそうです。

実は、「シグモイド関数」という関数がちょうどこのような性質を持っています。
シグモイド関数は、入力値をzとして

で表される関数です。
ロジスティック回帰では、このzに線形回帰での仮説「aX + b」を入れて新たな仮説とします

仮説をこのように設定することの利点がもう一つあります。それは、出力値を確率として解釈できることです。
シグモイド関数の出力は必ず0~1の間の値なので、例えば「出力値が0.7であれば、クラス1に分類される確率が70%」というような解釈ができます。
つまり、実際に分類する際に「出力が何%以上ならクラス1に分類する」という閾値を決めることができるのです。

以下でシグモイド関数を用いた仮説を実装してみます。

の部分は、Numpyの機能を使って「np.exp(-z)」と書けば計算できます。

 

シグモイド関数を用いて仮説を定義しましたが、パラメータa, bが初期値なので当然先ほどのような形にはなっていません。
ここから、学習によって適切なa, bを見つけていきます。

2. 目的関数

目的関数とは簡単に言うと仮説による予測値と正解値の誤差でしたが、分類問題では回帰問題で用いた二乗和誤差とは違います。

今回の正解値は0か1かの二値ラベルだったので、異常な工場についてはは1に近い値になり、正常な工場についてはは0に近い値になってほしいです。

ここから、それぞれの場合について目的関数を次のように定義します。

それぞれグラフにしてみると、次のようになっています。

左のグラフ(の時)から、確かにを最小化するとが1に近づくことがわかります。また、反対にが0に近い時は目的関数の値が無限大に大きくなります。
同様に右のグラフ(の時)から、を最小化するとが0に近づくことがわかります。また、反対にが1に近い時は目的関数の値が無限大に大きくなります。

よって適切な目的関数を定義できました。

最後に、この二つの場合を次のように一つの式にまとめることができます。

これは全データに対する目的関数の値を足し合わせたものですが、一つ一つのデータに対しては、ラベルの値を代入するときちんと先ほど考えた通りになっていることがわかります。

これが二値分類問題の目的関数であり、「交差エントロピー関数」と呼ばれる関数です。
Pythonでは以下のように書けます。
対数の計算は、Numpyの機能である「np.log」を使用できます。

 

初期値での目的関数の値は0.69くらいになったと思います。
それでは、この値を小さくするようにパラメータを更新しましょう。

3. パラメータ更新

ロジスティック回帰でも、線形回帰と同様の考えで勾配降下法によってパラメータを更新します。
そのためパラメータa, bに関する目的関数Jの勾配(微分)を求めなければなりません。

ただし、ロジスティック回帰におけるパラメータの更新式は実は線形回帰とまったく同じになります。
目的関数が違うのに不思議ですが、先ほど定義した目的関数を実際にa, bで微分すれば確かめられます(シグモイド関数σの微分が(1 – σ)σとなることを用いれば簡単です)。

 

更新するごとに目的関数の値も小さくなり、仮説もデータによくフィットしています。

未知データの予測

上で得られたパラメータで仮説を定義し、新しくデータxを入れてそれがクラス0とクラス1のどちらに属するかを予測してみます。

 

まとめ

今回は、「欠陥製品の個数から工場が正常稼働しているかどうかを分類」するタスクを例に、ロジスティック回帰を学びました。線形回帰と流れは同じでしたが、仮説と目的関数(+正解データの与え方)が異なりました。これが機械学習で分類問題を解く方法の基礎になるので、しっかりと要点を抑えておきましょう。

\ シェア /

E資格スピードパッケージ2023#2修了者合格率100%達成

zero to one E資格 jdla

zero to oneの「E資格」向け認定プログラム

日本ディープラーニング協会の実施するE資格の受験ならzero to oneの「E資格」向け認定プログラム (税込165,000円) をおすすめします。当講座は、東京大学大学院工学系研究科の松尾豊教授と東北大学大学院情報科学研究科の岡谷貴之教授が監修する実践的なプログラムとなっています。
厚生労働省の教育訓練給付制度対象のE資格認定プログラムの中では最安値※となり、実質負担額49,500円~(支給割合70%の場合)で受講可能です。※2023年弊社調べ zero to one E資格 jdla

人工知能基礎講座を提供中

人工知能の第一人者である東京大学の松尾豊教授が監修した人工知能基礎講座を受講してみませんか? 人工知能の歴史から自然言語処理、機械学習、深層学習といった最先端のトピックやAIに関わる法律問題まで網羅しているので全てのビジネスパーソン・AIの初学者におすすめです。

サンプル動画

人工知能基礎講座はこちら↓ zero to one G検定 人工知能基礎 jdla

AI初学者・ビジネスパーソン向けのG検定対策講座

G検定受験前にトレーニングしたい方向けの問題集「G検定実践トレーニング」も提供中です。 zero to one E資格 jdla