새소식

데이터분석/다섯째주

데이터 경향 : 선형 회귀(Linear Regression)

  • -
728x90

목차

 

Numpy를 이용한 1차 직선 만들기

numpy가 제공하는 간단한 함수를 이용해서 1차 직선을 만들어 그래프로 비교하자

[ 절차 ]

  1.  numpy.polyfit( )     :  직선을 구성하기 위한 계수(기울기, 절편) 계산
  2.  numpy.poly1d( )     :  polyfit으로 찾은 계수로 python에서 사용할 함수로 만들어 준다.
import numpy as np
import matplotlib.pyplot as plt

# 직선 그리기: 기울기가 3이고, 흔히 말하는 y 절편이 5
t = np.arange(0, 10, 0.01)
y = 3*t + 5

plt.figure(figsize=(12,8))
plt.plot(t, y)
plt.show()

# 노이즈 추가
y_noise = y + np.random.randn(len(y))

plt.figure(figsize=(12,8))
plt.plot(t, y_noise)
plt.show()

 

 

데이터 경향의 직선 찾기

직선을 구성하는 것은 기울기와 절편으로 그 값을 알면 직선을 알수 있게 된다.

노이즈 추가된 데이터에서 데이터 경향의 직선을 찾아보자.

fp1 = np.polyfit(t, y_noise, 1) #1차식
print(fp1)

 

 

기울기와 절편으로 예측값 찾기

poly1d 함수를 사용해서 polynomial class를 만들어 준다.

  • 폴리노미얼 클래스는 ..
    수학정인 다항식으로 취급되면서 아래의 코드처럼 first class로 표현해서 코드에서 함수로 사용할 수도 있다.
# poly1d : A one-dimensional polynomial class.
f1 = np.poly1d(fp1)
print(f1)

-- 출력 --

ploy1d( [ 2.98000616, 5.08138091 ] )

 

  • 수식(방정식)을 poly1d 함수에 적용해보면..
# (x+1)+(x-1)
fc_01 = np.poly1d([1, 1]) + np.poly1d([1, -1])
print(fc_01, '\n')

# (x+1)(x-1)
fc_02 = np.poly1d([1, 1]) * np.poly1d([1, -1])
print(fc_02, '\n')

# x² - 2x + 1
#─────────────
#   x - 1
fc_03 = np.poly1d([1, -2, 1]) / np.poly1d([1, -1])
print(fc_03)

-- 출력 --

ploy1d( [ 2, 0 ] )

ploy1d( [ 1, 0 , -1 ] )

( ploy1d( [ 1., -1. ] ),  ploy1d( [ 0. ] ) )

 

plt.figure(figsize=(12,8))
plt.plot(t, y_noise, label='noise', color='y')
plt.plot(t, y, ls='dashed', lw=3, color='b', label='original')
plt.plot(t, f1(t), lw=2, color='r', label='polyfit')
plt.grid()
plt.legend()
plt.show()

 

 

 

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.