이번년도에 스마트해상물류 공모전을 참가하면서 스파르타코딩클럽 수강권 1장을 받게되어, 평소에 궁금하던 머신러닝을 수강하게 되었습니다.
대학생분들은 한이음 혹은 스마트해상물류 프로젝트를 진행하는거 추천드려요
(수많은 기프티콘, 프로젝트기회, 멘토들의 조언, 수강권 등 많은 혜택이 있습니다.)
머신러닝 2주차 과제를 위해서 티스토리에 글을 쓰게 되었습니다 !
2주차 과제는 혼자서 Binary Logical Regression을 구현하는 문제입니다.
먼저 과제를 하기전에 저 처럼 머신러닝에 처음 접하신 분들도 있으실텐데요
TensorFlow라는 것은 들어봤어도 Colab은 이번에 처음 들어봤는데요
구글에서 Colab을 통해 python을 작성할 수 있습니다.
기존 데스크탑이나 노트북을 사용하면서 python을 이용하는데에 라이브러리파일하고 깔기 정말 귀찮았는데,
그 단점을 완벽하게 보완해준 tool입니다 !
Binary Logical Regression이 등장한 이유는 기존에 Linear Regression이 true, false인 bool변수로 그래프나 그림으로 나타낼 경우에는 이해하기힘든 모습을 볼 수 있습니다. 그래서 이 점을 보완하기위해 등장했습니다.
kaggle에서 데이터셋을 받아야하므로
import os
os.environ['KAGGLE_USERNAME'] = 'junhyeongrhee' # username
os.environ['KAGGLE_KEY'] = '11ddf21c53c4abd5bdadfd7d56a7891d' # key
을 입력하고 실행 후,
!kaggle datasets download -d kandij/diabetes-dataset
!unzip diabetes-dataset.zip
으로 당뇨병 데이터셋 zip을 다운로드 받은 후, 압축해제를 합니다.
해제를 하면, 이러한 csv파일을 볼 수 있습니다.(csv파일은 콤마로 구별하는 파일입니다.)
그리고 라이브러리를 넣을건데
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
from sklearn.preprocessing import StandardScaler
지난 Linear Regression과 다르고 sklearn.preprocessing이라하는 전처리기가 들어간것을 확인할 수 있습니다.
df = pd.read_csv('diabetes2.csv')
df.head(5)
이 코드를 통해 당뇨병 csv파일에 맨위 5가지를 볼 수 있습니다.
이제 그래프를 통해서 확인 및 학습을 시키기 위해
x축과 y축 그리고 x축 데이터의 규모를 정해줍니다.
x_data = df.drop(columns=['Outcome'], axis=1)
x_data = x_data.astype(np.float32)
x_data.head(5)
y_data = df[['Outcome']]
y_data = y_data.astype(np.float32)
y_data.head(5)
scaler = StandardScaler()
x_data_scaled = scaler.fit_transform(x_data)
print(x_data.values[0])
print(x_data_scaled[0])
x_train, x_val, y_train, y_val = train_test_split(x_data_scaled, 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, activation='sigmoid')
])
model.compile(loss='binary_crossentropy', optimizer=Adam(lr=0.01), metrics=['acc'])
model.fit(
x_train,
y_train,
validation_data=(x_val, y_val), # 검증 데이터를 넣어주면 한 epoch이 끝날때마다 자동으로 검증
epochs=20 # epochs 복수형으로 쓰기!
)
model은 기존에 썼던것처럼 Sequential을 사용하는 대신에, Dense에서 1과 activation이 sigmoid인것을 볼 수 있습니다.
이것은 Binary Logical Regression이기때문에 이렇게 설정했습니다.
loss의 형태도 binary형태인 엔트로피를 사용합니다 binary_crossentropy
learning rate는 0.01로 하고, metrics는 정확도를 봐야하므로 'acc'를 사용합니다.
그리고 20회를 학습 시도하기때문에 epochs=20을 합니다.
학습하고 나니 lr이 더 이상 사용하지 않는거라고 하지만 인식은 하네요
다음부터는 lr 대신에 learning_rate라고 써주는 버릇을 키워야겠습니다.
2주차 과제는 여기서 끝나고, 담주차는 딥러닝 맛보기로 돌아오겠습니다 !
CUDA가 아닌 MPS로 MNIST학습 (0) | 2022.06.23 |
---|---|
CNN으로 풍경 사진을 분류 (0) | 2021.08.05 |
딥러닝으로 손글씨 실습 (0) | 2021.07.20 |
Linear Regression 구현 (0) | 2021.07.15 |
댓글 영역