Run The Bridge

Chapter5 지도학습: 회귀 본문

Python/머신러닝 그리고 AI

Chapter5 지도학습: 회귀

anfrhrl5555 2020. 8. 5. 17:13
728x90
반응형

지도 학습의 문제는 '회귀'와 '분류'로 나눌 수 있습니다.


회귀는 입력에 대해 연속적인 값을 대응시키는 문제이며, 분류는 입력에 대해 순서가 없는 클래스(라벨)를 대응시키는 문제입니다.


chapter 5에서는 회귀문제


chapter 6에서는 분류문제를 설명합니다.



1차원 입력 직선 모델


나이 x와 키 t가 세트로 된 데이터를 생각합니다.


당신은 16인분의 데이터를 가지고 있습니다. 


이를 묶어 다음과 같이 세로벡터로 나타냅니다.


            


N은 인원수를 나타내며 N = 16입니다.


x_n을 '입력 변수', t_n를 '목표 대상'이라고 합니다.


n은 각 개인을 나타내는 데이터의 인덱스입니다.


모든 데이터를 정리한 x를 '입력 데이터', t를 '목표 데이터'라고 부르기도 합니다.


목적은 데이터베이스에 없는 사람의 나이에 대해 그 사람의 키 t를 예측하는 것입니다.


나이와 몸무게의 인공 데이터를 만듭니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 리스트 5-1-(1)
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
 
 
# 데이터 생성 --------------------------------
np.random.seed(seed=1# 난수를 고정
X_min = 4 # X의 하한(표시 용)
X_max = 30 # X의 상한(표시 용)
X_n = 16 # X의 상한(표시 용)
= 5 + 25 * np.random.rand(X_n)
Prm_c = [1701080.2# 생성 매개 변수
= Prm_c[0- Prm_c[1* np.exp(-Prm_c[2* X) \
+ 4 * np.random.randn(X_n) # (A)
np.savez('ch5_data.npz', X=X, X_min=X_min, X_max=X_max, X_n=X_n, T=T) # (B)
cs

리스트 5-1에서 16명의 나이 x를 임의로 결정하고,


(A)에 의해 X에서 T를 결정하고 있습니다.


끝에서 두 번째 행의 마지막에 있는 '\'는 한 줄을 내릴 때 사용하는 기호입니다.


(B)에서는 생성한 데이터를 'ch5_data.npz'에 저장합니다.






print(X)를 하면 값들을 볼 수 있습니다.




소수점 이하의 표시가 너무 길다면 반올림하는 np.round함수를 사용해 깔끔하게 표시할 수 있습니다.

마찬가지로 T의 내용도 볼 수 있습니다.



X와 T를 그래프로 표시합니다.

1
2
3
4
5
6
7
8
#리스트 5-1-(5)
#데이터 그래프 ------------------
plt.figure(figsize=(44))
plt.plot(X, T, marker='o', linestyle='None',
markeredgecolor='black', color='cornflowerblue')
plt.xlim(X_min, X_max)
plt.grid(True)
plt.show()
cs

위의 그래프를 보면 데이터가 고르지 않기 때문에, 새로운 나이 데이터에 키를 정확히 맞추기는 불가능하다는 것을 금방 알 수 있습니다.


그러나 어느 정도 오차를 허용한다면 주어진 데이터에서 직선을 긋는 것으로, 그럴듯하게 예측할 수 있습니다.


직선의 방정식은 다음과 같이 나타낼 수 있습니다.


(식 5-2)


기울기를 나타내는 w_0과 절편을 나타내는 w_1에 적당한 값을 넣으면, 다양한 위치와 기울기의 직선을 만들 수 있습니다.


이 수식은 입력 x에 y(x)를 출력하는 함수로 볼 수 있으므로, y(x)는 x에 대한 t의 예측치로 간주할 수 있습니다\.


위의 식을 직선 모델로 부르기로 하며, 직선이 데이터에 부합하려면 w_0과 w_1을 어떻게 정할까요?




제곱 오차 함수


'데이터에 부합하도록' 오차 J를 정의합니다.


(식 5-3)

여기서 y_n은 직선 모델에 x_n을 넣었을 때의 출력을 나타냅니다.

(식 5-4)


[식 5-3]의 J는 평균 제곱 오차로 직선과 데이터 점의 차이 제곱의 평균입니다.


교과서에 따라서는 N으로 나누지 않는 제곱 합계 오차를 사용하지만,


어느 경우이든 도출되는 결론은 동일합니다.


이 책에서는 오차의 크기가 N에 의존하지 않는 평균 제곱 오차를 사용하여 진행하겠습니다.




728x90
반응형

'Python > 머신러닝 그리고 AI' 카테고리의 다른 글

DALL-E 체험기  (4) 2022.08.01
Chapter 4 머신러닝에 필요한 수학의 기본  (0) 2020.07.22
Chapter3 그래프그리기  (0) 2020.07.21
Chapter2 파이썬 기초  (0) 2020.07.21
Comments