LogoMark.png

LinearRegression の変更点


#author("2020-07-16T19:39:57+09:00;2020-07-08T13:18:05+09:00","default:inoue.ko","inoue.ko")
*線形回帰
Linear Regression
~

***概要
線形回帰とは、''説明変数'' X と''目的変数'' y との間にある関係を求める、つまり  y = f ( X ) となる関数 f を求める代表的な手法です(教師あり学習|回帰)。
 線形とは、文字通り説明変数と目的変数の関係を表すグラフが直線(2変数の場合は平面)になるもので、関係式は以下のような一次式の結合(線形結合)で表現されるます。複数のデータセットから、最適なパラメータ '''wSUB{i};'''  を求めることで、あらゆる状況下での y を予測できるようになります。

 '''y = wSUB{0}; + wSUB{1};・xSUB{1}; + wSUB{2};・xSUB{2};・・・  + wSUB{n};・xSUB{n};'''

計算は、上記の式が表す直線(多次元)と実際のデータとの二乗誤差(距離)が最小になるように '''wSUB{i};''' を求めます。最小二乗法といいます。

~

***用語解説
-単回帰分析:Simple Linear Regression Analysis
説明変数が1つの場合。 '''wSUB{1};''' ひとつを対象とします。
'''y = wSUB{0}; + wSUB{1};xSUB{1};'''
-重回帰分析:Multiple Linear Regression Analysis
説明変数が複数ある場合。複数の '''wSUB{i};''' を対象とします。 
'''y = wSUB{0}; + wSUB{1};xSUB{1}; + wSUB{2};xSUB{2}; + ・・'''
-多項式回帰:変数のべき乗があって、グラフは線形とはなりませんが、成分 '''w''' は一次ということで、分類上は線形回帰に含まれます。
'''y = wSUB{0}; + wSUB{1};x; + wSUB{2};xSUP{2}; + ・・'''

-回帰係数:傾きを示す係数  '''wSUB{i};''' のこと。重み(weight)とも呼ばれます。
-偏回帰係数:重回帰分析における回帰係数。偏(partial)というのは「他の説明変数の影響を除外した場合の当該変数の重み」という意味。

-定数項(切片):軸との交差位置を係数 '''wSUB{0};''' のこと。

~

***参考解説
-正規化
線形回帰では「予測と実際の値の二乗誤差」を小さくすべく、最適な成分(wSUB{i};)を求めますが、学習データに過敏に反応して複雑なモデル曲線を作ってしまうことがあります。学習データには忠実になりますが、検証データ(つまり学習に用いたものとは異なるデータ)での予測では、誤差が大きな汎用性に欠けるモデルになってしまいます(過学習)。これを緩和するために、成分(wSUB{i};)の振れ幅を小さくしてモデルの汎化性能を向上させるために、関数式に「正規化項」を加えて調整を行う作業を「正規化」といいます。正規化項の違いで以下のようなものがあります。
--LASSO回帰:各成分('''wSUB{i};''')の絶対値の和(L1ノルム)で正規化項に
--Ridge回帰:各成分('''wSUB{i};''')の二乗和のルート(L2ノルム)を正規化項に

-非線形回帰
以下のような非線形の関数式を用いて、データの当てはめを検討します。
'''y = 1 / (wSUB{0}; + wSUB{1};xSUB{1}; )''' 
非線形回帰分析は計算が複雑になるため、数値解が得られずに失敗する場合もあります。関数モデルを変えて試行錯誤を繰り返すことが多くなります。

~

***単回帰分析のプログラム例
以下に、単回帰分析のサンプルを掲載しています。
ipynb(JupyterNotebook)形式で、GitHubに置いていますが、レンダリングがタイムアウトする場合は、下の nbviewer 経由でご覧下さい。
-GitHub:[[SimpleLinearRegression.ipynb>https://github.com/koichi-inoue/JupyterNotebook/blob/master/SimpleLinearRegression.ipynb]]
-nbviewer:[[SimpleLinearRegression.ipynb>https://nbviewer.jupyter.org/github/koichi-inoue/JupyterNotebook/blob/master/SimpleLinearRegression.ipynb]]

-このプログラム例では、以下の事例を紹介しています。
--説明変数:RM(平均部屋数)
--目的変数:MEDV(住宅価格) 

-使用したライブラリ
--[[pandas>Pandas]]:データ解析
--matplotlib:グラフ描画
--[[scikit-learn]]:回帰分析

-使用しているデータ:[[ボストン市郊外の地域別住宅価格>https://archive.ics.uci.edu/ml/machine-learning-databases/housing/]]

~

***重回帰分析のプログラム例
以下に、重回帰分析のサンプルを掲載しています。
ipynb(JupyterNotebook)形式で、GitHubに置いていますが、レンダリングがタイムアウトする場合は、下の nbviewer 経由でご覧下さい。
-GitHub:[[MultipleLinearRegression.ipynb>https://github.com/koichi-inoue/JupyterNotebook/blob/master/MultipleLinearRegression.ipynb]]
-nbviewer:[[MultipleLinearRegression.ipynb>https://nbviewer.jupyter.org/github/koichi-inoue/JupyterNotebook/blob/master/MultipleLinearRegression.ipynb]]

-このプログラム例では、以下の事例を紹介しています。
--説明変数:density, volatile acidity(密度と揮発酸)
--目的変数:alcohol(アルコール度数) 

-使用したライブラリ
--[[pandas>Pandas]]:データ解析
--matplotlib:グラフ描画
--[[scikit-learn]]:回帰分析

-使用しているデータ:[[Wine Quality Data Set 赤ワイン>https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/]]

~


***付記:X(大文字)と y(小文字)について
一般に目的変数(出力)に対して説明変数(入力)の方が数(次元)が多いので、プログラムでは y は小文字、X は大文字で書いたりします。
-y が値だとすれば、X はベクトル
-y がベクトルだとすれば、X は行列

~
~