혼공머신 Day2

나르·2021년 1월 4일
0
post-thumbnail

혼자 공부하는 머신러닝+딥러닝

Chapter 2-1

훈련세트와 테스트세트

모든 입력 데이터를 주고 훈련 시킨 후, 같은 데이터로 테스트를 한다면 전부 맞히는 것이 당연하다. 머신러닝 알고리즘의 성능을 제대로 평가하려면 훈련 데이터와 테스트 데이터가 달라야 한다.

코드

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))
  • 지도 학습은 입력과 타깃을 전달하여 모델을 훈련한 다음 새로운 데이터를 예측하는데 활용하는 알고리즘이다.(e.g. K-최근접 이웃)
  • 비지도 학습은 타깃 데이터가 없는, 즉 예측이 아닌 입력 데이터에서 특징을 파악하고 변형하는데 활용하는 알고리즘이다.
  • 훈련 세트는 모델을 훈련할 때 사용하는 데이터이다. 클수록 좋으므로 테스트 세트를 제외한 모든 데이터를 사용한다.
  • 테스트 세트는 일반적으로 전체 데이터에서 20~30% 정도를 사용하지만 전체 데이터가 크다면 1%만 사용해도 무방하다.
  • 샘플링 편향은 훈련세트와 테스트세트에 샘플이 골고루 섞이지 않아 샘플링이 한쪽으로 치우친 상태를 말한다.

핵심패키지

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() - 주어진 배열을 랜덤하게 섞음. 다차원 배열인 경우 첫 행에 대해서만 적용.

profile
💻 + ☕ = </>

1개의 댓글

comment-user-thumbnail
2021년 1월 4일

안녕하세요, 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

답글 달기