Numpy를 이용한 1차 직선 만들기
numpy가 제공하는 간단한 함수를 이용해서 1차 직선을 만들어 그래프로 비교하자
[ 절차 ]
- numpy.polyfit( ) : 직선을 구성하기 위한 계수(기울기, 절편) 계산
- 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()