NumPy로 회귀 분석하기

회귀 분석에 대해서는 이전에도 선형 회귀 화제에서 언급했습니다.

NumPy로 회귀 분석



그럼 실제로 코드를 쓰고 회귀 분석을 해 보겠습니다. np.polyfit 또는 np.polyval 을 이용하면 n 다음 식으로 2 변수의 회귀 분석을 할 수 있습니다.

자세한 것은 상기의 링크로부터 문서를 참조하는 편이 좋습니다만, 다음과 같습니다.
  • np.polyfit (x, y, n) : n 다음 식에서 2 변수의 회귀 분석
  • np.polyval (p, t) : p로 표시되는 다항식에 t를 대입하여 값을 계산합니다.
    import numpy as np
    import matplotlib.pyplot as plt
    
    x = np.array([0.0, 1.0, 2.0, 3.0,  4.0,  5.0])
    y = np.array([0.0, 0.8, 0.9, 0.1, -0.8, -1.0])
    z = np.polyfit(x, y, 3)
    
    p = np.poly1d(z)
    p30 = np.poly1d(np.polyfit(x, y, 30))
    xp = np.linspace(-2, 6, 100)
    
    plt.plot(x, y, '.', xp, p(xp), '-', xp, p30(xp), '*')
    plt.ylim(-2,2)
    plt.show()
    plt.savefig('image.png')
    



    이때
    1차식의 경우는 p[0]: 기울기, p[1]: 절편이 됩니다.
    N 다음 식이라면 p[0]t(N-1) + p[1]*t*(N-2) + ... + p[N-2]*t + p[N-1] 입니다.

    최소 제곱법에 대해서도 이전에 만졌습니다. 은 데이터 열 {(x_1, y_1), (x_2, y_2), ... (x_n, y_n)} 에 대한 잔차 제곱합을 최소화하는 모델을 결정합니다. . 이 때 관측치의 오차 분포의 분산이 일정하다고 가정합니다.

    중회귀 분석



    독립 변수 m개의 모델에 대한 회귀 분석은 중회귀 분석입니다.
    z = ax + by + c
    

    라는 식을 요구하고 싶습니다.
    x = [9.83, -9.97, -3.91, -3.94, -13.67, -14.04, 4.81, 7.65, 5.50, -3.34]
    y = [-5.50, -13.53, -1.23, 6.07, 1.94, 2.79, -5.43, 15.57, 7.26, 1.34]
    z = [635.99, 163.78, 86.94, 245.35, 1132.88, 1239.55, 214.01, 67.94, -1.48, 104.18]
    
    import numpy as np
    from scipy import linalg as LA
    
    N = len(x)
    G = np.array([x, y, np.ones(N)]).T
    result = LA.solve(G.T.dot(G), G.T.dot(z))
    
    print(result)
    

    이것으로
    [-30.02043308 3.55275314 322.33397214]
    구하기 때문에
    z = -30.0x + 3.55y + 322
    

    라는 방정식이 구해져 이것이 해가 됩니다.

    참고



    2013년 프로그래머를 위한 수학 공부회 자료
    htp : // 니치에 s. 기주 b. 이오 / 마 th 세미나 r /
  • 좋은 웹페이지 즐겨찾기