Edited at

線形重回帰による決定係数の算出とモデルの選択


はじめに

 線形回帰を実施するとき、どのモデルが最も効率が良いのか試行する。データはscikit-learnのbreast_cancerを用いて実装する。このデータはウィスコンシン乳癌データセットと呼ばれるもので、腫瘍が良性であるか悪性であるかを判定したものである。データは569あり、そのうち良性は212、悪性は357、特徴量は30種類ある。これらのデータを用いて腫瘍が良性か悪性かを判定するモデルを作成し、最も決定係数が高くなるものを選択する。


線形回帰の手法

線形回帰の手法は次の4種類で実施する。

最も高い決定係数のモデルは線形回帰となった。

線形回帰の手法
メソッド
汎化手法
決定係数

線形回帰
LinearRegression()
-
0.73

Lasso回帰
Lasso()
L1正則化
0.61

Ridge回帰
Ridge()
L2正則化
0.72

ElasticNet回帰
ElasticNet()
L1 & L2正則化
0.66

※今回のElasticNet回帰はL1:L2 = 50:50


決定係数

 独立変数(説明変数)が従属変数(被説明変数)のどれくらいを説明できるかを表す値である。寄与率と呼ばれることもある。標本値から求めた回帰方程式のあてはまりの良さの尺度として利用される。(wikipediaより)

正則化

 機械学習で過学習を防いだり、逆問題での不良設定問題を解くために、追加の項を導入する手法である。(wikipediaより)

L1正則化

 予測に影響を及ぼしにくいデータにかかる係数をゼロに近づける手法

L2正則化

 係数の大きさが大きくなりすぎないように制限する手法



手順


  • 乳癌のデータセットを読み込む

  • 訓練データとテストデータを分離する

  • 分析手法をmethodsに格納する

  • 決定係数の最大値を初期化する

  • methodsに格納したそれぞれの線形回帰手法で決定係数を求める

  • 最も決定係数の高かった線形回帰手法を選択する


pythonによる実装

import numpy as np

from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LinearRegression, Lasso, Ridge, ElasticNet
from sklearn.model_selection import train_test_split

#データの読み込み
cancer_data = load_breast_cancer()

#訓練データとテストデータを分離
train_X, test_X, train_y, test_y = train_test_split(cancer_data.data, cancer_data.target, random_state=0)

#分析手法をmethodに格納
methods = np.array([LinearRegression(), Lasso(), Ridge(), ElasticNet()])
regression_name = ["線形回帰", "Lasso回帰", "Ridge回帰", "ElasticNet回帰"]

#決定係数の最大値を初期化
maxvalue = 0

#学習と予測
for idx, method in enumerate(methods):
model = method
model.fit(train_X, train_y)
score = model.score(test_X, test_y)

if idx == 0:
index = "線形回帰"
if idx == 1:
index = "Lasso回帰"
if idx == 2:
index = "Ridge回帰"
if idx == 3:
index = "ElasticNet回帰"

print("{:<15}:{:.2f}".format(index, score))

if score >= maxvalue:
maxvalue = score
index_max = index

print("")
print("最も決定係数の大きいモデルは\nモデル:{} 決定係数{:.2f}".format(index_max, maxvalue))

出力

線形回帰           0.73

Lasso回帰   0.61
Ridge回帰   0.72
ElasticNet回帰   0.66

最も決定係数の大きいモデルは
モデル:線形回帰 決定係数0.73


おわりに

 今回実施した4種類のモデルの中では、線形回帰が最も決定係数が高い結果となった。しかし、ElasticNet回帰はL1:L2 = 50:50のみの試行であったため、次回はこの割合を変更してより決定係数が高くなるモデルがないか試行する。