팀 프로젝트가 종료되고 회고와 코드리뷰를 마쳤다. 오늘부턴 바로 머신러닝 쪽 공부가 시작된다. 강의를 들으면서 기초를 다져야 하는 시기이다. 워딩이 중요!
- 머신러닝 : 기계가 앞으로의 예측값을 낼 수 있도록 학습을 시키는 것
- 회귀 (Regression) 와 분류 (Classification)
- Regression : float 값으로 표현하며 연속적인 수치를 예측하도록 푸는 방법 https://brunch.co.kr/@gimmesilver/17
- Classification : label이 붙어있는 output 값으로 각각의 데이터를 분류하기 위해서, Supervised-Learning을 통해서 classifier로 분류하는 과정 https://yjoo0913.tistory.com/12
- 학습 방법
- 지도 학습(Supervised learning): 정답을 알려주면서 학습시키는 방법
- 비지도 학습 (Unsupervised learning): 정답을 알려주지 않고 군집화(Clustering)하는 방법
- 강화 학습(Reinforcement learning): 주어진 데이터없이 실행과 오류를 반복하면서 학습하는 방법
- 선형 회귀 (Linear Regression)
- 직선 = 1차 함수
- H(x) = Wx + b
- 가설(Hypothesis) : 임의의 직선(H(x))
- 손실 함수(Cost(loss) function)
- 목표는 이 손실 함수의 최소점인 Global cost minimum을 찾는 것
- mean squared error
- Cost = {{1/N}sum_{i=1}^{N}{(H(x_i) - y_i) ^ 2}}
- 경사 하강법 (Gradient descent method) : 목표는 손실 함수를 최소화(Optimize)
- Learning rate : 한칸씩 전진하는 단위
- 데이터셋 분할
- Training set (학습) 80%
- Validation set (검증) 20%
- Test set (평가)
# 캐글 키값 설정(환경변수)
import os
os.environ['KAGGLE_USERNAME'] = 'username' # username
os.environ['KAGGLE_KEY'] = 'key' # key
# 캐클 데이터셋 다운로드
!kaggle datasets download -d rsadiq/salary
# 다운로드한 데이터셋 압축풀기
!unzip salary.zip
# 필요한 라이브러리들 임포트
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
# CSV 로딩
df = pd.read_csv('Salary.csv')
# 데이터프레임 형태보기
df.head(5)
sns.pairplot(df, x_vars=['YearsExperience'], y_vars=['Salary'], height=5)
# 데이터셋 가공
x_data = np.array(df['YearsExperience'], dtype=np.float32)
y_data = np.array(df['Salary'], dtype=np.float32)
# 형태 맞추기
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)
# 학습 - loss, optimizer, lr 값 바꿔가며 시도하기
model = Sequential([
Dense(1)
])
model.compile(loss='mean_squared_error', optimizer=SGD(lr=0.01))
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 > Machine Learning' 카테고리의 다른 글
| Til - 24day (0) | 2022.05.19 |
|---|---|
| Til - 23day (0) | 2022.05.17 |
| Til - 22day (0) | 2022.05.16 |
| Wil - 4week (0) | 2022.05.16 |
| Til - 21day (0) | 2022.05.13 |