본문 바로가기

머신러닝/혼자 공부하는 머신러닝

4강 훈련 세트와 테스트 세트로 나누어 사용하기

https://www.youtube.com/watch?v=o9kGDpZbmx0&list=PLJN246lAkhQjoU0C4v8FgtbjOIXxSs_4Q&index=4 보고 공부한 내용입니다.

 

저번시간에 배운

 

k-최근접 이웃은 규칙보다는 훈련데이터에 따라 예측클래스로 삼는 것이다.

(= 정답을 모두 가지고 있는 것이다.)

 

score 매소드에서 테스트 데이터를 사용해보자!

 

테스트 데이터를 따로 준비하기 전에 머신너링 알고리즘 3가지 알아보자 

지도학습 - 타겟 데이터가 있는것(정답 있는 것)

 

비지도학습 - 타겟데이터가 없는, 입력만 가지고 있을 때(정답이 없을 때)

ex)특성을 줄일 때, 비슷한 샘플을 모을 때

 

강화학습 - 모델이 행동을 수행한 다음에 주변에 환경에서 행동을 피드백받아서 발전해나가는 것

 

 

 

훈련 세트와 테스트 세트

훈련 데이터에서 일부를 덜어내서 테스트 데이터로 쓰는 것이다.

 

아까는 훈련 데이터라고 했지만 덜어냈기 때문에 이름을 바꿔서 훈련 세트, 테스트 세트 라고 한다.

fish_data에서 35는 포함하지 않고 34까지 0~34를 슬라이스 해서 train_input에 넣는다.

 

test_input은 35부터 마지막 까지

 

 

테스트 세트에서 평가하기

 

train을 fit()에 넣어서 모델을 훈련 시킨다.

 

그리고 score로 점수를 평하는데 test_input에 있는 셈플 14개를 모두다 못맞춘것이다.

 

 

왜 이런일이 나올까?

지금 앞에 35개는 모두 도미이고, 14개는 빙어만 있다.

 

빙어가 없는 테스트 세트를 주고 빙어를 맞춰보라 하면 문제가 생길 것이다.

 

그러면 오른쪽같이 섞어서 만들려면 어떻게 해야할까?

 

numpy를 써보자

1차원 배열을 벡터라고 하는데 7개가 있으니 7차원 벡터라고도 볼 수 있다.

 

저번에 plt 결과값이 array[1]로 출력되었던걸 볼 수 있었을 것이다.

넘파일 배열로 리턴한 것이다.

 

파이썬에서 리스트로 n차원 배열을 만들기 어렵다.

 

np.array()

numpy를 쓰면 numpy배열로 변환된다. 매개변수로 넣은 것을 배열로 만든다.

 

 

데이터 섞기

입력과 타겟이 함께 섞여서 이동해야 한다.

 

따로따로 하면 정답을 제대로 확인할지 못 할것이다!

 

그렇다면 인덱스를 만들어서 섞어보자

 

0~48까지 인덱스를 만들고 인덱스 0~35까지는 훈련세트, 35~ 끝 까지는 테스트세트이다.

그림에서 13번은 훈련세트로 들어가고 38번은 테스트 세트로 들어간다.

 

 

 

일단 인덱스 배열을 만들어 보자.

index = np.arange(49)

0~48까지 정수 배열을 만든다. 즉 49는 포함하지 않는다.

 

이제 인덱스 배열을 마구 섞어보자.

np.random.shuffle(index)

결과는 

이렇게 나올 것이다. 앞에 35개를 훈련 세트로 정한다.

나머지는 테스트 세트로 정한다.

 

 

그럼 이 배열을 슬라이싱 해야할 탠데 어떻게 할까

다른 배열(인덱스)을 넣어서 배열을 선택한다.

 

즉,

인덱스에 0~34까지의 번호의 값을 input_arr에 있는 값으로  train_input에 넣는다.

 

 

np.random.seed(42)

예시와 같게 하려면 random.seed()를 지정하면된다.

순전히 교육용으로 재현성을 높힌 것이다.

 

 

 

 

데이터 나누고 확인하기

훈련 세트에 다양한 값이 들어가 있고,

테스트 세트에도 빙어, 도미값이 들어가 있다.

 

26.3을 정하고 싶다면

처음에 행을먼저 써준다.

a[1,0]을 써줘서 1행 0열로 , 로 구분한다.

 

train_input[ : , 0]의 의미는

: 앞뒤 아무 것도 안쓰면 모든 것을 의미한다. 즉, 모든 행

뒤에 0은 열을 뜻하니 25.4, 26.3 ..... 15.0 인 열을 뜻한다.

 

 

 

두 번째 머신러닝 프로그램 

데이터를 다 섞지 않았을 때 0이 나왔다. 

 

 

 

똑같은 데이터로 다시 테스트를 하면 안된다.

배열의 인덱스 배열로 만들어서 인덱스를 섞은 다음에 테스트 세트와 훈련 세트를 만들어야 한다.

그 다음 훈련하고 평가 해야한다.

 

 

728x90