2-1 훈련세트와 테스트세트
머신러닝 알고리즘은 크게 지도 학습과 비지도 학습으로 나뉜다.
일반적으로 훈련데이터를 입력 / 정답데이터을 타겟 이라고 한다.
지도학습 :훈련데이터와 정답이 필요 (도미/빙어)비지도 학습 : 타겟 없이 입력데이터만 사용
테스트 세트 = 평가에 사용하는 데이터
훈련 세트 = 훈련에 사용하는 데이터
1장의 도미,빙어 데이터를 2차원으로 변환
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]
smelt_length = [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]
smelt_weight = [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]
fish_length = bream_length + smelt_length
fish_weight = bream_weight + smelt_weight
fish_data = [[l,w] for l,w in zip(fish_length,fish_weight)]
fish_target = [1] * 35 + [0] * 14
리스트 인덱싱, 슬라이싱을 통해서 훈련세트 / 테스트 세트 만들기
처음 35개를 훈련세트, 14개를 테스트 세트로 만들어보자.
train_set = fish_data[:35]
train_target = fish_target[:35]
test_set = fish_data[35:]
tset_target = fish_target[35:]
kn = kn.fit(train_data,train_target)
kn.score(test_data, test_target)
0.0
정확도가 0이 나온 이유는 샘플링 편향 때문이다.
위의 데이터는 섞이지 않고 차례대로 35개의 도미, 14개의 빙어 데이터로 이루어져 있으므로,
train_data에는 빙어 데이터가 하나도 들어있지 않기 때문에 좋은 모델이라고 볼 수 없다.
골고루 섞기 위해 numpy, random 라이브러리 사용해야한다.
import numpy as np
input_arr = np.array(fish_data)
target_arr = np.array(fish_target)
np.random.seed(42)
index = np.arrange(49)
np.random.shuffle(index)
위의 코드에서 index를 print하게 되면
[ 13, 23, 9, 31, 19 , 5,,,,,,20 ] 처럼 1~49의 랜덤한 숫자 리스트가 출력된다.
np.random.seed()는 난수를 고정시키는 용도로 이해 (일정한 결과를 얻기 위해 사용)
이렇게 순서를 섞은 뒤 다시 실행시키면
train_arr = np.array(fish_data)
train_target = np.array(fish_target)
tarin_set = train_arr[index[:35]]
train_target = train_target[index[:35]]
test_set = train_arr[index[35:]]
test_target = train_target[index[35:]]
준비가 다 되었으니 그래프를 그려봅시다!
import matplotlib.pyplot as plt
plt.scatter(train_set[:,0],train_set[:,1])
plt.scatter(test_set[:,0], test_set[:,1])
plt.xlabel("길이")
plt.ylabel("무게")
plt.show()
blue = 도미 < 잘 섞인 모습이다 ! >
oran = 빙어
다시 훈련시켜보자 !
from sklearn.neighbors import KNeighborsClassifier
kn = KNeighborsClassifier()
kn.fit(train_set, train_target) #훈련세트 = fit()
kn.score(test_set, test_target) #테스트세트 = score()
1.0
< 성공적이다! >
print(kn.predict(test_set)) # kn.predict() ==> 새로운 데이터의 정답을 예측하는 메서드
array([0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1,0])
print(test_target)
array([0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1,0])
< 일치한다! >
위 코드는 테스트 세트의 예측 결과와 실제 정답을 확인하는 코드
'머신러닝 & 딥러닝 기초 > 2장 - 데이터다루기' 카테고리의 다른 글
2-2 데이터 전처리 (0) | 2022.12.30 |
---|