ํ๋ก๊ทธ๋๋ฐ ์ธ๊ณ๋ฅผ ํ๊ตฌํฉ์๋ค.
ํ๋ จ ๋ฐ ํ ์คํธ๋ฐ์ดํฐ ๋ถ๋ฅํ๊ธฐ
ํ๋ จ, ๊ฒ์ฆ, ํ ์คํธ ๋ฐ์ดํฐ ๋ถ๋ฅ ์ ์ฃผ๋ก ์ฌ์ฉ๋๋ ๋ณ์๋ช
- ์ ์๋ ๋ณ์ ์ด๋ฆ์ ์์
- ํ๋ จ๋ฐ์ดํฐ : ํ๋ จ(fit)์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ
: (ํ๋ จ ๋
๋ฆฝ๋ณ์) train_input, train_x, x_train
: (ํ๋ จ ์ข
์๋ณ์) train_target, train_y, y_train
- ๊ฒ์ฆ๋ฐ์ดํฐ : ํ๋ จ ์ ํ๋(score)์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ
: (๊ฒ์ฆ ๋
๋ฆฝ๋ณ์) val_input, val_x, x_val
: (๊ฒ์ฆ ์ข
์๋ณ์) val_target, val_y, y_val
- ํ
์คํธ๋ฐ์ดํฐ : ์์ธก(predict)์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ
: (ํ
์คํธ ๋
๋ฆฝ๋ณ์) test_input, test_x, x_test
: (ํ
์คํธ ์ข
์๋ณ์) test_target, test_y, y_test
๋ฐ์ดํฐ ๋ถ๋ฅ ์์
1. ํ๋ จ๊ณผ ํ
์คํธ๋ฅผ ๋น์จ๋ก ๋จผ์ ๋๋๊ธฐ
- ํ๋ จ๊ณผ ํ
์คํธ ๋น์จ : ์ฃผ๋ก 7:3์ ์ฌ์ฉ, ๋๋ 7.5:2.5 ๋๋ 8:2
2. ํ๋ จ๊ณผ ๊ฒ์ฆ ๋ฐ์ดํฐ๋ฅผ ๋๋๊ธฐ
- ํ๋ จ๊ณผ ๊ฒ์ฆ ๋น์จ : ์ฃผ๋ก 4 : 2 ๋๋ 6 : 2๋ฅผ ์ฌ์ฉ
3. ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ํ๋ จ : ๊ฒ์ฆ : ํ
์คํธ ๋น์จ ๋๋ต => 6 : 2 : 2
์ฌ์ฉํ ๋ฐ์ดํฐ ์ ์ํ๊ธฐ
### ์ฌ์ฉํ ๋ฐ์ดํฐ ์ ์ํ๊ธฐ
fish_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, 9.8,
10.5, 10.6, 11.0, 11.2, 11.3, 11.8, 11.8, 12.0, 12.2, 12.4, 13.0, 14.3, 15.0]
fish_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, 6.7,
7.5, 7.0, 9.7, 9.8, 8.7, 10.0, 9.9, 9.8, 12.2, 13.4, 12.2, 19.7, 19.9]
ํ๋ จ์ ์ฌ์ฉํ 2์ฐจ์ ๋ฐ์ดํฐ ํํ๋ก ๋ง๋ค๊ธฐ
### ํ๋ จ์ ์ฌ์ฉํ 2์ฐจ์ ๋ฐ์ดํฐ ํํ๋ก ๋ง๋ค๊ธฐ
fish_data = [[l, w]for l, w in zip(fish_length, fish_weight)]
print(fish_data)
len(fish_data)
์ข ์๋ณ์
# ์ข
์๋ณ์
fish_target = [1]*35 + [0]*14
print(fish_target)
len(fish_target)
ํ๋ จ ๋ฐ ํ ์คํธ ๋ฐ์ดํฐ๋ก ๋ถ๋ฅํ๊ธฐ
ํ๋ จ๋ฐ์ดํฐ(train)
### ํ๋ จ๋ฐ์ดํฐ(train)
# - ํ๋ จ ๋
๋ฆฝ๋ณ์
train_input = fish_data[ :35]
# - ํ๋ จ ์ข
์๋ณ์
train_target = fish_target[ :35]
print(len(train_input), len(train_target))
ํ ์คํธ๋ฐ์ดํฐ(test)
### ํ
์คํธ๋ฐ์ดํฐ(test)
# - ํ๋ จ ๋
๋ฆฝ๋ณ์
test_input = fish_data[35 : ]
# - ํ๋ จ ์ข
์๋ณ์
test_target = fish_target[35 : ]
print(len(test_input), len(test_target))
๋ชจ๋ธ ์์ฑํ๊ธฐ
from sklearn.neighbors import KNeighborsClassifier
๋ชจ๋ธ(ํด๋์ค) ์์ฑ
### ๋ชจ๋ธ(ํด๋์ค) ์์ฑ
# - ์ด์์ ๊ฐฏ์๋ ๊ธฐ๋ณธ๊ฐ ์ฌ์ฉ
kn = KNeighborsClassifier()
kn
๋ชจ๋ธ ํ๋ จ ์ํค๊ธฐ
### ๋ชจ๋ธ ํ๋ จ ์ํค๊ธฐ
# - ํ๋ จ๋ฐ์ดํฐ ์ ์ฉ
kn.fit(train_input, train_target)
ํ๋ จ ์ ํ๋ ํ์ธํ๊ธฐ
### ํ๋ จ ์ ํ๋ ํ์ธํ๊ธฐ
# - ํ๋ จ ๋ฐ์ดํฐ ์ฌ์ฉ
train_score = kn.score(train_input, train_target)
### ๊ฒ์ฆํ๊ธฐ : ๊ฒ์ฆ ์ ํ๋
# - ํ
์คํธ ๋ฐ์ดํฐ ์ฌ์ฉ
test_score = kn.score(test_input, test_target)
train_score, test_score
### (ํด์)
# - ํ๋ จ ์ ํ๋๊ฐ 1์ด๊ธฐ ๋๋ฌธ์ ๊ณผ๋์ ํฉ์ด ๋ฐ์ํ์์ผ๋ฉฐ,
# - ๊ฒ์ฆ ์ ํ๋๊ฐ 0์ผ๋ก ๋ํ๋ฌ์
# -> ๋ฐ๋ผ์, ์ด ํ๋ จ ๋ชจ๋ธ์ ํ๋์ ํตํด ์ฑ๋ฅ ํฅ์์ ์์ผ์ผ ํ ํ์์ฑ์ด ์์
์์ธ ๋ถ์
- ๋ฐ์ดํฐ ๋ถ๋ฅ ์ : 35๊ฐ์ ๋๋ฏธ๊ฐ์ผ๋ก๋ง ํ๋ จ์ ์์ผฐ๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ ๋ฌธ์
์ฆ, ๊ฒ์ฆ๋ฐ์ดํฐ๊ฐ 0์ด ๋์๋ค๋ ๊ฒ์, ๋๋ ๋งค์ฐ ๋ฎ์ ์ ํ๋๊ฐ ๋์จ ๊ฒฝ์ฐ
*** ๋ฐ์ดํฐ์ ํธํฅ์ด ๋ฐ์ํ์์ ๊ฐ๋ฅ์ฑ์ด ์๋ค๊ณ ์์ฌํด ๋ด
๋๋ค.
- ์ํ๋งํธํฅ : ํน์ ๋ฐ์ดํฐ์ ์ง์ค๋์ด ๋ฐ์ดํฐ๊ฐ ๊ตฌ์ฑ๋์ด ํ๋ จ์ด ์ด๋ฃจ์ด์ง ๊ฒฝ์ฐ ๋ฐ์ํ๋ ํ์
-> ํด์ ๋ฐฉ๋ฒ : ํ๋ จ/๊ฒ์ฆ/ํ
์คํธ ๋ฐ์ดํฐ ๊ตฌ์ฑ ์์ ์ ์์ด์ผ ํฉ๋๋ค. (์
ํ์ด๋ผ๊ณ ํฉ๋๋ค.)
์ํ๋ง ํธํฅ ํด์ํ๊ธฐ
# numpy์ ์ ํ๋ง ํจ์ ์ฌ์ฉ
### ์ํ๋ง ํธํฅ ํด์ํ๊ธฐ
# numpy์ ์
ํ๋ง ํจ์ ์ฌ์ฉ
import numpy as np
๋ํ์ด ๋ฐฐ์ด ํํ๋ก ๋ณํํ๊ธฐ
### ๋ํ์ด ๋ฐฐ์ด ํํ๋ก ๋ณํํ๊ธฐ
input_arr = np.array(fish_data)
target_arr = np.array(fish_target)
input_arr
### ๋ฐ์ดํฐ ๊ฐฏ์ ํ์ธํ๊ธฐ
# - shape : ์ฐจ์์ ํ์ธํ๋ ๋ํ์ด ์์ฑ(ํ, ์ด)
input_arr.shape, target_arr.shape
๋๋คํ๊ฒ ์๊ธฐ
### ๋๋คํ๊ฒ ์๊ธฐ
# - ๋๋ค ๊ท์น ์ง์ ํ๊ธฐ
# - random.seed(42) : ๋ฐ์ดํฐ๋ฅผ ๋๋คํ๊ฒ ์์ ๋ ๊ท์น์ฑ์ ๋๋๋ก ์ ์
# : ์ซ์ ๊ฐ์ ์๋ฏธ ์๋ ๊ฐ์ผ๋ก ๊ท์น์ ์๋ฏธํจ
np.random.seed(42)
index = np.arange(49)
index
np.random.shuffle(index)
index
ํ๋ จ ๋ฐ ํ ์คํธ ๋ฐ์ดํฐ ๋ถ๋ฅํ๊ธฐ
### ํ๋ จ ๋ฐ ํ
์คํธ ๋ฐ์ดํฐ ๋ถ๋ฅํ๊ธฐ
train_input = input_arr[index[ :35]]
train_target = target_arr[index[ :35]]
test_input = input_arr[index[35 : ]]
test_target = target_arr[index[35 : ]]
print(train_input.shape, train_target.shape)
print(test_input.shape, test_target.shape)
์ฐ์ ๋ ๊ทธ๋ฆฌ๊ธฐ
### ๋ผ์ด๋ธ๋ฌ๋ฆฌ
import matplotlib.pyplot as plt
### ์ฐ์ ๋ ๊ทธ๋ฆฌ๊ธฐ
plt.scatter(train_input[:, 0], train_input[:, 1], c="red", label="train")
plt.scatter(test_input[:, 0], test_input[:, 1], c="blue", label="test")
plt.xlabel("length")
plt.ylabel("weight")
plt.legend()
plt.show()
red - ํ๋ จ๋ฐ์ดํฐ
blue - ํ ์คํธ๋ฐ์ดํฐ
๋ชจ๋ธ ์์ฑํ๊ธฐ
### ๋ชจ๋ธ ์์ฑํ๊ธฐ
kn = KNeighborsClassifier()
kn
ํ๋ จ์ํค๊ธฐ
### ํ๋ จ์ํค๊ธฐ
kn.fit(train_input, train_target)
ํ๋ จ ์ ํ๋, ๊ฒ์ฆ ์ ํ๋ ํ์ธํ๊ธฐ
### ํ๋ จ ์ ํ๋ ํ์ธํ๊ธฐ
kn.score(train_input, train_target)
### ๊ฒ์ฆ ์ ํ๋ ํ์ธํ๊ธฐ
test_score = kn.score(test_input, test_target)
train_score, test_score
์์ธกํ๊ธฐ
### ์์ธกํ๊ธฐ
test_pred = kn.predict(test_input)
print(f"predict :{test_pred}")
print(f"์ค์ ๊ฐ : {test_target}")
n_neighbors = 19 ์ค์ ํ ์คํ
์ด์์ ๊ฐฏ์ ํ๋ํ๊ธฐ
### ์ด์์ ๊ฐฏ์ ํ๋ํ๊ธฐ
### 1๋ณด๋ค ์์ ๊ฐ์ฅ ์ข์ ์ ํ๋์ผ ๋์ ์ด์์ ๊ฐฏ์ ์ฐพ๊ธฐ
## ๋ชจ๋ธ(ํด๋์ค) ์์ฑ
kn = KNeighborsClassifier()
### ํ๋ จ์ํค๊ธฐ
kn.fit(train_input, train_target)
### 1๋ณด๋ค ์์ ๊ฐ์ฅ ์ข์ ์ ํ๋์ผ ๋์ ์ด์์ ๊ฐฏ์ ์ฐพ๊ธฐ
# - ๋ฐ๋ณต๋ฌธ ์ฌ์ฉ : ๋ฒ์๋ 3 ~ ์ ์ฒด ๋ฐ์ดํฐ ๊ฐฏ์
### ์ ํ๋๊ฐ ๊ฐ์ฅ ๋์ ๋์ ์ด์์ ๊ฐฏ์๋ฅผ ๋ด์ ๋ณ์
nCnt = 0
### ์ ํ๋๊ฐ ๊ฐ์ฅ ๋์ ๋์ ๊ฐ์ ๋ด์ ๋ณ์
nScore = 0
for n in range(3, len(train_input), 2) :
kn.n_neighbors = n
score = kn.score(train_input, train_target)
print(f"{n} / {score}")
### 1๋ณด๋ค ์์ ์ ํ๋์ธ ๊ฒฝ์ฐ
if score < 1 :
### nScore์ ๊ฐ์ด score๋ณด๋ค ์์ ๊ฒฝ์ฐ ๋ด๊ธฐ
if nScore < score :
nScore = score
nCnt = n
print(f"nCnt = {nCnt} / nScore = {nScore}")
### ๋ชจ๋ธ์ ์ฑ๋ฅ์ด ๊ฐ์ฅ ์ข์ ์์ ์ ์ด์์ ๊ฐฏ์๋ฅผ ์ถ์ถํ๊ธฐ ์ํ
# ํ์ดํผํ๋ผ๋ฉํฐ ํ๋๊ฒฐ๊ณผ, ์ด์์ ๊ฐฏ์ 19๊ฐ๋ฅผ ์ฌ์ฉํ์์ ๋
# ๊ฐ์ฅ ์ข์ ์ฑ๋ฅ์ ๋ฐํํ๋ ๊ฒ์ผ๋ก ํ์ธ๋จ
๋ฐ์ดํฐ ๋ถ๋ฅํ๊ธฐ - 2
print(fish_length, fish_weight)
2์ฐจ์ ๋ฐ์ดํฐ ์์ฑํ๊ธฐ
### 2์ฐจ์ ๋ฐ์ดํฐ ์์ฑํ๊ธฐ
fish_data = np.column_stack((fish_length, fish_weight))
### 1์ฐจ์ ๋ฐ์ดํฐ ์์ฑํ๊ธฐ
fish_target = np.concatenate((np.ones(35), np.zeros(14)))
fish_target
๋ฐ์ดํฐ ์์ผ๋ฉด์ ๋ถ๋ฅํ๊ธฐ
### ๋จธ์ ๋ฌ๋, ๋ฅ๋ฌ๋์์ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ ๋ถ๋ฅ๊ธฐ ํจ์
# - ๋๋คํ๊ฒ ์์ผ๋ฉด์ ๋๊ฐ(ํ๋ จ : ํ
์คํธ)์ ๋ฐ์ดํฐ๋ก ๋ถ๋ฅํจ
from sklearn.model_selection import train_test_split
### ์ฒซ๋ฒ์งธ ๊ฐ : ๋
๋ฆฝ๋ณ์
### ๋๋ฒ์งธ ๊ฐ : ์ข
์๋ณ์
### test_size = 0.3 : ๋ถ๋ฅ ๊ธฐ์ค (ํ๋ จ : ํ
์คํธ = 7 : 3)
### random_stat : ๋๋ค ๊ท์น
### stratify=fish_target : ์ข
์๋ณ์์ ๋ฒ์ฃผ ๋น์จ์ ํ๋ จ๊ณผ ํ
์คํธ์ ๋น์จ ๋๋น ํธํฅ ์์ด ์กฐ์ ์ํด
### ์ฒซ๋ฒ์งธ ๊ฒฐ๊ณผ๊ฐ : ํ๋ จ ๋
๋ฆฝ๋ณ์
### ๋๋ฒ์งธ ๊ฒฐ๊ณผ๊ฐ : ํ
์คํธ ๋
๋ฆฝ๋ณ์
### ์ธ๋ฒ์งธ ๊ฒฐ๊ณผ๊ฐ : ํ๋ จ ์ข
์๋ณ์
### ๋ค๋ฒ์งธ ๊ฒฐ๊ณผ๊ฐ : ํ
์คํธ ์ข
์๋ณ์
train_input, test_input, train_target, test_target = train_test_split(fish_data, fish_target,
test_size=0.3, random_state=42,
stratify=fish_target)
print(f"{train_input.shape}, {train_target.shape} / {test_input.shape}, {test_target.shape}")
๋ชจ๋ธ(ํด๋์ค) ์์ฑํ๊ธฐ
### ๋ชจ๋ธ(ํด๋์ค) ์์ฑํ๊ธฐ
kn = KNeighborsClassifier(n_neighbors=5)
kn
### ๋ชจ๋ธ ํ๋ จ ์ํค๊ธฐ
kn.fit(train_input, train_target)
n_neighbors=21 ์ค์
### ๋ชจ๋ธ(ํด๋์ค) ์์ฑํ๊ธฐ
kn = KNeighborsClassifier(n_neighbors=21)
kn
### ๋ชจ๋ธ ํ๋ จ ์ํค๊ธฐ
kn.fit(train_input, train_target)
### ํ๋ จ ์ ํ๋ ํ์ธํ๊ธฐ
train_score = kn.score(train_input, train_target)
### ๊ฒ์ฆ ์ ํ๋ ํ์ธํ๊ธฐ
test_score = kn.score(test_input, test_target)
train_score, test_score
### (ํด์)
# ๊ณผ๋์ ํฉ : ํ๋ จ > ๊ฒ์ฆ, ๋๋ ํ๋ จ์ด 1์ธ ๊ฒฝ์ฐ
# ๊ณผ์์ ํฉ : ํ๋ฐ < ๊ฒ์ฆ, ๋๋ ๊ฒ์ฆ์ด 1์ธ ๊ฒฝ์ฐ
# - ๊ณผ์์ ํฉ์ด ์ผ์ด๋๋ ๋ชจ๋ธ์ ์ฌ์ฉํ ์ ์์
# -๊ณผ๋์ ํฉ ์ค์ ํ๋ จ ์ ํ๋๊ฐ 1์ธ ๊ฒฝ์ฐ์ ๋ชจ๋ธ์ ์ฌ์ฉํ ์ ์์
# - ๊ณผ๋์ ํฉ์ด ๋ณดํต 0.1 ์ด์์ ์ฐจ์ด๋ฅผ ๋ณด์ด๋ฉด ์ ํ๋์ ์ฐจ์ด๊ฐ ๋ง์ด ๋๋ค๊ณ ์์ฌํด ๋ณผ ์ ์์
# ๋ชจ๋ธ ์ ์ ๊ธฐ์ค : ๊ณผ์์ ํฉ์ด ์ผ์ด๋์ง ์์ผ๋ฉด์,
# : ํ๋ จ ์ ํ๋๊ฐ 1์ด ์๋๊ณ ,
# : ํ๋ จ๊ณผ ๊ฒ์ฆ์ ์ฐจ์ด๊ฐ 0.1 ์ด๋ด์ธ ๊ฒฝ์ฐ
# *** ์ ์ ๋ ๋ชจ๋ธ์ "์ผ๋ฐํ ๋ชจ๋ธ"์ด๋ผ๊ณ ์นญํฉ๋๋ค.
# ๋ค๋ง, ์ถ๊ฐ๋ก ์ ์ ๊ธฐ์ค ์ค์ ํ๊ฐ๊ธฐ์ค์ด ์์
### *** ๊ฐ์ฅ ๋ฐ๋์งํ ๊ฒฐ๊ณผ๋ ํ๋ จ > ๊ฒ์ฆ > ํ
์คํธ
# (ํ๋ จ > ๊ฒ์ฆ < ํ
์คํธ์ธ ๊ฒฝ์ฐ๋ ์์)
### 1๋ณด๋ค ์์ ๊ฐ์ฅ ์ข์ ์ ํ๋์ผ ๋์ ์ด์์ ๊ฐฏ์ ์ฐพ๊ธฐ
## ๋ชจ๋ธ(ํด๋์ค) ์์ฑ
kn = KNeighborsClassifier()
### ํ๋ จ์ํค๊ธฐ
kn.fit(train_input, train_target)
### 1๋ณด๋ค ์์ ๊ฐ์ฅ ์ข์ ์ ํ๋์ผ ๋์ ์ด์์ ๊ฐฏ์ ์ฐพ๊ธฐ
# - ๋ฐ๋ณต๋ฌธ ์ฌ์ฉ : ๋ฒ์๋ 3 ~ ์ ์ฒด ๋ฐ์ดํฐ ๊ฐฏ์
### ์ ํ๋๊ฐ ๊ฐ์ฅ ๋์ ๋์ ์ด์์ ๊ฐฏ์๋ฅผ ๋ด์ ๋ณ์
nCnt = 0
### ์ ํ๋๊ฐ ๊ฐ์ฅ ๋์ ๋์ ๊ฐ์ ๋ด์ ๋ณ์
nScore = 0
for n in range(3, len(train_input), 2) :
kn.n_neighbors = n
score = kn.score(train_input, train_target)
print(f"{n} / {score}")
### 1๋ณด๋ค ์์ ์ ํ๋์ธ ๊ฒฝ์ฐ
if score < 1 :
### nScore์ ๊ฐ์ด score๋ณด๋ค ์์ ๊ฒฝ์ฐ ๋ด๊ธฐ
if nScore < score :
nScore = score
nCnt = n
print(f"nCnt = {nCnt} / nScore = {nScore}")
### ๋ชจ๋ธ์ ์ฑ๋ฅ์ด ๊ฐ์ฅ ์ข์ ์์ ์ ์ด์์ ๊ฐฏ์๋ฅผ ์ถ์ถํ๊ธฐ ์ํ
# ํ์ดํผํ๋ผ๋ฉํฐ ํ๋๊ฒฐ๊ณผ, ์ด์์ ๊ฐฏ์ 19๊ฐ๋ฅผ ์ฌ์ฉํ์์ ๋
# ๊ฐ์ฅ ์ข์ ์ฑ๋ฅ์ ๋ฐํํ๋ ๊ฒ์ผ๋ก ํ์ธ๋จ
ํด์
# ๊ณผ๋์ ํฉ : ํ๋ จ > ๊ฒ์ฆ, ๋๋ ํ๋ จ์ด 1์ธ ๊ฒฝ์ฐ
# ๊ณผ์์ ํฉ : ํ๋ฐ < ๊ฒ์ฆ, ๋๋ ๊ฒ์ฆ์ด 1์ธ ๊ฒฝ์ฐ
# - ๊ณผ์์ ํฉ์ด ์ผ์ด๋๋ ๋ชจ๋ธ์ ์ฌ์ฉํ ์ ์์
# -๊ณผ๋์ ํฉ ์ค์ ํ๋ จ ์ ํ๋๊ฐ 1์ธ ๊ฒฝ์ฐ์ ๋ชจ๋ธ์ ์ฌ์ฉํ ์ ์์
# - ๊ณผ๋์ ํฉ์ด ๋ณดํต 0.1 ์ด์์ ์ฐจ์ด๋ฅผ ๋ณด์ด๋ฉด ์ ํ๋์ ์ฐจ์ด๊ฐ ๋ง์ด ๋๋ค๊ณ ์์ฌํด ๋ณผ ์ ์์
# ๋ชจ๋ธ ์ ์ ๊ธฐ์ค : ๊ณผ์์ ํฉ์ด ์ผ์ด๋์ง ์์ผ๋ฉด์,
# : ํ๋ จ ์ ํ๋๊ฐ 1์ด ์๋๊ณ ,
# : ํ๋ จ๊ณผ ๊ฒ์ฆ์ ์ฐจ์ด๊ฐ 0.1 ์ด๋ด์ธ ๊ฒฝ์ฐ
# *** ์ ์ ๋ ๋ชจ๋ธ์ "์ผ๋ฐํ ๋ชจ๋ธ"์ด๋ผ๊ณ ์นญํฉ๋๋ค.
# ๋ค๋ง, ์ถ๊ฐ๋ก ์ ์ ๊ธฐ์ค ์ค์ ํ๊ฐ๊ธฐ์ค์ด ์์
### *** ๊ฐ์ฅ ๋ฐ๋์งํ ๊ฒฐ๊ณผ๋ ํ๋ จ > ๊ฒ์ฆ > ํ
์คํธ
# (ํ๋ จ > ๊ฒ์ฆ < ํ
์คํธ์ธ ๊ฒฝ์ฐ๋ ์์)
์์ ๋ฐ์ดํฐ๋ก ํ ์คํธํ๊ธฐ
### ์์ ๋ฐ์ดํฐ๋ก ํ
์คํธํ๊ธฐ
kn.predict([[25,250]])
์ฐ์ ๋ ๊ทธ๋ฆฌ๊ธฐ
### ์ฐ์ ๋ ๊ทธ๋ฆฌ๊ธฐ
plt.scatter(train_input[:, 0], train_input[:, 1], c="red", label="bream")
plt.scatter(30, 600, marker="^", c="green", label="pred")
plt.xlabel("length")
plt.ylabel("weight")
plt.legend()
plt.show()
์ฌ์ฉ๋ ์ด์ ํ์ธํ๊ธฐ
### ์ฌ์ฉ๋ ์ด์ ํ์ธํ๊ธฐ
kn.kneighbors([[25,150]])
์ด ๋๋ ์์ for๋ฌธ ์๋ ๋ถ๋ถ ํจ์ ์คํํ์ง ์๊ธฐ
n_neighbors=5 ์ค์
์ด์์ ํฌํจํ์ฌ ์ฐ์ ๋ ๊ทธ๋ฆฌ๊ธฐ
### ์ด์์ ํฌํจํ์ฌ ์ฐ์ ๋ ๊ทธ๋ฆฌ๊ธฐ
plt.scatter(train_input[:, 0], train_input[:, 1], c="red", label="bream")
plt.scatter(25, 150, marker="^", c="green", label="pred")
plt.scatter(train_input[indexes, 0], train_input[indexes, 1], c="blue", label="nei")
plt.xlabel("length")
plt.ylabel("weight")
plt.legend()
plt.show()
### ์์ธก ๊ฒฐ๊ณผ๋ ๋น์ด๋ก ํ์ธ๋์์ผ๋,
# - ์๊ฐ์ ์ผ๋ก ํ์ธํ์์ ๋์๋ ๋๋ฏธ์ ๋ ๊ฐ๊น์ด ๊ฒ์ผ๋ก ํ์ธ๋จ
# - ์ค์ ์ด์์ ํ์ธํ ๊ฒฐ๊ณผ ๋ฐฉ์ด์ชฝ ์ด์์ ๋ชจ๋ ์ฌ์ฉํ๊ณ ์์
# => ์ด๋ฐ ํ์์ด ๋ฐ์ํ ์์ธ : ์ค์ผ์ผ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋ํ๋๋ ํ์
# -> "์ค์ผ์ผ์ด ๋ค๋ฅด๋ค"๋ผ๊ณ ํํํฉ๋๋ค.
### ํด์๋ฐฉ๋ฒ : ๋ฐ์ดํฐ ์ ๊ทํ ์ ์ฒ๋ฆฌ๋ฅผ ์ํํด์ผํจ
์ ๊ทํํ๊ธฐ
<ํ์ฌ๊น์ง ์ํ ์์>
1. ๋ฐ์ดํฐ ์์ง
2. ๋
๋ฆฝ๋ณ์ 2์ฐจ์๊ณผ ์ข
์๋ณ์ 1์ฐจ์ ๋ฐ์ดํฐ๋ก ์ทจํฉ
3. ํ๋ จ, ๊ฒ์ฆ, ํ
์คํธ ๋ฐ์ดํฐ๋ก ์์ผ๋ฉด์ ๋ถ๋ฆฌ
4. ํ๋ จ, ๊ฒ์ฆ, ํ
์คํธ ๋ฐ์ดํฐ ์ค์ ๋
๋ฆฝ๋ณ์์ ๋ํด์๋ง ์ ๊ทํ ์ ์ฒ๋ฆฌ ์ํ
5. ํ๋ จ๋ชจ๋ธ ์์ฑ
6. ๋ชจ๋ธ ํ๋ จ ์ํค๊ธฐ
7. ํ๋ จ ๋ฐ ๊ฒ์ฆ ์ ํ๋ ํ์ธ
8. ํ์ดํผํ๋ผ๋ฉํฐ ํ๋
9. ์์ธก
์ ๊ทํ
### ์ ๊ทํ -> ํ์ค์ ์ํ ํ๊ธฐ
# ํ์ค์ ์ = (๊ฐ ๋ฐ์ดํฐ - ๋ฐ์ดํฐ ์ ์ฒด ํ๊ท ) / ๋ฐ์ดํฐ ์ ์ฒด ํ์คํธ์ฐจ
# ํ์ค์ ์ : ๊ฐ ๋ฐ์ดํฐ๊ฐ ์์ (0)์์ ํ์คํธ์ฐจ๋งํผ ์ผ๋ง๋ ๋จ์ด์ ธ ์๋์ง๋ฅผ ๋ํ๋ด๋ ๊ฐ
๋ฐ์ดํฐ ์ ์ฒด ํ๊ท ๊ตฌํ๊ธฐ
### ๋ฐ์ดํฐ ์ ์ฒด ํ๊ท ๊ตฌํ๊ธฐ
mean = np.mean(train_input, axis=0)
mean
๋ฐ์ดํฐ ์ ์ฒด ํ์คํธ์ฐจ ๊ตฌํ๊ธฐ
### ๋ฐ์ดํฐ ์ ์ฒด ํ์คํธ์ฐจ ๊ตฌํ๊ธฐ
std = np.std(train_input, axis=0)
std
์ ๊ทํ(ํ์ค์ ์) ์ฒ๋ฆฌํ๊ธฐ
### ์ ๊ทํ(ํ์ค์ ์) ์ฒ๋ฆฌํ๊ธฐ
train_scaled = (train_input - mean) / std
train_scaled
์ด์์ ํฌํจํ์ฌ ์ฐ์ ๋ ๊ทธ๋ฆฌ๊ธฐ
### ์ด์์ ํฌํจํ์ฌ ์ฐ์ ๋ ๊ทธ๋ฆฌ๊ธฐ
plt.scatter(train_scaled[:, 0], train_scaled[:, 1], c="red", label="bream")
plt.scatter(25, 150, marker="^", c="green", label="pred")
plt.scatter(train_scaled[indexes, 0], train_scaled[indexes, 1], c="blue", label="nei")
plt.xlabel("length")
plt.ylabel("weight")
plt.legend()
plt.show()
### ์์ธกํ๊ณ ์ ํ๋ ๊ฐ๋ ๋ชจ๋ ์ ๊ทํ ์ฒ๋ฆฌํด์ผ ํจ
new = ([25, 150] - mean) / std
new
๋ชจ๋ธ ์์ฑํ๊ธฐ
### ๋ชจ๋ธ ์์ฑํ๊ธฐ
kn = KNeighborsClassifier()
### ๋ชจ๋ธ ํ๋ จํ๊ธฐ
kn.fit(train_scaled, train_target)
ํ๋ จ ๋ฐ์ดํฐ ๊ฒ์ฆํ๊ธฐ
### ํ๋ จ ๋ฐ์ดํฐ ๊ฒ์ฆํ๊ธฐ
train_score = kn.score(train_scaled, train_target)
train_score
ํ ์คํธ ๋ฐ์ดํฐ๋ก ๊ฒ์ฆํ๊ธฐ
### ํ
์คํธ ๋ฐ์ดํฐ๋ก ๊ฒ์ฆํ๊ธฐ
# - ๊ฒ์ฆ ๋๋ ํ
์คํธ ๋ฐ์ดํฐ๋ฅผ ์ค์ผ์ผ๋ง ์ ๊ทํ ์ฒ๋ฆฌ
# - ์ด๋๋ ํ๋ จ์์ ์ฌ์ฉํ mean๊ณผ std๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํด์ผ ํจ
test_scaled = (test_input - mean) / std
test_score = kn.score(test_scaled, test_target)
test_score
์์ธกํ๊ธฐ
### ์์ธกํ๊ธฐ
kn.predict([new])
์์ธก์ ์ฌ์ฉ๋ ์ด์ ํ์ธํ๊ณ ์๊ฐํํ๊ธฐ
### ์์ธก์ ์ฌ์ฉ๋ ์ด์ ํ์ธํ๊ณ ์๊ฐํํ๊ธฐ
dist, indexes = kn.kneighbors([new])
indexes
### ์ด์์ ํฌํจํ์ฌ ์ฐ์ ๋ ๊ทธ๋ฆฌ๊ธฐ
plt.scatter(train_scaled[:, 0], train_scaled[:, 1], c="red", label="bream")
plt.scatter(new[0], new[1], marker="^", c="green", label="pred")
plt.scatter(train_scaled[indexes, 0], train_scaled[indexes, 1], c="blue", label="nei")
plt.xlabel("length")
plt.ylabel("weight")
plt.legend()
plt.show()