【Python】ロジスティック回帰モデルによるワインデータ分類

プログラミング

今回はPythonでロジスティック回帰モデルを用いてワインの等級を分類してみます。今回参考にしたのは、以下の参考書です。

 

 

また、実装はGitHubにあげています。

Daisuke0209/Basic_analysis
Contribute to Daisuke0209/Basic_analysis development by creating an account on GitHub.

テストデータの読み込み

テストデータはインターネット上に公開されているワインデータとする。

データの中身に関しては、Githubを見てみてください。一応説明変数の説明をしておきます。

 

  • Alcohol:アルコール
  • Malic acid:リンゴ酸
  • Ash:灰
  • Alcalinity of ash:灰のアルカリ性
  • Magnesium:マグネシウム
  • Total phenols:フェノール類全量
  • Flavanoids:フラバノイド
  • Nonflavanoid phenols:非フラバノイドフェノール類
  • Proanthocyanins:プロアントシアニン
  • Color intensity:色彩強度
  • Hue:色調
  • OD280/OD315 of diluted wines:蒸留ワインのOD280/OD315
  • Proline:プロリン

正直全く聞きなれないものばっかりや(;´・ω・)
またクラスラベルはワインの等級を意味します。

array([1, 2, 3])

等級としては1,2,3の三つあります。

【Python】ワインデータを学習データとテストデータに分割

データを学習データとテストデータに7:3で分割します。

【Python】ワインデータの標準化

データの標準化を行います。

【Python】ロジスティック回帰モデルの定義

いよいよロジスティック回帰モデルを定義して、等級分類を行います。

正答率(学習データ):98.39%

正答率(テストデータ):98.15%

テストデータ・学習データともに正答率がほぼ同じことから、過学習に陥っていないことが分かります。
また、解答ラベルとして3クラスあるため、一対他手法を用いてロジスティック回帰を行っています。つまり、

  • クラス1かそうでないか
  • クラス2かそうでないか
  • クラス3かそうでないか

を判定する3つのモデルが構築されます。そのため、モデルパラメータも各モデルごとに存在します。

ロジスティック回帰モデル
観測データ\({\bf x}=\{x_n\}\)が与えられた際に、クラスラベル=1である確率\(p(y=1|x)\)は以下のように求められます。
$$z={\bf w} \cdot {\bf x}+b$$
$$p(y=1|x)=\frac{1}{1+e^{-z}}$$
ここで\({\bf w}=\{w_n\}\)はモデルの重み、\(b\)は切片項であり、学習の際はこれらのパラメータをフィッティングさせます。

また、ロジスティック回帰モデルのインスタンス生成時に設定しているpenaltyは、罰則項を意味します。l2を設定した場合は、L2正則化項

$$L2:||w||_2^2=\sum_{j=1}^{m}{w_j^2}$$

がコスト関数に付与され、l1を設定した場合は、L1正則化項

$$L1:||w||_1=\sum_{j=1}^{m}{|w_j|}$$

がコスト関数に付与されます。一般的に、罰則項はモデルの過学習(over fitting)を抑制したいときにコスト関数に導入されます。また、同じくインスタンス生成時に設定されているCも過学習抑制のためのパラメータであり、Cを小さくするほど(0に近づけるほど)過学習は抑えられる一方で、バイアスは高くなります。

今回は3クラス分類のため、ロジスティック回帰モデルが3つ用意されます。そのため、モデルの重み(w)・バイアス(b)も3種類存在します。実際、バイアスは

array([-0.64732881, -0.43279492, -0.83258577])

は3つ存在し、モデルの重み(w)も、

array([[ 0.58228361, 0.04305595, 0.27096654, -0.53333363, 0.00321707, 0.29820868, 0.48418851, -0.14789735, -0.00451997, 0.15005795, 0.08295104, 0.38799131, 0.80127898], [-0.71490217, -0.35035394, -0.44630613, 0.32199115, -0.10948893, -0.03572165, 0.07174958, 0.04406273, 0.20581481, -0.71624265, 0.39941835, 0.17538899, -0.72445229], [ 0.18373457, 0.32514838, 0.16359432, 0.15802432, 0.09025052, -0.20530058, -0.53304855, 0.1117135 , -0.21005439, 0.62841547, -0.4911972 , -0.55819761, -0.04081495]])

3つのベクトルが存在します。

テストデータの一行目をロジスティック回帰モデルに与えてみます。

クラス1である確率は88.29%

クラス2である確率は12.23%

クラス3である確率は14.14%

前述の通り3クラス分類の場合、一対他手法を用いるとロジスティック回帰モデルは3つ必要になります。全体のモデルとしての出力は、最も確率が高いものになります。この例の場合は、最も確率が高いクラス=1と判定されます。実際、sklearnのロジスティック回帰モデルのインスタンスを用いて同じデータを予測してやると


クラス=1

前述の計算結果と同じくクラス=1となります。

まとめ

今回はロジスティック回帰モデルを用いたワインデータの分類をご紹介しました!

また、機械学習を勉強するための参考書を以下で紹介しています!よかったら見ていってください。

機械学習を勉強するためのオススメ参考書(理論・Python・Webアプリ)
統計・機械学習に関しては授業で習ったところありますが、結構忘れてしまっています(。また、Rの演習の授業はありましたが、Pythonは学生のころには使っていません。機械学習・データサイエンスを勉強するにあたり、私が参考にしている参考書を一挙ご紹介したいと思います。

コメント