Numpy를 사용한 선형 회귀 방법

소개



이 기사는 필자가 htps //w w. 우데 my. 이 m/샤레/1013lqB0 굳게 dF개R34=/
배운 것의 복습을 목적으로

쓰기


  • 최소 제곱법의 가벼운 도출
  • pandas의 DataFrame에서 numpy의 array로 변환하여 계산해보십시오.

    최소 제곱법의 도출



    특정 데이터 세트 [x, y]가 주어진다고 가정합니다.
    x는 설명 변수이고 y는 목적 변수. 예를 들어, 신장이 증가하면 체중이 증가하므로 이 경우 x=신장, y=체중이 된다.

    그리고 주어진 데이터 x에서 y를 예측하고 싶습니다. 그 때의 예측값을 $\hat{y}$로 하고, 다음과 같은 관계식이라고 가정한다.
    \hat{y} = ax + b
    

    여기서 $\hat{y}$를 정답값 $y$에 한없이 접근하는 것이 목표가 된다. 따라서
    Error = y - \hat{y} = y - ax + b =0
    

    되는 a, b를 찾는 것이 중요하다.
    이후의 설명은 아래 링크를 참조하십시오.
    h tp://아r즈이노피d. 웨 b. FC2. 작은 m/P7. html

    numpy를 이용한 선형 회귀



    먼저 모듈 가져오기
    import pandas as pd
    from pandas import Series, DataFrame
    import numpy as np
    
    import matplotlib.pyplot as plt
    import seaborn as sns
    sns.set_style('whitegrid')
    %matplotlib inline
    
    

    나중에 이번에 사용할 데이터 세트를 다운로드하십시오.
    from sklearn.datasets import load_boston
    
    boston = load_boston()
    

    이번에는 이 데이터 프레임 내의 RM(average number of rooms per dwelling)과 target(Price)를 사용합니다. 본래는 sns.pairplot나 sns.jointplot등을 이용해 선형 회귀(비례)의 관계가 있을 것 같은 변수를 찾습니다만, 이번은 미리 이 2개의 변수에는 비례 관계가 있다고 합니다.
    boston_df = DataFrame(boston.data)
    #列名をつける
    boston_df.columns = boston.feature_names
    #targetじゃわかりづらいので新たに列をコピー
    boston_df['Price'] = boston.target
    #散布図と回帰直線の表示
    sns.lmplot('RM', 'Price', data=boston_df)
    
    



    이 회귀 직선을 계산으로 내자.
    사용하는 것은 np.linalg.lstsq(X, Y).
    다만, 이 X에는 특정의 형태를 가진 어레이가 필요하므로 그 때문에 성형한다.
    X = boston_df.RM
    Y = boston_df.Price
    #[x,1]の形にする
    X = np.array([ [value[0], 1] for value in X])
    #浮動小数点の型に変換
    X = X.astype(np.float64)
    #a, bにそれぞれの予測値が格納される
    a, b = np.linalg.lstsq(X, Y)[0]
    

    이것으로 계산은 끝. 결과를 보자.
    plt.plot(boston_df.RM, boston_df.Price, 'o')
    x = boston_df.RM
    plt.plot(x, a*x+b, 'r')
    



    np.linalg.lstsq에 대한 보충



    공식 문서는 이쪽
    htps : //없는 mpy. 오 rg/도 c/s타 bぇ/레후 렌세/게네라테 d/누 mpy. ㄱ lg. lstsq. html # 없는 mpy. ㄱ lg. lstsq

    numpy.linalg.lstsq(a, b, rcond='warn')
  • 파라미터
    - 계수 행렬 a (M, N), 독립 변수 b (M,) or (M, K), rcond
  • 반환값
    - 최소 제곱 해 p, 잔차의 총 residues, 계수 행렬 a의 순위 순위, a의 singular value

  • np.linalg.lstsq(X, Y)[1]로 하면 잔차의 합계도 꺼낼 수 있다

    좋은 웹페이지 즐겨찾기