TIL_220513_๋จธ์ ๋ฌ๋ ํ๋ก์ ํธ ๊ธฐ์ด
2์ฃผ์ฐจ ๋จธ์ ๋ฌ๋..
์ด๋ฏธ ๋งค์์ ํ๊ฐ ์ผ์ผํ๋ฐ..
์ ์ ํต๊ฐ์ด ์์ง๋ ๊ธฐ๋ถ์ด๋๊น..
์ฐ๋จนํ๋ ค๋ค ํฌ๊ฒ ํผ๋๋ ์ค์ด๋ค.
์ดํด์ ๋ฒ์ฃผ์ ๊ณ์ ํ ๊ฒจ์ ธ ๋๊ฐ๋ฒ๋ฆฌ๋..
๋ ์๊ฐ๋ ๋ฉํ ์ก๋ ์ค..
์ค๋๋ ํ์ดํ !!!
Logistic regression (๋ก์ง์คํฑ ํ๊ท)
- ๊ฐ๋ฅ์ฑ์ด ๋ ๋์ ๋ฒ์ฃผ๋ก ๋ถ๋ฅํ๋ ์๊ณ ๋ฆฌ์ฆ
- ์ข ์ ๋ณ์์ ๋ ๋ฆฝ ๋ณ์ ๊ฐ์ ๊ด๊ณ๋ฅผ ๊ตฌ์ฒด์ ์ผ๋ก ๋ํ๋ธ๋ค.
- ์ ํ ํ๊ท์ฒ๋ผ ์ฐ์๋ ๊ฐ์ ์์ธกํ๋ ๊ฒ์ด ์๋๋ผ ์ข ์๋ณ์๊ฐ ๋ฒ์ฃผํ ๋ฐ์ดํฐ์ผ ๋ ์ฌ์ฉํ๋ค.
- ํ๊ท๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒ์ฃผ์ ์ํ ํ๋ฅ ์ ์์ธกํ๋ค.
- ๋ ๋ฆฝ ๋ณ์ : ๋ ๋ฆฝ ๋ณ์๋ ์ ๋ ฅ๊ฐ์ด๋ ์์ธ
- ์ข ์ ๋ณ์ : ์ข ์ ๋ณ์๋ ๊ฒฐ๊ณผ๋ฌผ์ด๋ ํจ๊ณผ
- ๋ฒ์ฃผํ ๋ฐ์ดํฐ : 0 ๋๋ 1์ฒ๋ผ ์ด์ง์ผ๋ก ๋ํ๋ ์๋ ๋ฐ์ดํฐ
- ์ดํญ ๋ก์ง์คํฑ ํ๊ท : ์ข ์ ๋ณ์๊ฐ 2๊ฐ์ธ binary ํํ์ผ ๋ EX) ๋ ์จ(hot, cold)
- ๋คํญ ๋ก์ง์คํฑ ํ๊ท : ์ข ์ ๋ณ์๊ฐ 3๊ฐ ์ด์ multi ํํ์ผ ๋ EX) ๋ ์จ(rainy, sunny, cloudly)
์์) ๊ณต๋ถํ ์๊ฐ์ ๋ํ ํด๋น ๊ณผ๋ชฉ์ ์ด์ ์ฌ๋ถ ์์ธก
์ด์ง๋ถ๋ฅ
- ๋ฌธ์ )
- ์ง์ ์ผ๋ก ๊ทธ๋ ค์ก๊ธฐ ๋๋ฌธ์ 2์๊ฐ ์ด์ ๊ณต๋ถํ์ง ์์ผ๋ฉด ํฉ๊ฒฉ ํ๋ฅ ์ด ์์๊ฐ ๋๋ค.
- ์ ํ๋๊ฐ ๋ฎ๋ค.
- ํด๊ฒฐ) ๋ก์ง์คํฑ ํ๊ท๋ฅผ ์ฌ์ฉํ๋ค.
๋จธ์ ๋ฌ๋ : ๋ก์ง์คํฑ ํ๊ท
- ํ๊ท ๋ชจ๋ธ์์ ์ฌ์ฉํ๋ Sigmoid function (์๊ทธ๋ชจ์ด๋ ํจ์)
- S-์ปค๋ธ๋ฅผ ํจ์๋ก ํํํด๋ธ ๊ฒ.
- X์ถ์๋ (์กฐ๊ฑด์ ๋ชจ๋ ๊ณ ๋ คํ์์ ๋์) ์ ์, Y์ถ์ผ๋ก ๊ฒฐ๊ณผ๊ฐ ๋ํ๋ ์๋๋ฐ, ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ์๋ค์ํผ 0๊ณผ 1๋ก๋ง ์ด๋ฃจ์ด์ง ๋ชจ์ต์ ํ์ธ
- ์ฆ, ์ฌ๊ฑด์ด ์ผ์ด๋๊ณ (1) ์ผ์ด๋์ง ์๊ณ (0)๋ฅผ ์์ธกํ๋ ๊ฒ์ด ๋ก์ง์คํฑ ํ๊ท ๋ชจ๋ธ์ ๋ชฉํ
- ์์)
- ํ์ฌ๊ฐ ๋ฐ์ํ์ ๋, ์ฐ์๊ฐ X๋งํผ ๋ถ์กฑํด์ง๋ฉด '์ฌ๋งํ๋ค or ์ฌ๋งํ์ง ์๋๋ค.'
- ๊ตํต์ฌ๊ณ ๊ฐ ๋ฐ์ํ์ ๋, ์ถฉ๊ฒฉ๋์ด X์ผ ๋ '์ค์์ ์ ๋๋ค or ์ ์ง ์๋๋ค.'
- ํ์ดํ๋์์ ์ฌ๊ณ ๊ฐ ๋ฒ์ด์ก์ ๋, X๋ผ๋ ์กฐ๊ฑด์ด ์ฃผ์ด์ง๋ฉด '์ฌ๋งํ๋ค or ์ฌ๋งํ์ง ์๋๋ค.'
Tistory, [์ธ๊ณต์ง๋ฅ][๊ฐ๋ ] ๋ก์ง์คํฑ ํ๊ท(Logistic Regression)๋ ๋ฌด์์ด๋ฉฐ, ์๊ทธ๋ชจ์ด๋(Sigmoid) ํจ์๋ ์ ์ฌ์ฉํ๋ ๊ฒ์ผ๊น?, https://itstory1592.tistory.com/8 , (2022.05.13)
๋จํญ ๋ ผ๋ฆฌ ํ๊ท :
- Sigmoid ๋ฅผ ์ฌ์ฉํด 0 ๊ณผ 1๋ก ๋๋๊ณ Crossentropy ๋ฅผ ์ฌ์ฉํด ํ๋ฅ ๋ถํฌ ๊ทธ๋ํ์ ์ฐจ์ด๋ฅผ ๊ณ์ฐํด์ ์ต์ํ ํ๋ค.
๋คํญ ๋ ผ๋ฆฌ ํ๊ท :
- Sigmoid ๋์ Softmax ๋ฅผ ์ฌ์ฉํ๊ณ , ๋๊ฐ์ด Crossentropy ๋ฅผ ์ฌ์ฉํ๋ค. ํ๋ฅ ๋ถํฌ ๊ทธ๋ํ์ ์ฐจ์ด๋ฅผ ๊ณ์ฐํด์ ์ต์ํ ํ๋ค.
Support vector machine (SVM)
- ๊ตฌ๋ถํ๋ ๋ฌธ์ ๋ฅผ ํธ๋ ๊ฒ์ ๋ถ๋ฅ ๋ฌธ์ (Classification problem)
- ๋ถ๋ฅ ๋ฌธ์ ๋ฅผ ํธ๋ ๋ชจ๋ธ์ ๋ถ๋ฅ๊ธฐ(Classifier)
- ๊ทธ๋ํ์ ์ถ์ Feature(ํน์ง)๋ผ๊ณ ๋ถ๋ฅด๊ณ ๊ฐ ๊ณ ์์ด, ๊ฐ์์ง์ ์ฐ๋ฆฌ๊ฐ ๊ทธ๋ฆฐ ๋นจ๊ฐ ๋ฒกํฐ๋ฅผ Support vector, ๋ฒกํฐ์ ๊ฑฐ๋ฆฌ๋ฅผ Margin
- ์ฐ๋ฆฌ๋ Margin์ด ๋์ด์ง๋๋ก ์ด ๋ชจ๋ธ์ ํ์ต์์ผ ํ๋ฅญํ Support vector machine
- ์์ธ ์ํฉ ๋ฐ์
- Feature(ํน์ฑ)์ ๊ฐ์๋ฅผ ๋๋ ค์ ํ์ต์ํค๋ ๊ฒ์ด ์ผ๋ฐ์
๋จธ์ ๋ฌ๋ ๋ชจ๋ธ ๊ฐ๋จ ์๊ฐ
k-Nearest neighbors (KNN)
- ์๋ก ๋ํ๋ฌ์ ๋ ์ผ์ ๊ฑฐ๋ฆฌ์์ ๋ค๋ฅธ ๊ฐ์ฒด๋ค์ ๊ฐ์(k)๋ฅผ ๋ณด๊ณ ์์ ์ ์์น๋ฅผ ๊ฒฐ์ ํ๊ฒํ๋ ์๊ณ ๋ฆฌ์ฆ
Decision tree (์์ฌ๊ฒฐ์ ๋๋ฌด)
- ์ค๋ฌด๊ณ ๊ฐ์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์, ์๋์ค๋ฅผ ๋ฐ๋ณตํ๋ฉฐ ์ถ๋ก ํ๋ ๋ฐฉ์
- ์๊ฐ๋ณด๋ค ์ฑ๋ฅ์ด ์ข์ ๊ฐ๋จํ ๋ฌธ์ ๋ฅผ ํ ๋ ์์ฃผ ์ฌ์ฉ
Random forest
- ์์ฌ๊ฒฐ์ ๋๋ฌด๋ฅผ ์ฌ๋ฌ๊ฐ ํฉ์น ๋ชจ๋ธ
- ๊ฐ๊ฐ์ ์์ฌ๊ฒฐ์ ๋๋ฌด๋ค์ด ๊ฒฐ์ ์ ํ๊ณ ๋ง์ง๋ง์ ํฌํ(Majority voting)์ ํตํด ์ต์ข ๋ต์ ๊ฒฐ์
์ ์ฒ๋ฆฌ(Preprocessing)
- ๋์ ๋ฒ์์ ๋ฐ์ดํฐ ์ ์ ์์ ์ ๋ป.
- ํ์์๋ ๋ฐ์ดํฐ๋ฅผ ์ง์ฐ๊ณ ํ์ํ ๋ฐ์ดํฐ๋ง์ ์ทจํ๋ ๊ฒ.
- null ๊ฐ์ด ์๋ ํ์ ์ญ์ ํ๋ ๊ฒ.
- ์ ๊ทํ(Normalization), ํ์คํ(Standardization) ๋ฑ์ ๋ง์ ์์ ๋ค์ ํฌํจ.
์ ๊ทํ (Normalization)
- ๋ฐ์ดํฐ๋ฅผ 0๊ณผ 1์ฌ์ด์ ๋ฒ์๋ฅผ ๊ฐ์ง๋๋ก ๋ง๋ฌ
- ๊ฐ์ ํน์ฑ์ ๋ฐ์ดํฐ ์ค์์ ๊ฐ์ฅ ์์ ๊ฐ์ 0์ผ๋ก ๋ง๋ค๊ณ , ๊ฐ์ฅ ํฐ ๊ฐ์ 1๋ก ๋ง๋ฌ
ํ์คํ (Standardization)
ํ์คํ๋ ๋ฐ์ดํฐ์ ๋ถํฌ๋ฅผ ์ ๊ท๋ถํฌ๋ก ๋ฐ๊ฟ.
์ฆ ๋ฐ์ดํฐ์ ํ๊ท ์ด 0์ด ๋๋๋กํ๊ณ ํ์คํธ์ฐจ๊ฐ 1์ด ๋๋๋ก ๋ง๋ค์ด์ค.
# ์ผ๋จ ๋ฐ์ดํฐ์ ํ๊ท ์ 0์ผ๋ก ๋ง๋ค์ด์ฃผ๋ฉด ๋ฐ์ดํฐ์ ์ค์ฌ์ด 0์ ๋ง์ถฐ์ง๊ฒ(Zero-centered) ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ์คํธ์ฐจ๋ฅผ 1๋ก ๋ง๋ค์ด ์ฃผ๋ฉด ๋ฐ์ดํฐ๊ฐ ์์๊ฒ ์ ๊ทํ(Normalized) ๋์ฃ . ์ด๋ ๊ฒ ํ์คํ๋ฅผ ์ํค๊ฒ ๋๋ฉด ์ผ๋ฐ์ ์ผ๋ก ํ์ต ์๋(์ต์ ์ ์๋ ด ์๋)๊ฐ ๋น ๋ฅด๊ณ , Local minima์ ๋น ์ง ๊ฐ๋ฅ์ฑ์ด ์ ์ต๋๋ค.
# ๊ฑฐ์ 99% ๋ชจ๋ธ์ด Normalized ์ ์ฌ์ฉ.
2์ฃผ์ฐจ ์์
์ฐ๋ น, ํ์, ์ธ์๋ฆฐ ์์น ๋ฑ์ ํตํด ๋น๋จ๋ณ์ ์ง๋จํด๋ด ์๋ค!
๋ ผ๋ฆฌ ํ๊ท๋ฅผ ์ง์ ๊ตฌํํด๋ณด์.
์ค์ต
1)
import os
os.environ['KAGGLE_USERNAME'] = 'movvvv' # username
os.environ['KAGGLE_KEY'] = '5af4a2875c7c2abf94db7964afa4633b' # key
!kaggle datasets download -d kandij/diabetes-dataset
!unzip diabetes-dataset.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
from sklearn.preprocessing import StandardScaler # StandardScaler ์ ์ฒ๋ฆฌ ๊ณผ์
df = pd.read_csv('diabetes2.csv')
df.head(5)
x_data = df.drop(columns=['Outcome'], axis=1)
x_data = x_data.astype(np.float32)
y_data = df[['Outcome']]
y_data = y_data.astype(np.float32)
scaler = StandardScaler()
x_data_scaled = scaler.fit_transform(x_data)
x_train, x_val, y_train, y_val = train_test_split(x_data_scaled, y_data, test_size=0.2, random_state=2021)
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 ๋ณต์ํ์ผ๋ก ์ฐ๊ธฐ!
)
2) ๋น๋จ๋ณ ์์ธก : ์ฝ 78%
https://colab.research.google.com/drive/1GrDwUsUOzVHmWevSFHkeduEItv4Qw11Z?usp=sharing
2์ฃผ์ฐจ ์์
Colaboratory notebook
colab.research.google.com
3) ํผ๋๋ฐฑ
- x_data = df.drop(columns=['Outcome'], axis=1)
x_data = x_data.astype(np.float32)
y_data = df[['Outcome']]
y_data = y_data.astype(np.float32)
scaler = StandardScaler()
x_data_scaled = scaler.fit_transform(x_data)
์ด ๋ถ๋ถ๋ค์ ๋ํด์ ์ ๋๋ก ์ดํดํ์ง ๋ชปํ๋ค..
๊ผญ ๋ฉ๋ชจํด๋์ด ์ง๋ฌธ ์ฌํญ์ผ๋ก ์ํ๋ ๋ต์ ์ป์.
์ถ์ฒ ์คํ๋ฅดํ์ฝ๋ฉํด๋ฝ