์๋๋ฆฌ์ค
- ๋ญํค๋ฐฑ ์ด๋ฒคํธ ์ํ
- ๋ญํค๋ฐฑ์ ํฌํจ๋ ์์ ์ ํ๋ฅ ์ ๊ณ ๊ฐ์๊ฒ ์๋ ค์ค
- A ๋ญํค๋ฐฑ์๋ ๋๋ฏธ ํ๋ฅ ์ด ๋์
- ๋ฐ๋ผ์ ๋ญํค๋ฐฑ์ ๋ค์ด์์ ์์ ์ ํ๋ฅ ์ ๊ตฌํด์ผ ๋จ
- ๋ญํค๋ฐฑ์ ๋ค์ด๊ฐ ์ ์๋ ์์ ์ 7๊ฐ
- ๋ญํค๋ฐฑ์ ๋ค์ด๊ฐ ์์ ์ ํฌ๊ธฐ, ๋ฌด๊ฒ, ๊ธธ์ด, ๋์ด, ๋๊ป, ๋๊ฐ์ ํน์ฑ์ด ์ฃผ์ด์ง
1. k-์ต๊ทผ์ ์ด์ ๋ถ๋ฅ๊ธฐ๋ฅผ ์ด์ฉํ ์์ธก
์ด์์ ํด๋์ค ๋น์จ๋ก ์์ธก
์ฆ, ์ํ X ์ฃผ์์ ์ผ๊ฐํ์ด 3๊ฐ, ์ฌ๊ฐํ์ด 5๊ฐ, ์์ด 2๊ฐ๋ผ๋ฉด ์ํX๊ฐ ์ผ๊ฐํ์ผ ํ๋ฅ ์ 30%, ์ฌ๊ฐํ์ผ ํ๋ฅ ์ 50%, ์์ผ ํ๋ฅ ์ 20%์ธ ๊ฒ์ด๋ค.
(1) ๋ฐ์ดํฐ ์ค๋น
unique(๊ณ ์ )ํ ๊ฐ์ธ species๋ฅผ ํ๊น์ผ๋ก ๋ง๋ค๊ณ , ๋๋จธ์ง 5๊ฐ์ ์ด์ ์ ๋ ฅ ๋ฐ์ดํฐ๋ก ํ์ฉํ๋ค.
#๋ฐ์ดํฐ ์ค๋น -> pandas
import pandas as pd
fish = pd.read_csv('Fish_csv_data.csv')
fish.head()
print(pd.unique(fish['Species'])) # ์ด์์ ๊ณ ์ ํ ๊ฐ ์ถ๋ ฅ
#['Bream' 'Roach' 'Whitefish' 'Parkki' 'Perch' 'Pike' 'Smelt']
fish_target = fish['Species'].to_numpy()
print(fish_target)
๋ฐ์ดํฐ ์ฒ๋ฆฌ
from sklearn.model_selection import train_test_split
#ํ๋ จ์ธํธ์ ํ
์คํธ์ธํธ๋ก ๋๋ ์ฃผ๊ธฐ
train_input, test_input, train_target, test_target = train_test_split(fish_input, fish_target, random_state=42)
#ํ์คํ ์ ์ฒ๋ฆฌ
from sklearn.preprocessing import StandardScaler
#์
๋ ฅ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ
ss = StandardScaler()
ss.fit(train_input)
train_scaled = ss.transform(train_input)
test_scaled = ss.transform(test_input)
(2) ์์ธก
ํ๋ จ ์ธํธ์ ํ ์คํธ ์ธํธ์ ํ๊น ๋ฐ์ดํฐ์๋ ๋ชจ๋ 7๊ฐ์ ์์ ์ข ๋ฅ๊ฐ ๋ค์ด๊ฐ ์๋ค.
์ด๋ ๊ฒ ํ๊น ๋ฐ์ดํฐ์ 2๊ฐ ์ด์์ ํด๋์ค๊ฐ ํฌํจ๋ ๋ฌธ์ ๋ฅผ ๋ค์ค ๋ถ๋ฅ๋ผ๊ณ ํ๋ค.
์ด๋ ์ด์ง๋ถ๋ฅ์ ๋ชจ๋ธ์ ๋ง๋ค๊ณ ํ๋ จํ๋ ๋ฐฉ์์ ๋์ผํ๋ค.
์ด์ง ๋ถ๋ฅ๋ฅผ ํ์ ๋์๋ ์์ฑ๊ณผ ์์ฑ ํด๋์ค๋ฅผ 0๊ณผ 1๋ก ์ง์ ํ๊ฒ ํ๊น ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์๋ค. ์ด์ฒ๋ผ ๋ค์ค ๋ถ๋ฅ์์๋ ํ๊น๊ฐ์ ์ซ์๋ก ๋ฐ๊ฟ ์ ์์ง๋ง, ์ฌ์ดํท๋ฐ์์๋ ํธ๋ฆฌํ๊ฒ ๋ฌธ์์ด๋ก ๋ ํ๊น๊ฐ์ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์๋ค.
ํ๊น๊ฐ ๊ทธ๋๋ก ์ฌ์ดํท๋ฐ ๋ชจ๋ธ์ ์ ๋ฌํ๋ฉด ์์๊ฐ ์๋์ผ๋ก ์ํ๋ฒณ์์ผ๋ก ๋งค๊ฒจ์ง๋ค.
from sklearn.neighbors import KNeighborsClassifier
kn = KNeighborsClassifier(n_neighbors=3)
kn.fit(train_scaled, train_target)
print(kn.score(train_scaled, train_target))
print(kn.score(test_scaled, test_target))
##0.8907563025210085
##0.85
ํ ์คํธ ์ธํธ์ ์๋ 5๊ฐ์ ์ํ ์์ธก ์งํ
5๊ฐ ์ํ์ ๋ํ ์์ธก์ ์งํํด๋ณด์๋ค.
์ฌ์ดํท๋ฐ์ predict_proba()๋ฉ์๋๋ก ํด๋์ค๋ณ ํ๋ฅ ๊ฐ์ ๋ฐํํ๋ค. predict_proba() ๋ฉ์๋์ ์ถ๋ ฅ ์์๋ classes_ ์์ฑ๊ณผ ๊ฐ๋ค.
์ฆ ['Bream' 'Parkki' 'Perch' 'Pike' 'Roach' 'Smelt' 'Whitefish'] ์์์ด๋ค.
์ฒซ๋ฒ์งธ ์ํ์ ๋นผ๋ฐ perch๊ณ , ๋๋ฒ์งธ ์ํ๋ ๋นผ๋ฐ smelt, ์ธ๋ฒ์งธ ์ํ์ perch, ๋ค๋ฒ์งธ ์ํ๊ณผ ๋ค์ฏ๋ฒ์งธ ์ํ์ perch์ผ ํ๋ฅ ์ด 0.6667(2/3), Roach์ผ ํ๋ฅ ์ 0.333(1/3)์ด๋ค.
ํ์ง๋ง, ์ด๋ ๊ฒ ๋๋ฉด 3๊ฐ์ ์ต๊ทผ์ ์ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ ํ๋ฅ ์ 0/3, 1/3, 2/3, 3/3์ด ์ ๋ถ์ด๋ค.
2. ๋ก์ง์คํฑ ํ๊ท
๋ก์ง์คํฑ ํ๊ท๋ ์ด๋ฆ์ ํ๊ท์ด์ง๋ง ๋ถ๋ฅ ๋ชจ๋ธ์ด๋ค.
์ ํ ํ๊ท์ ๋์ผํ๊ฒ ์ ํ ๋ฐฉ์ ์์ ํ์ตํ๋ค.
z= a * ๋ฌด๊ฒ + b * ๊ธธ์ด + c * ..
์ฌ๊ธฐ์์ a,b,c..,e๋ ๊ฐ์ค์น ํน์ ๊ณ์์ด๋ค.
ํน์ฑ์ ๋์ด๋ฌ์ง๋ง ์ด์ ์ ๋ค๋ค๋ ๋ค์ค ํ๊ท๋ฅผ ์ํ ์ ํ ๋ฐฉ์ ์๊ณผ ๋์ผํ๋ค.
z(ํ๋ฅ ์ฆ, ๊ตฌํ๋ ค๋ ๊ฐ)์ ์ด๋ค ๊ฐ๋ ๊ฐ๋ฅํ์ง๋ง, ํ๋ฅ ์ด ๋๋ ค๋ฉด 0~1 ์ฌ์ด์ ๊ฐ์ด ๋์ด์ผ ํ๋ค.
z๊ฐ ์์ฃผ ํฐ ์์์ผ ๋์๋ 0์ด ๋๊ณ , ์์ฃผ ํฐ ์์์ผ ๋ 1์ด ๋๋๋ก ๋ฐ๊พธ๊ธฐ ์ํด์๋ ์๊ทธ๋ชจ์ด๋ ํจ์(=๋ก์ง์คํฑ ํจ์)๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฅํ๋ค.
์ฌ์ดํท๋ฐ์๋ ๋ก์ง์คํฑ ํ๊ท ๋ชจ๋ธ์ LogicsticRegression ํด๋์ค๊ฐ ์ค๋น๋์ด ์๋ค.
(2) ๋ก์ง์คํฑ ํ๊ท๋ก ์ด์ง ๋ถ๋ฅ ํด๋ณด๊ธฐ
๋ณธ๊ฒฉ์ ์ธ ํ๋ จ ์ด์ ์ ์๊ทธ๋ชจ์ด๋ ํจ์์ ์ถ๋ ฅ์ด 0.5๋ณด๋ค ํฌ๋ฉด ์์ฑ, ์์ผ๋ฉด ์์ฑ์ผ๋ก ํ๋จํ๋ ์ด์ง ๋ถ๋ฅ๋ฅผ ๋จผ์ ์ํํด๋ณผ ๊ฒ์ด๋ค.
๋ํ์ด ๋ฐฐ์ด์ True, False ๊ฐ์ ์ ๋ฌํ์ฌ ํ์ ์ ํํ ์ ์๋ค.
์ด๋ฅผ ๋ถ๋ฆฌ์ธ ์ธ๋ฑ์ฑ์ด๋ผ๊ณ ํ๋ค.
char_arr = np.array(['A','B','C','D','E']) #'A'์ 'C' ๊ณจ๋ผ๋ด๊ธฐ
print(char_arr[[True, False, True, False, False]])
๋ถ๋ฆฌ์ธ ์ธ๋ฑ์ฑ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ๋๋ฏธ์ ๋น์ด์ ํ๋ง ๊ณ ๋ฅธ๋ค.
train_target ๋ฐฐ์ด์์ Bream์ด๋ smelt์ผ ๊ฒฝ์ฐ True์ด๊ณ ๊ทธ ์ธ์๋ ๋ชจ๋ False๋ฅผ ๋ฃ๋๋ค.
์ดํ ๋นํธ ์ฐ์ฐ์(|) ๋ฅผ ํตํด ํฉ์น๋ฉด ๋๋ฏธ์ ๋น์ด์ ๋ํ ํ๋ง ๊ณจ๋ผ๋ผ ์ ์๋ค.
bream_smelt_indexes = (train_target == "Bream") | (train_target == "Smelt")
train_bream_smelt = train_scaled[bream_smelt_indexes]
target_bream_smelt = train_target[bream_smelt_indexes]
print(bream_smelt_indexes.shape)
print(train_bream_smelt.shape)
print(target_bream_smelt.shape)
ํ๋ จ
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
lr.fit(train_bream_smelt, target_bream_smelt)
์ํ 5๊ฐ์ ๋ํ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๋ค. ๋ ๋ฒ์งธ ์ํ์ ์ ์ธํ๊ณ ๋ ์ ๋ถ Smelt๋ก ์์ธกํ์๋ค.
์ค์ ๋ก ๋๋ฒ์งธ ์ํ์์๋ง ํ์์ ํ๋ฅ ์ด ๋ ๋๊ณ , ๋๋จธ์ง๋ ์ ์์ ํ๋ฅ ์ด ํจ์ฌ ๋๋ค.
์ฌ์ดํท๋ฐ์ ํ๊น๊ฐ์ ์ํ๋ฒณ์์ผ๋ก ์ ๋ ฌํ๋ฏ๋ก, Bream, Smelt์ ์์์ด๋ค.
๋ฐ๋ผ์ ์ด์ง๋ถ๋ฅ๊ฐ ์ ๋๋ก ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
(2) ๋ก์ง์คํฑ ํ๊ท๋ก ๋ค์ค ๋ถ๋ฅํ๊ธฐ
LogisitcRegression ํด๋์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐ๋ณต์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค.
max_iter ๋งค๊ฐ๋ณ์์์ ๋ฐ๋ณต ํ์๋ฅผ ์ง์ ํ๋ฉฐ ๊ธฐ๋ณธ๊ฐ์ 100์ด๋ค. ์ฌ๊ธฐ์๋ 1000์ผ๋ก ๋๋ ค ์ฌ์ฉํ๋ค.
๋ก์ง์คํฑ ํ๊ท๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ณ์์ ์ ๊ณฑ์ ๊ท์ ํ๋ค. (=L2๊ท์ )
C์ ๊ธฐ๋ณธ๊ฐ์ 1์ด๋ฉฐ, C๋ ์์ ์๋ก ๊ท์ ๊ฐ ์ปค์ง๋ค. ์ฌ๊ธฐ์๋ 20์ผ๋ก ๋๋ ค ์ฌ์ฉํ๋ค.
๊ฒฐ๊ณผ๊ฐ ๊ณผ๋์ ํฉ์ด๋ ๊ณผ์์ ํฉ์ผ๋ก ๋ณด์ด์ง ์๋๋ค.
ํ ์คํธ ์ธํธ 5๊ฐ์ ์ํ์ ๋ํ ์์ธก์ ์ถ๋ ฅํด๋ณด๋, 5๊ฐ์ ํ์ด ์ถ๋ ฅ๋๋ค.
7๊ฐ์ ์์ ์ข ๋ฅ์ ๋ํ ํ๋ฅ ์ด๋ฏ๋ก 7๊ฐ์ ์ด์ด ์ถ๋ ฅ๋์๋ค.
๊ณ์ฐ ๊ฒฐ๊ณผ ๊ฐ์ฅ ๋์ ํ๋ฅ ์ธ ์์ ์ ์ข ๋ฅ๋ก ์์ธกํ๋ค.
์ด ๋ฐ์ดํฐ๋ 5๊ฐ์ ํน์ฑ์ ์ฌ์ฉํ๋ฏ๋ก coef_ ๋ฐฐ์ด์ ์ด์ 5๊ฐ์ด๋ค.
ํ๊ณผ intercrpt_๊ฐ 7๊ฐ์ธ ์ด์ ๋ ์ด์ง๋ถ๋ฅ์์ ๋ณด์๋ z๋ฅผ 7๊ฐ๋ ๊ณ์ฐํ๋ค๋ ๊ฒ์ด๋ค.
์ฆ, ๋ค์ค ๋ถ๋ฅ๋ ํด๋์ค๋ง๋ค z๊ฐ์ ํ๋์ฉ ๊ณ์ผํ๋ค.
๋ค์ค ๋ถ๋ฅ๋ ์ด์ ๋ฌ๋ฆฌ ์ํํธ๋งฅ์ค ํจ์๋ฅผ ์ฌ์ฉํ์ฌ 7๊ฐ์ ํ๋ฅ ๋ก z๊ฐ์ ๋ณํํ๋ค.