어떠한 문제를 해결하기 위해 정해진 일련의 절차나 방법을 공식화한 형태로 표현한 것이나 계산을 실행하기 위한 단계적 절차를 말한다.
ex) 시험 전 날 커피를 몇 잔 마시면, 다음 날 시험에서 몇 점을 받을 수 있을까?
Score = 10*Coffee+40
ex) 오늘 온도와 습도 데이터를 이용해 내일 미세먼지 농도를 예측할 수 있을까?
--> 예측 어려움
--> 머신러닝의 출현
머신러닝에서 문제를 풀 때, 해답을 내는 방법은 회귀와 분류로 나눠진다.
사람의 얼굴 사진을 보고 몇 살인지 맞추는 문제를 푼다 하자.
이때 입력값은 [얼굴사진]이 되고, 출력값은 [예측한 나이]가 된다.
위의 나이와 같이 연속적인 출력값으로 예측하여 문제를 푸는 방법을 회귀라고 한다.
대학교 시험 전 날 공부한 시간을 가지고 해당 과목의 이수 여부를 예측하는 문제를 푼다 하자.
이때 입력값은 [공부한 시간]이 되고, 출력값은 [이수 여부]가 된다.
이수 여부는 0,1이라는 이진 클래스 로 나눌 수 있고,
이와 같은 분류 방법을 이진 분류라고 한다.
여기서 출력값을 [이수 여부]가 아닌 [성적(A,B,C,D,F)]으로 바꾼다면 클래스는 5개가 나오게 될것이다. 이러한 분류 방법을 다중 분류라고 한다.
회귀에서 풀었던 나이 문제에서 나이를 범위로 쪼개어 생각하기
위와 같이 나이 범위를 클래스로 나누어 생각하면 회귀 문제가 다중 분류 문제로 바뀌게 된다.정답을 알려주면서 학습시키는 방법
기계에게 입력값과 출력값을 전부 보여주며 학습
정답이 없으면 불가능한 학습 방법
실무에서는 입력값에 해당하는 데이터는 있어도 출력값에 해당하는 데이터가 없는 경우가 많아 입력값에 정답을 하나씩 입력해주는 작업을 수행
--> 이를 라벨링(Labeling) 또는 어노테이션(Annotation)이라고 한다.
정답을 알려주지 않고 군집화(Clustering)하는 방법
그룹핑 알고리즘의 성격
ex) 음원 파일을 분석하여 장르를 팝, 락, 클래식, 댄스로 나누는 문제
군집, 시각화, 연관 규칙 학습 등의 종류가 있음
주어진 데이터없이 실행과 오류를 반복하면서 학습하는 방법
알파고를 탄생시킨 머신러닝 방법
분류할 데이터가 없거나 데이터가 있어도 정답이 없이 자신이 한 행동에 대한 보상을 받으며 학습하는 방법
강화학습의 개념
게임을 예로 들면 게임의 규칙을 따로 입력하지 않고 자신(Agent)이 게임 환경(Environment)에서 현재 상태(State)에서 높은 점수(Reward)를 얻는 방법을 찾아가며 행동(Action)하는 학습 방법으로 특정 학습 횟수를 초과하면 높은 점수(Reward)를 획득할 수 있는 전략이 형성된다.
이때 행동(Action)을 위한 행동 목록(방향키, 버튼)등은 사전에 정의가 필요하다.
시험 전 날 마신 커피 잔 수에 따라 시험 점수를 예측하는 문제를 푼다하자
위의 같은 데이터를 바탕으로 아래와 같은 그래프를 얻을 수 있다.
선형회귀에서 입력 변수가 여러개 인 경우 다중 선형회귀를 사용한다.
손실 함수가 아래와 같은 형태를 가지고 있다고 가정하자.
출처 : https://towardsdatascience.com/using-machine-learning-to-predict-fitbit-sleep-scores-496a7d9ec48
그래프를 따라 아래로 내려갈때 손실함수를 최소화 시킬 수 있다.
이때 컴퓨터는 랜덤으로 한점으로 시작해 좌우로 조금씩 움직이며 이전 값보다 관찰하며 그래프의 최소점에 도달하였을때 학습을 종료함
이때 좌우로 움직이는 단위를 Learning rate라고 하고 위와같은 방법을 경사 하강법이라고 한다.
Learning rate가 지나치게 작다면 시작점으로부터 최소점을 찾는데 많은 시간이 요구된다 --> 학습에 많은 시간이 필요
Learning rate가 지나치게 크다면 최소값을 지나치고 진동하다가 최악의 경우에는 발산할 수도 있다 --> Overshooting
실제 손실 함수는 아래와 같이 사람이 그릴 수도, 상상할 수도 없는 형태가 된다.
출처: https://regenerativetoday.com/logistic-regression-with-python-and-scikit-learn/
우리의 목표는 Global cost minimum을 찾는 것
Learning rate를 잘못 설정할 경우 Local cost minimum에 빠져 학습을 종료
이는 모델의 낮은 정확도로 이어짐
따라서 Global minimum을 찾기 위한 좋은 가설과 좋은 손실 함수가 필요
출처 : https://3months.tistory.com/118
Training set = 교과서
머신러닝 모델을 학습시키는 용도로, 전체 데이터셋의 80% 차지
Validation set = 모의고사
머신러닝 모델의 성능을 검증, 튜닝하는 지표
모델에게 직접 데이터를 보여주진 않기에 모델의 성능에는 영향 X
Test set = 수능
정답 라벨이 없는 실제 환경에서의 평가 데이터셋
import tensorflow as tf
tf.compat.v1.disable_eager_execution()
x_data = [[1,1], [2,2], [3,3]]
y_data = [[10], [20], [30]]
X = tf.compat.v1.placeholder(tf.float32, shape[None,2])
Y = tf.compat.v1.placeholder(tf.float32, shape[None,1])
W = tf.Variable(tf.random.normal(shape=(2,1)), name='W')
b = tf.Variable(tf.random.normal(shape=(1,)), name='b')
hypothesis = tf.matmul(X,W) + b
cost = tf.reduce_mean(tf.square(hypothesis - Y))
optimizer = tf.compat.v1.train.GradientDescentOptimizer(learning_rate=0.01).minimize(cost)
with tf.compat.v1.Session() as sess:
sessrun(tf.compat.v1.global_variables_initializer())
for step in range(50):
c, W_, b_, _ = sess.run([cost, W, b, optimizer], feed_dict={X: x_data, Y: y_data})
print('Step: %2d\t loss: %.2f\t' % (step,, c))
print(sess.run(hypothesis, feed_dict={X: [[4, 4]]})
import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import Adam, SGD
x_data = np.array([1], [2], [3])
y_data = np.array([[10], [20], [30]])
model = Sequential([
Dense(1)
])
model.compile(loss='mean_squared_error', optimizer = SGD(lr=0.1)
model.fit(x_data, y_data, epochs=100)
y_pred = model.predict([[4]])
print(y_pred)
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import Adam, SGD
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
df = pd.read_csv('advertising.csv')
df.head(5)
print(df.shape)
sns.pairplot(df, x_vars=['TV', 'Newspaper', 'Radio'], y_vars=['Sales'], height=4)
x_data = np.array(df[['TV']], dtype=np.float32)
y_data = np.array(df['Sales'], dtype=np.float32)
print(x_data.shape)
print(y_data.shape)
x_data = x_data.reshape((-1, 1))
y_data = y_data.reshape((-1, 1))
print(x_data.shape)
print(y_data.shape)
x_train, x_val, y_train, y_val = train_test_split(x_data, y_data, test_size=0.2, random_state=2021)
print(x_train.shape, x_val.shape)
print(y_train.shape, y_val.shape)
model = Sequential([
Dense(1)
])
model.compile(loss='mean_squared_error', optimizer=Adam(lr=0.1))
model.fit(
x_train,
y_train,
validation_data=(x_val, y_val), # 검증 데이터를 넣어주면 한 epoch이 끝날때마다 자동으로 검증
epochs=100 # epochs 복수형으로 쓰기!
)
y_pred = model.predict(x_val)
plt.scatter(x_val, y_val)
plt.scatter(x_val, y_pred, color='r')
plt.show()
```python
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import Adam, SGD
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
df = pd.read_csv('advertising.csv')
x_data = np.array(df[['TV', 'Newspaper', 'Radio']], dtype=np.float32)
y_data = np.array(df['Sales'], dtype=np.float32)
x_data = x_data.reshape((-1, 3))
y_data = y_data.reshape((-1, 1))
print(x_data.shape)
print(y_data.shape)
x_train, x_val, y_train, y_val = train_test_split(x_data, y_data, test_size=0.2, random_state=2021)
print(x_train.shape, x_val.shape)
print(y_train.shape, y_val.shape)
model = Sequential([
Dense(1)
])
model.compile(loss='mean_squared_error', optimizer=Adam(lr=0.1))
model.fit(
x_train,
y_train,
validation_data=(x_val, y_val), # 검증 데이터를 넣어주면 한 epoch이 끝날때마다 자동으로 검증
epochs=100 # epochs 복수형으로 쓰기!
)