일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Linux
- 2021
- 힐링
- 한강
- Python
- 성수대교
- Kubernetes
- 대구
- docker
- 하체
- 뚝섬유원지
- zabbix
- 오답노트
- 유산소
- GitHub
- DSEC
- 소모임
- Podman
- 대전
- 맛집
- 중식
- Run The Bridge
- 달리기
- Shell
- 건대입구역
- Grafana
- 자전거
- 10km
- 러닝
- 정보처리기사
- Today
- Total
Run The Bridge
Chapter5 지도학습: 회귀 본문
지도 학습의 문제는 '회귀'와 '분류'로 나눌 수 있습니다.
회귀는 입력에 대해 연속적인 값을 대응시키는 문제이며, 분류는 입력에 대해 순서가 없는 클래스(라벨)를 대응시키는 문제입니다.
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의 상한(표시 용) X = 5 + 25 * np.random.rand(X_n) Prm_c = [170, 108, 0.2] # 생성 매개 변수 T = 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=(4, 4)) 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에 의존하지 않는 평균 제곱 오차를 사용하여 진행하겠습니다.
'Python > 머신러닝 그리고 AI' 카테고리의 다른 글
DALL-E 체험기 (4) | 2022.08.01 |
---|---|
Chapter 4 머신러닝에 필요한 수학의 기본 (0) | 2020.07.22 |
Chapter3 그래프그리기 (0) | 2020.07.21 |
Chapter2 파이썬 기초 (0) | 2020.07.21 |