Linear Regression-多重線形回帰、データムモデル、マルチモデル作成および可視化の表示


多重線形回帰とは?


単純な線形回帰のように,独立変数Xの変化による従属変数yの変化を直線として予測する方法は,独立変数Xが複数ある解析法である.
独立変数Xは、複数=特性(feature)が複数であることを意味する.
そこで,2つの独立変数を用いて線形回帰モデルを構築し,その過程をまとめ,重要な用語と内容を整理する.

条件モデルの作成


マシンラーニングモデルを作成する前に、データ作成の最低パフォーマンスモデルを使用して、データムモデルの誤差を理解して、将来作成するモデルのパフォーマンス評価を比較します.
処理する問題によって、次のように分類できます.
  • 回帰問題:ターゲットの平均値(データと状況に応じて、中心値、または他の値)です.
  • 分類問題(分類):ターゲットの最も頻繁な値
  • クロック列データ(TimeStamp):前タイムスタンプ値->前秒の感覚.扱いにくいデータですが、GPSは時間的に位置情報が異なり、株の状況も時間が経つにつれて変わるので、「過去の情報から学び未来を予測する」ことが常に必要です.
  • この論文ではnumericatargetを処理する問題を解決するために,回帰問題の解決を試みる.
    Datasetはsebornが提供するdiamond datasetを使用します.
    priceをターゲット回帰問題と見なし,基準モデルを平均値として行う.
    
    import seaborn as sns
    import numpy as np
    
    # seaborn의 diamond 데이터 불러오기
    df = sns.load_dataset('diamonds')
    
    
    # target = price / feature = carat 그래프로 산점도 나타내기 
    sns.scatterplot(df['carat'], df['price']);
    
    # 기준선 예측값 구하기(price column의 평균값)
    predicted = df['price'].mean()
    
    #기준선 긋기( price column의 평균값)
    sns.lineplot(x=df['carat'], y= predicted, color = 'red');

    可視化のために「単純な線形回帰」で表現した.これは赤い線の最初の予測の基準モデルと予測線です.
    priceデータの平均からなり,データの分布と距離が一目でわかる.MAE(絶対平均誤差)により精度を調べることができる.sklearnライブラリでやります.
    from sklearn.metrics import mean_absolute_error
    
    # 절대평균오차 구하기
    mae = mean_absolute_error(predicted, df['price'])
    3031.603220851001
    3031誤差は、我々が予測した赤線とデータとの間の距離の絶対値の平均である.ピークが17500のデータでは,誤差は3000台であり,これは大きな誤差である可能性がある.これを減らす過程はモデリングです.

    多重線形回帰モデルの作成


    多重線形モデルは3 D描画で生成できますが、3つ以上の特性で描画できないため、2つの特性でモデリングできます.
    from sklearn.linear_model import LinearRegression
    from sklearn.model_selection import train_test_split
    
    # 2개 feature(특성)을 이용한 다중 선형회귀모델 작성
    
    # target 설정 = price
    target = ['price']
    
    # feature 설정 = carat, depth 두가지 특성
    feature = ['carat', 'depth']
    
    # 다중선형회귀 모델작성하기
    
    # model 변수에 선형회귀 모델을 집어넣는다.
    model =  LinearRegression() 
    # 선형회귀 모델을 X_train(두개의 특성), y_train(price라는 타겟)에 적용(fit)한다.
    model.fit(df[feature], df[target]) 
    # 만들어진 모델을 원래학습시켰던 데이터에 적용해본다.
    y_pred = model.predict(df[feature]) 
    空のLinearRegressionモデルにfeatureとtargetデータを加えてフィットします.model.fit(X,y)を行うと,既にモデルが作成されていると考えられる.その後,他のデータセットのX(feature)を予測学習することにより,適切なyを予測する.
     # 우리가 만든 모델의 에러를 점검해본다. 
    mae_pred = mean_absolute_error(y_pred, df['price']) 
    
    print('기준모델의 오차: {0} \n다중회귀모델의 오차: {1}'.format(mae, mae_pred))  
    # 오차가 확 줄어든 것을 볼 수 있다. 
    기준모델의 오차: 3031.603220851001 
    다중회귀모델의 오차: 1005.1337893657361
    作成したモデルを基準モデルと比較します.平均的に確立された基準モデルの実際の目標データの誤差に対して,X trainデータで帰線にフィットするモデルの誤差はずっと小さいことがわかる.平均線と比較して,特性とターゲット間誤差の二乗と最小の線が描かれていることが分かった.


    図は単純な線形回帰モデルと基準モデルの比較であるが,図に示すように誤差を著しく減少させる線が描かれていると考えられる.
    進行したデータには2つの特性があるため,データの分布と相関,およびモデルの予測線(面)が見られる.従属変数と独立変数は3つのTTLであるため,それらは面を構成する.
    
    import matplotlib.pyplot as plt
    from matplotlib import style
    import plotly.express as px
    import plotly.graph_objs as go
    import itertools
    
    def surface_3d(df, f1, f2, target, length=20, **kwargs):
      
        # scatter plot(https://plotly.com/python-api-reference/generated/plotly.express.scatter_3d)
        plot = px.scatter_3d(df, x=f1, y=f2, z=target, opacity=0.5, **kwargs)
        
        # 다중선형회귀방정식 학습
        model = LinearRegression()
        model.fit(df[[f1, f2]], df[target])    
    
        # 좌표축 설정
        x_axis = np.linspace(df[f1].min(), df[f1].max(), length)
        y_axis = np.linspace(df[f2].min(), df[f2].max(), length)
        coords = list(itertools.product(x_axis, y_axis))
        
        # 예측
        pred = model.predict(coords)
        z_axis = pred.reshape(length, length).T
        
        # plot 예측평면
        plot.add_trace(go.Surface(x=x_axis, y=y_axis, z=z_axis, colorscale='Viridis'))
        
        return plot
    
    
    surface_3d(
        df,
        f1='carat', 
        f2='depth', 
        target='price',  
        title='diamond price'
    )

    3 d sportsを視覚的に使用した.多くのデータの散点図と予測面の3次元構成が見られる.

    モデルの評価


    TrainSet/ValidationSet/Test Setについて


    作成したモデルが役に立つかどうかを知るにはどうすればいいですか?
    検証データ(validation set)とテストデータ(Test set)を使用できます.
    トレーニングデータを熟知し、検証データを使用して新しいデータのパフォーマンスを評価します.
    パフォーマンスの改善が必要な場合は、トレーニングデータを再使用して調整し、検証データで確認できます.
    検証データのパフォーマンス評価が適切であると判断した場合は、テストデータを使用して最後のチェックを行います.
  • トレーニングデータ:モデルを学習するための基本データリソース
  • 検証データ(Validation Data):
  • データリソース(ex:模擬試験)は、トレーニングデータのみの性能を確保し、モデルを調整するために使用されます.
  • テストデータ:最終的に学習を完了し、パフォーマンスを評価するには1回のデータしか使用できません.テストデータを使用して学習すると、漏洩の問題が発生する可能性があります.
  • 
    # test set, train set으로 나누기
    X_train = df[feature]
    y_train = df[target]
    X_test = df[feature]
    Y_train = df[target]
    #  각각 training set 80% test set 20%로 나눠서 뽑는다
    X_train, X_test, y_train, y_test = train_test_split(df[feature],df[target], test_size = 0.2, random_state = 2)
    
    # 다중선형회귀 모델작성하기
    model =  LinearRegression() # model 변수에 선형회귀 모델을 집어넣는다.
    model.fit(X_train, y_train) # 선형회귀 모델을 X_train(두개의 특성), y_train(price라는 타겟)에 적용(fit)한다.
    y_pred = model.predict(X_train) # 만들어진 모델을 학습 데이터에 적용해본다.
    y_pred1 = model.predict(X_test) # 완성된 모델을 테스트용 데이터에 적용해본다.
    便宜上、検証セットは区分されていません.一般的には、列車とテストを行った後、その列車グループに1回列車とvalsetを分けます.
    これを「hold-out方式」と呼ぶ.
    from sklearn.metrics import r2_score
    
    # MAE 비교해보기
    mae_train = mean_absolute_error(y_train, y_pred)
    mae_test = mean_absolute_error(y_test, y_pred1)
    mae_train, mae_test
    
    #R2 square 비교해보기
    r2_train = r2_score(y_train, y_pred)
    r2_test = r2_score(y_test, y_pred1)
    r2_train, r2_test
    
    print(f'Train set MAE: {mae_train:,.0f}')
    print(f'Train set R2: {r2_train:,.3f}')
    
    print(f'Test set MAE: {mae_test:,.0f}')
    print(f'Test set R2: {r2_test:,.3f}')
    Train set MAE: 1,004
    Train set R2: 0.851
    Test set MAE: 1,009
    Test set R2: 0.850
    train setとtest setのモデル予測の誤差をMAEし,決定係数R 2を示した.Train setとTest setの誤差は大きくなく,粒界数が高く,「分散が少ない」モデルがよく確立されていると考えられる.
    # 회귀계수 확인하기
    a = model.coef_
    b = model.intercept_
    
    print('carat 특성 회귀계수:',a[0][0])
    print('depth 특성 회귀계수:',a[0][1])
    print('y 절편 값:',b[0])
    carat 특성 회귀계수: 7765.140663767152
    depth 특성 회귀계수: -102.1653221580108
    y 절편 값: 4045.3331826016815
    モデル特性の回帰係数とyスライス値をcoefとinterceptにより確認した.
    carat特性は、単位価格当たり7765上昇することを示している.
    逆に,回帰係数からdepth特性は1回上昇するごとに102の反比関係が減少することが分かった.
    yスライスの場合、最適な傾斜過程において、特性X値が0のとき、4045の位置にある.
    多重線形回帰モデルを自ら作成・評価し,このモデルを確認した.

    定義と照合/小さすぎる照合



    -オーバーフィット(overfitting):モデルは訓練用データで学習しすぎており、データの検証やテストデータの誤差が大きすぎる場合やオーバーフィット(overfitting)に適しており、分散性が高いことを示している.

    -underfitting(underfitting):モデルは訓練データの学習が少なすぎるため、誤差が大きい.この場合は偏向が高いことを示す.
    (画像ソース:https://tensorflow.blog)
    -一般化(Generalization):この一般化は制限とも呼ばれ、トレーニングデータとテストデータの誤差が類似していることを示し、新しい特徴データ入力はトレーニングデータの誤差と類似しており、予測目標値のモデルを一般化している.
    一般に,多重線形回帰を利用すると,特性の増加に伴って超適合となる可能性が高いので,それをよく調節して一般化させる必要がある.