코딩 개발일지

머신러닝 기초 - 선형회귀, original set, 간단한 용어 설명 본문

AI 본 교육/AI 10주차

머신러닝 기초 - 선형회귀, original set, 간단한 용어 설명

호기호 2023. 10. 17. 11:42

선형회귀

선형(linear)이란 말을 생각해보자.

그래프에서 직선을 긋고 그 직선을 토대로 x값에 대응하는 y값을 예측하는것을 선형회귀라고함.

 

우리는 정확하게 예측하기 위해 우리가 만든 임의의 직선(가설)과 점(정답)의 거리가 가까워지도록 해야한다.

( = mean squared error)

그 거리가 최소화될수록 잘 학습되었다. 라고 말할 수 있는 것이다.

 

입력변수가 여러개면 다중선형회귀라고 하고, 원리는 똑같다.

실무에서도 직선이 아닌 매우 고차원의 그래프를 그리게 되지만, 결국 원리는 전부 1차함수에서 비롯된다.

왜냐하면, 고차원도 결국 직선의 연속을 합쳐서 만든 것이기 때문이다. 접선을 생각하면 이해하기 쉬울듯?


따라서 간단한 선형 회귀 문제의 경우는 그래프를 그릴 수는 있지만 실무에서 복잡한 가설을 세울 경우에는 사람이 그릴 수도 없고 상상할 수 없는 형태가 된다.

예를 들어 간단하게 아래와 같은 그래프를 상상해보자.

우리의 목표는 이 손실 함수의 최소점인 Global cost minimum을 찾는 것이다.

그런데 우리는 한 칸씩 움직이며 데이터를 쌓아나가기 때문에, Local cost minimum에 빠질 가능성이 아주 높다.

 

Cost가 높다는 뜻은 우리가 만든 모델의 정확도가 낮다는 말이다.

따라서 우리는 최대한 Global minimum을 찾기 위해 좋은 가설과 좋은 손실 함수를 만들어서 기계가 잘 학습할 수 있도록 만들어야하고 그것이 바로 머신러닝 엔지니어의 핵심 역할이다!!!


1. Training set (학습 데이터셋) = 교과서
머신러닝 모델을 학습시키는 용도.

전체 데이터셋의 약 80% 정도
    
2. Validation set (검증 데이터셋) = 모의고사
머신러닝 모델의 성능을 검증하고 튜닝하는 지표의 용도.    
손실 함수, Optimizer 등을 바꾸면서 모델을 검증하는 용도로 사용.
전체 데이터셋의 약 20% 정도
    
3. Test set (평가 데이터셋) = 수능
정답 라벨이 없는 실제 환경에서의 평가 데이터셋


실전에서는 tensorflow를 쓰고, 그 안에 keras를 쓴다.

numpy를 import 해줘야한다. keras는 numpy array를 입력 받아야하기 때문이다.

Sequential (순차적인)을 써서 순차적으로 모델을 쌓아준다는 의미이다.

compile (그리다, 구성하다)로 모델을 구성해준다.

learning rate (lr) 설정은 아래에서는 0.1 step씩 간다는 것을 의마한다.

데이터 넣어줄땐 fit 을 사용해야한다. 가설에 정답값을 맞춘다는 의미

epoch (시대, = era) 은 반복학습하는 횟수를 의미하고, 복수형으로 epochs 로 써줘야한다.

import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers.legacy 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(learning_rate=0.1))

model.fit(x_data, y_data, epochs=100) # epochs 복수형으로 쓰기!

이외에도 pandas 를 import 해야 csv 파일을 읽을 수 있다.

matplotlib 로 그래프 읽어줄 수 있다.

seaborn 으로 그래프를 그릴 수 있다.

train_test_split 으로 training set 과 validation set 을 나눠줄 수 있다.

StandardScaler 으로 전처리를 할 수 있다.

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

그리고 tensorflow.keras 에서는 데이터값을 32비트의 소수점을 만들어줘야 사용할 수 있다.\

np.float32 사용

y_data = y_data.astype(np.float32)