๐ ์ค๋์ ํญํด: ๋จธ์ ๋ฌ๋์ ๋ฐ๋ค๋ก ๋ ๋๋ค
์ค๋์ ์ธ๊ณต์ง๋ฅ ์์ง๋์ด์ ๊ธธ์ ๊ฑท๊ธฐ ์ํด ๊ฐ์ฅ ๋จผ์ ๋ง๋์ผ ํ ๋ ๊ฑฐ์ธ, ํต๊ณ์ ๋จธ์ ๋ฌ๋์ ๋ง๋ฌ๋ค. ๋จ์ํ ๋์ผ๋ก๋ง ์ฝ๋ ๊ณต๋ถ๊ฐ ์๋๋ผ, ํ์ด์ฌ ์ฝ๋๋ก ์ง์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๋ฌด๋ฅด๊ณ , ํต๊ณ์ ์๋ฆฌ๋ฅผ ํํค์น๋ฉฐ ๋ฅ๋ฌ๋์ ๊ฐ์ฅ ์์ ๋จ์์ธ ํผ์ ํธ๋ก ๊น์ง ์ง์ ๋ง๋ค์ด๋ณด๋ ๊ฒฝํ์ ํ๋ค. ๐
โ๋ฐ์ดํฐ๋ฅผ ์ดํดํ์ง ๋ชปํ๋ฉด, ๋ชจ๋ธ์ ๊ทธ์ ํ์์ผ ๋ฟ์ด๋ค.โ
๋ชจ๋ธ์ ๋ง๋๋ ๊ฒ์ ์ด์ฉ๋ฉด ์ฌ์ธ์ง๋ ๋ชจ๋ฅธ๋ค. ํ์ง๋ง ๊ทธ ๋ชจ๋ธ์ด ์ ๊ทธ๋ ๊ฒ ์๋ํ๋์ง, ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๋จน๊ณ ์๋๋์ง ์ดํดํ์ง ๋ชปํ๋ค๋ฉด, ์์ ๋ณํ์๋ ์ฝ๊ฒ ๋ฌด๋์ง๋ ๋ชจ๋์ฑ์ ์๋ ๊ฒ๊ณผ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
๐ ๊ธฐ๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค๋น
๋ชจ๋ ์ฝ๋๋ ํ๊ฒฝ์ค์ ๋ถํฐ ์์ํ๋ค! ๋ฐ์ดํฐ ๋ถ์๊ณผ ๋จธ์ ๋ฌ๋์ ํ์ํ ๊ธฐ๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ผ๋ก ํ์ต์ ์์ํ๋ค.
import warnings # ๊ฒฝ๊ณ ๋ฉ์์ง ๋ฌด์
warnings.filterwarnings('ignore')
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# numpy ์ถ๋ ฅ ์ต์
๋ณ๊ฒฝ (์ง์ํ๊ธฐ๋ฒ ๋ฐฉ์ง)
np.set_printoptions(suppress=True)
๐ ๊ธฐ์ ํต๊ณ: ๋ฐ์ดํฐ์ ๋ฏผ๋ฏ ๋ค์ฌ๋ค๋ณด๊ธฐ
์์งํ ๋ฐ์ดํฐ๋ฅผ ์์ฝ, ๋ฌ์ฌ, ์ค๋ช ํ๋ ๊ธฐ์ ํต๊ณ๋ ๋ฐ์ดํฐ์ ์ ๋ฐ์ ์ธ ํน์ง์ ํ์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
1. ์ค์ฌ์ ๋ํ ํต๊ณ (feat. ๋๋ฏธ ๋ฐ์ดํฐ
)
๋ฐ์ดํฐ์ ์ค์ฌ ๊ฒฝํฅ์ ๋ํ๋ด๋ ๊ฐ๋ค์
๋๋ค. ์ค์ ๋๋ฏธ ๋ฐ์ดํฐ๋ฅผ pandas
์ DataFrame์ผ๋ก ๋ง๋ค์ด ๊ฐ์ข
ํต๊ณ๋์ ์ง์ ๊ตฌํด๋ณด์๋ค.
- ๋ฐ์ดํฐ ์ค๋น
# ๋๋ฏธ ๋ฐ์ดํฐ (๊ธธ์ด, ๋ฌด๊ฒ)
bream_length = [25.4, 26.3, 26.5, 29.0, 29.0, 29.7, 29.7, 30.0, 30.0, 30.7, 31.0, 31.0, 31.5, 32.0, 32.0, 32.0, 33.0, 33.0, 33.5, 33.5, 34.0, 34.0, 34.5, 35.0, 35.0, 35.0, 35.0, 36.0, 36.0, 37.0, 38.5, 38.5, 39.5, 41.0, 41.0]
bream_weight = [242.0, 290.0, 340.0, 363.0, 430.0, 450.0, 500.0, 390.0, 450.0, 500.0, 475.0, 500.0, 500.0, 340.0, 600.0, 600.0, 700.0, 700.0, 610.0, 650.0, 575.0, 685.0, 620.0, 680.0, 700.0, 725.0, 720.0, 714.0, 850.0, 1000.0, 920.0, 955.0, 925.0, 975.0, 950.0]
df = pd.DataFrame(zip(bream_length, bream_weight), columns=['length', 'weight'])
- ํ๊ท , ์ค์๊ฐ, ์ต๋น๊ฐ ๊ณ์ฐ
describe()
ํจ์๋ก ๊ธฐ๋ณธ์ ์ธ ํต๊ณ๋์ ํ ๋ฒ์ ํ์ธํ๊ณ , value_counts()
๋ก ์ต๋น๊ฐ์ ๊ตฌํ๋ค.
# ๊ธฐ๋ณธ ํต๊ณ๋ (ํ๊ท -mean, ์ค์๊ฐ-50%)
df.describe()
# ์ต๋น๊ฐ (๊ฐ์ฅ ๋ง์ด ๋ฑ์ฅํ๋ ๊ฐ)
df.length.value_counts().head(1)
๊ตฌ๋ถ | ์ค๋ช |
---|---|
ํ๊ท (Mean) | ๋ชจ๋ ๊ฐ์ ๋ํด ๊ฐ์๋ก ๋๋ ๊ฐ. describe() ์ mean ์ ํด๋น |
์ค์๊ฐ (Median) | ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌํ์ ๋ ์ค์์ ์์นํ๋ ๊ฐ. describe() ์ 50% ์ ํด๋น |
์ต๋น๊ฐ (Mode) | ๊ฐ์ฅ ์์ฃผ ๋ํ๋๋ ๊ฐ. value_counts() ๋ก ํ์ธ ๊ฐ๋ฅ |
2. ์ฐํฌ์ ๋ํ ํต๊ณ
๋ฐ์ดํฐ๊ฐ ์ค์ฌ์ผ๋ก๋ถํฐ ์ผ๋ง๋ ํฉ์ด์ ธ ์๋์ง๋ฅผ ๋ํ๋ธ๋ค.
- ๋ถ์ฐ๊ณผ ํ์คํธ์ฐจ ๊ณ์ฐ
# 1. ํธ์ฐจ (Deviation)
mean_ = df.length.mean()
deviation = df.length - mean_
# 2. ๋ณ๋ (Variation) - ํธ์ฐจ์ ์ ๊ณฑํฉ
variation = deviation**2
# 3. ๋ถ์ฐ (Variance)
variance = sum(variation) / len(variation)
# 4. ํ์คํธ์ฐจ (Standard Deviation)
std = np.sqrt(variance)
3. ์ ๊ทํ์ ํ์คํ
๋ฐ์ดํฐ์ ๋จ์๋ฅผ ๋ง์ถฐ์ฃผ์ด(์ค์ผ์ผ๋ง) ๋ชจ๋ธ์ด ๋ ์ ํ์ตํ ์ ์๋๋ก ๋๋๋ค.
- ํ์คํ (Standardization, Z-score)
๋ฐ์ดํฐ์์ ํ๊ท ์ ๋นผ๊ณ ํ์คํธ์ฐจ๋ก ๋๋์ด, ํ๊ท 0, ํ์คํธ์ฐจ 1์ธ ๋ถํฌ๋ก ๋ณํ
# ๋๋ฏธ ๊ธธ์ด(length)๋ฅผ ํ์คํ
z_length = (df.length - df.length.mean()) / np.std(df.length)
# ๋๋ฏธ ๋ฌด๊ฒ(weight)๋ฅผ ํ์คํ
z_weight = (df.weight - df.weight.mean()) / np.std(df.weight)
# ํ์คํ๋ ๋ฐ์ดํฐ ํ์ธ
new_df = pd.DataFrame(zip(z_length, z_weight), columns=['length_z', 'weight_z'])
new_df.describe()
๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด
mean
์ 0์ ๊ฐ๊น๊ณ ,std
๋ 1์ ๊ฐ๊น์ด ๊ฐ์ผ๋ก ๋ณํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ๐
๋ฅ๋ฌ๋: ํผ์
ํธ๋ก ์ผ๋ก ๋ง๋ณด๊ธฐ
๋ฅ๋ฌ๋์ ๊ธฐ๋ณธ ๋จ์์ธ ๋ด๋ฐ(ํผ์ ํธ๋ก )์ด ์ด๋ป๊ฒ ํ์ตํ๋์ง ๊ฐ๋จํ ์ฝ๋๋ก ๊ตฌํํด๋ณด์๋ค.
- ํผ์ ํธ๋ก ํ์ต ๊ณผ์
x=1
์ด ์
๋ ฅ๋๋ฉด y=0
์ ์ถ๋ ฅํ๋ ์์ฃผ ๊ฐ๋จํ ๋ด๋ฐ
# y = wx + b
w = np.random.uniform(0, 1) # ๊ฐ์ค์น(w)๋ ๋๋ค ๊ฐ์ผ๋ก ์์
x = 1
y = 0
eta = 0.1 # ํ์ต๋ฅ (learning rate)
for i in range(10): # 10๋ฒ ๋ฐ๋ณต ํ์ต
output = w * x # ์์ธก๊ฐ ๊ณ์ฐ
error = y - output # ์ค์ ๊ฐ๊ณผ ์์ธก๊ฐ์ ์ฐจ์ด(์ค์ฐจ) ๊ณ์ฐ
# ๊ฒฝ์ฌ ํ๊ฐ๋ฒ: ์ค์ฐจ์ ๋ฐ๋ ๋ฐฉํฅ์ผ๋ก ๊ฐ์ค์น๋ฅผ ์
๋ฐ์ดํธ
w = w + (x * error) * eta
print(f"{i+1}ํ์ฐจ ๊ฐ์ค์น: {w:.4f}, ์ค์ฐจ: {error:.4f}")
print(f"\n์ต์ข
์์ธก๊ฐ: {w*x:.4f}")
ํ์ต์ด ๋ฐ๋ณต๋ ์๋ก ๊ฐ์ค์น(w)๊ฐ ์ ์ฐจ ๊ฐฑ์ ๋๋ฉด์ ์ค์ฐจ(error)๊ฐ 0์ ๊ฐ๊น์์ง๊ณ , ์ต์ข
์์ธก๊ฐ์ด ๋ชฉํ์ธ 0์ ์๋ ดํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
โจ ์ค๋์ ํ๊ณ
์ค๋ ํ์ต์ ํตํด ๋ฐ์ดํฐ์ ๋ชจ๋ธ์ ๊ด๊ณ๋ฅผ ์ด๋ ดํ์ด๋๋ง ์ดํดํ ์ ์์๋ค. ํนํ ๊ฐ๋จํ ํผ์
ํธ๋ก ์ฝ๋๋ฅผ ํตํด, ๋ณต์กํ๊ฒ๋ง ๋๊ปด์ก๋ โํ์ตโ์ด๋ผ๋ ๊ณผ์ ์ด ๊ฒฐ๊ตญ โ์ค์ฐจ๋ฅผ ์ค์ฌ๋๊ฐ๋ ์ฌ์ โ์ด๋ผ๋ ๊ฒ์ ์ฒด๊ฐํ๋ค.
์์ผ๋ก ๋ฐฐ์ธ ๋ ๋ณต์กํ ๋ชจ๋ธ๋ค๋ ๊ฒฐ๊ตญ์ ์ด ๊ธฐ๋ณธ ์๋ฆฌ ์์ ์ ์๋ค๋ ์๊ฐ์ ํ๋, ์ ์ง ๋ชจ๋ฅผ ์์ ๊ฐ์ด ์๊ธด๋ค. ๋ค์์๋ ๋ ๋ค์ํ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ๋ค์ ๋ง๋๊ณ , ์ง์ ๊ตฌํํด๋ณด๋ ์๊ฐ์ ๊ฐ์ง ์์ ์ด๋ค.๐ฅ