티스토리 뷰
간단한 예측과 비용함수(cost function)¶
In [1]:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
10명의 수학점수 분포¶
In [2]:
data = np.random.randint(0,11,size=10)
print('점수 :', data)
print('분포 :', np.bincount(data))
In [7]:
data.mean()
Out[7]:
In [4]:
plt.plot(data, 'bo-')
plt.ylabel('score')
plt.xlabel('student #')
Out[4]:
In [6]:
plt.hist(data,bins=range(11))
plt.xlabel('score')
plt.ylabel('count')
Out[6]:
평균 예측 모델¶
- 가장 간단한 예측 모델을 만들어 보자.
- 즉, 평균값으로 예측한다.
In [8]:
model = data.mean()
model
Out[8]:
In [10]:
plt.plot(data, 'bo-')
plt.hlines([model], 0, 10, linestyles='dotted', colors='green')
plt.xlabel('student #')
plt.ylabel('score')
Out[10]:
비용함수 (cost function)¶
- 비용함수는 예측한 값과 실제 값과의 차이를 수치화하는 방법(함수)이다.
- 위의 결과에서 예측값인 평균값과 실제 데이터의 값들과의 차이로 계산하는 방법을 생각해 보자.
In [8]:
# 차이의 절대값 평균
cost_abs = np.abs(data - model).sum() / len(data)
cost_abs
Out[8]:
In [9]:
# 차이의 제곱 평균 (MSE)
cost_mse = np.power(data-model, 2).sum() / len(data)
cost_mse
Out[9]:
In [10]:
# 차이의 제곱 평균의 제곱근 (RMSE)
cost_rmse = np.sqrt(cost_mse)
cost_rmse
Out[10]:
- 예측모델과 비용함수를 정의하면 최적의 예측방법을 알아낼 수 있다.
- 즉, 비용함수를 최소화하는 예측값을 찾아내면 된다.
- 먼저 상수값 b 로 예측하는 모델을 만들자.
- 그리고 비용함수로 costmse 를 사용하자. $$ cost = \sum{i=0}^{N-1} (x_i - b)^2 / N $$ $$ = b^2 -(\frac {2}{N} \sum x_i)b + \frac {1}{N}(\sum x_i^2)) $$ $$ \hat{b} = \frac{1}{N} \sum x_i $$
- 결과적으로, 최적의 예측값은 평균값임을 알 수 있다.
머신러닝의 일반적인 기호법¶
- 예측을 위해 사용되는 입력 데이터를 X 로 표기한다.
- 예측의 결과 값을 y 로 표기한다.
- 예측모델의 예측값을 $ \hat{y} $ (코드에서는 pred_y) 로 표기한다.
In [11]:
X = np.array(range(11)).reshape(-1,1) # 반드시 2차원 행렬 형태
y = data
pred_y = y.mean()
display(X, y, pred_y)
'beginner > 파이썬 머신러닝 기초' 카테고리의 다른 글
지도학습 - k-NN분류 (0) | 2019.02.25 |
---|---|
지도학습개요 (0) | 2019.02.25 |
머신러닝 기초 _ 거리 (0) | 2019.02.22 |
머신러닝 기초_iris활용 (0) | 2019.02.22 |
머신러닝과 파이썬 (0) | 2019.02.21 |