線形回帰【LinearRegression】

〇回帰問題の予測を行うアルゴリズムの1つ

 ー連続値をとる目的変数yと説明変数の線形関係をモデル化
 ー説明変数が1つの場合は単回帰
 -説明変数が複数の場合は重回帰


〇scikit-learnに実装されているモジュールを使用

 -sklearn.linear_model.LinearRegressionのクラスを使用
 ー大きく分けて工程が4つ存在

①ライブラリのインポート

from sklearn.linear_model import LinearRegression

②インスタンス作成

clf = inearRegression()

③モデルの学習

clf.fit(X,y)

➃作成したモデルでの予測

clf.predict(X')



〇線形回帰の使用方法

LinearRegression

【LinearRegression()の引数】
・引数fit_intercept:Falseの場合、切片を求める計算を含まない(デフォルトはTrue)
・引数normalize:Trueの場合、説明変数を正規化する(デフォルトはFalse)
・引数copy_X: メモリ内でデータを複製するか(デフォルトはTrue)
・引数n_jobs: 計算に使うジョブの数
【sklearn.linear_model.LinearRegressionクラスのメソッド】
・fit(X, y[, sample_weight]):学習の実行
・get_params([deep]):学習の際に用いたパラメータの取得
・predict(X): 予測の実行
・score(X, y[, sample_weight]): 決定係数の算出
・set_params(**params): パラメータの設定


〇単回帰分析

<手順①>(LinearRegressionのクラスを読み込み、インスタンス化)

# クラスを読み込み
from sklearn.linear_model import LinearRegression
clf = LinearRegression()

<手順②>(データの用意)

# 説明変数RM(1戸あたりの平均部屋数)
X = df_boston['RM'].values.reshape(-1, 1)

# 目的変数target
Y = df_boston['target'].values

.reshape(-1, 1)を用いて次元数を1から2に変更していることに注意しましょう。

<手順③>(モデリング)

# 予測モデルを作成
clf.fit(X, Y)

<手順➃>(回帰係数と切片の確認)

In [1]: # 回帰係数
       print(clf.coef_)

       # 切片
       print(clf.intercept_)

Out[1]: [[9.10210898]]
       -34.67062078



以上より、以下の回帰式を得ることが出来る。

target =  9.10210898 ×  RM  -34.67062078




〇重回帰分析

<手順①>インスタンス化、データの用意

# インスタンス作成
clf = LinearRegression(normalize=True)

# 説明変数
X = df_boston[boston.feature_names].values

# 目的変数target
Y = df_boston['target'].values
重回帰では各変数がどの程度目的変数に影響しているかを偏回帰係数の大きさを比較することで確認ができるため、引数normalize=Trueとし説明変数を正規化しましょう。
・また、説明変数のカラム名はboston.feature_namesから取得します。

<手順②>モデル作成、回帰係数、切片の確認

In [1]: # 予測モデルを作成
       clf.fit(X, Y)

       # 回帰係数
       print(clf.coef_)

       # 切片
       print(clf.intercept_)

Out[1]: [-1.08011358e-01  4.64204584e-02  2.05586264e-02  2.68673382e+00
        -1.77666112e+01  3.80986521e+00  6.92224640e-04 -1.47556685e+00
         3.06049479e-01 -1.23345939e-02 -9.52747232e-01  9.31168327e-03
        -5.24758378e-01]
       36.459488385089884







いいなと思ったら応援しよう!