모든 입력 데이터를 주고 훈련 시킨 후, 같은 데이터로 테스트를 한다면 전부 맞히는 것이 당연하다. 머신러닝 알고리즘의 성능을 제대로 평가하려면 훈련 데이터와 테스트 데이터가 달라야 한다.
코드
from sklearn.neighbors import KNeighborsClassifier
import matplotlib.pyplot as plt
fish_lenght = [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]
fish_data = [[l, w] for l, w in zip(fish_lenght,fish_weight)]
fish_target = [1]*35 + [0]*14
train_input = fish_data[:35] # index 0~34까지 훈련세트 입력값
train_target = fish_target[:35] # index 0~34까지 훈련세트 타깃값
test_input = fish_data[35:] # index 35~끝까지 테스트세트 입력값
test_target = fish_target[35:] # index 35~끝까지 테스트세트 타깃값
kn = kn.fit(train_input,train_target)
kn.score(test_input,test_target) # 정확도 0.0 출력
# 훈련세트에는 도미만, 테스트세트에는 빙어만 들어있는 상태
input_arr = np.array(fish_data)
target_arr = np.array(fish_target)
# print(input_arr.shape) # 샘플 수, 특성 수 출력
np.random.seed(42) # random 함수는 실행할 때마다 다른 값을 생성하므로 seed 로 값 지정
index = np.arange(49) # 0부터 N-1 까지 1씩 증가하는 배열 생성
np.random.shuffle(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:]]
# 훈련 세트와 테스트 세트에 도미와 방어가 잘 섞여있나 확인
# plt.scatter(train_input[:,0], train_input[:,1])
# plt.scatter(test_input[:,0], test_input[:,1])
# plt.xlabel(lenght)
# plt.ylabel(weight)
# plt.show()
kn = kn.fit(train_input, train_target)
print(kn.score(test_input, test_target))
print(kn.predict(test_input))
핵심패키지
Numpy
seed() - numpy에서 난수를 생성하기 위한 정수 초깃값을 지정하는 함수. 초깃값이 같으면 동일한 난수 생성 가능하므로 랜덤 함수의 결과를 동일하게 재현하고 싶을 때 사용.
arange() - 일정한 간격의 정수 또는 실수 배열을 생성. (default = 1) 매개변수가하나이면 종료 숫자를 의미. 0~종료 숫자까지 배열을 생성, 종료숫자는 포함되지 않음.
(e.g.)
print(np.arange(3)) #[0,1,2]
print(np.arange(1,3)) #[1,2]
print(np.arange(1,3,0.2)) #[1.0, 1.2, 1.4, ... 2.8 ]
shuffle() - 주어진 배열을 랜덤하게 섞음. 다차원 배열인 경우 첫 행에 대해서만 적용.
안녕하세요, tech 기업에서 일하는/ 일하기를 희망하는 여성들을 모아서 모임을 만들고 있어요!
자세한 사항은 및 링크 참조바랍니다 :)
https://velog.io/@emilyscone/SheKorea-1%EA%B8%B0-%EB%A9%A4%EB%B2%84%EB%A5%BC-%EB%AA%A8%EC%A7%91%ED%95%A9%EB%8B%88%EB%8B%A4