sklearn.linear_모델의 선형 회귀 분석에 몇몇 곡선을 적용할 때 계수의 변화를 결정한다

선형 회귀분석은 제시된 데이터가 가장 가까운 직선 공식과 제시된 공식의 데이터가 얼마나 가까운지 계산할 수 있다.(해석이 복잡하지만...) 이번에는 다음 원천에서 y-y7과 같은 곡선에 대해 선형 회귀분석을 실시하여 결정 계수의 차이를 확인했다.y는 직선 자체이고 y1-y7은 곡선이다.


출처

import pandas as pd 
from sklearn.linear_model import LinearRegression

import matplotlib.pyplot as plt


#データ準備
dt={
    "x"  :[1100 , 1200 , 1300 , 1400 , 1500 , 1600 , 1700 ]  ,
    "y"  :[1100 , 1200 , 1300 , 1400 , 1500 , 1600 , 1700 ]  ,
    "y1" :[1100 , 1100 , 1100 , 1100 , 1100 , 1700 , 1700 ]  ,
    "y2" :[1100 , 1100 , 1700 , 1700 , 1700 , 1700 , 1700 ]  ,
    "y3" :[1100 , 1150 , 1350 , 1350 , 1550 , 1550 , 1700 ]  ,
    "y4" :[1100 , 1200 , 2300 , 1400 , 1500 , 1600 , 1700 ]  ,
    "y5" :[1100 , 1200 ,  500 , 1400 , 1500 , 1600 , 1700 ]  ,
    "y6" :[1100 , 1700 , 1100 , 1700 , 1100 , 1700 , 1700 ]  ,
    "y7" :[1100 , 1100 , 1200 , 1300 , 1450 , 1520 , 1700 ]  ,
    }

#描画位置
pos={
    "y" :[0,0]  ,
    "y1":[0,1]  ,
    "y2":[1,0]  ,
    "y3":[1,1]  ,
    "y4":[2,0]  ,
    "y5":[2,1]  ,
    "y6":[3,0]  ,
    "y7":[3,1]  ,
}


yset=list(dt.keys())
yset.remove("x")
yset.sort()

x=pd.DataFrame(dt["x"])


#描画関連初期化
len_yset=len(yset)
fig, ax = plt.subplots(int(len_yset/2),2  , figsize=(13,8),constrained_layout=True )  # Create a figure and an axes.

for y_val in yset :
    y=pd.DataFrame(dt[y_val])

    #線形回帰モデルの実行

    #model = LinearRegression(fit_intercept=False)     #線形回帰モデルの呼び出し(切片は計算に使用しない)
    model = LinearRegression()          #線形回帰モデルの呼び出し
    model.fit(x   , y)                  #モデルの訓練

    coef=round(model.coef_[0][0] ,2)              #回帰変数
    intercept=round(model.intercept_[0] ,2)       #回帰直線の切片
    score=round(model.score(x,y) ,2)              #決定係数


    #text出力
    print("{} : y={}x {:+}  決定係数 {} ".format(y_val , coef ,intercept ,score))

    #描画
    ax[pos[y_val][0] , pos[y_val][1] ].plot(dt["x"] , dt[y_val]  , label= y_val)
    ax[pos[y_val][0] , pos[y_val][1] ].set_title("y={}x {:+}  決定係数 {} ".format(coef ,intercept ,score) , fontname="MS Gothic")  # Add a title to the axes.
    ax[pos[y_val][0] , pos[y_val][1] ].legend()  # Add a legend.
plt.show()

결실


y
공식.
확정 계수
y
y=1.0x -0.0
1.0
y1
y=1.07x -228.57
0.63
y2
y=1.07x +28.57
0.63
y3
y=1.0x -7.14
0.96
y4
y=0.64x +642.86
0.12
y5
y=1.29x -514.29
0.47
y6
y=0.64x +542.86
0.19
y7
y=1.03x -106.43
0.96

직선의 y=1, 직선에 가까운 (y3, y7)의 확정 계수는 1에 가깝고 그 외에 0.6 이하이다.역시'결정 계수'라는 말이 있다.


회귀 분석에 관해서는 제 개인적인 문외한 해석입니다. 잘못이 있으면 지적해 주십시오.


참고 자료


Linter Regression 클래스에 대한 노트
sklearn.linear_model.LinearRegression

좋은 웹페이지 즐겨찾기