일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- CSS
- 머신러닝
- hover
- HTML
- apapter
- kneighbors()
- fit메소드
- 지도학습
- 버튼 상속
- 훈련세트
- 넘파이
- 테스트세트
- score메소드
- position
- predict메소드
- LENGTH_INDEFINITE
- 픽셀 깨짐
- 표준화 z
- JavaScript
- 선택자 조건
- K최근접이웃 회귀
- relative
- Absolute
- 데이터 전처릴
- 스크롤뷰
- 외부css
- 웹사이트 공개
- 스낵바
- 메모리 객체화
- 레이아웃
- Today
- Total
베짱이와 노는 개미
ML#3-테스트세트,훈련세트 본문
오늘은 앞서 봤던 데이터들로 테스트세트와 훈련세트를 구성해보고
학습시킨후에 제대로 학습됐는지 확인까지 해보겠다
from sklearn.neighbors import KNeighborsClassifier
import numpy as np
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]
fish_data=[[l, w] for l,w in zip(fish_length, fish_weight)]
target_data=[0]*35 + [1]*14
kn = KNeighborsClassifier() #k-최근접이웃알고리즘 객체 생성
input_arr=np.array(fish_data)
target_arr=np.array(target_data)
index=np.arange(49)
np.random.seed(49)
np.random.shuffle(index)
train_input=input_arr[index[:35]] #훈련세트에서1~35번쨰로 설정(물고기 특성값)
train_target=target_arr[index[:35]] #훈련세트에서 1~35번째 설정(정답 값)
test_input=input_arr[index[35:]] #테스트세트로 36~49번째 설정(물고기 특성값)
test_target=target_arr[index[35:]] #테스트세트로 36~49번째 설정(정답 값)
kn=kn.fit(train_input, train_target) #학습시키기
kn.score(train_input, train_target) #훈련이 잘되었는지
print(test_target)
kn.predict(test_input) #새로운 데이터의 정답 예측
test_target
일단 코드를보면
bream과 smelt 길이 무게 데이터를 리스트형태로 저장해두고
fish_data라는 변수에 zip함수를 사용하여 bream, smelt배열을 2차원으로 바꿔준다
그리고 target_data라는 변수에 bream과 smelt를 구별하도록 0과 1로 구분해준다
target_data라는 변수는 기계가 제대로 학습했는지 확인하기위한 정답지 용도라고 생각해주면 된다.
코드의 큰 틀을 설명해보자면
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
일단 전체 데이터 개수 49개
이중 bream관련 데이터 35개 smelt관련 데이터 14개 -> fishdata
마찬가지로 정답지 용도인 target_data 1값 35개 0값 14개 -> targetdata
input_arr->fish_data를 넘파이를 사용하여 2차원 배열로 만들어놓은것
target_arr->target_data를 넘파이를 사용하여 1차원배열로 만들어놓은것(차이 없음)
index의 쓰임이 중요한데
만약 기계에 bream관련된 35개의 데이터를 가지고만 학습을 시키고
테스트는 smelt관련된 14개의 데이터로만 진행된다면 당연히 이 기계는 제대로된 효과를 낼수없다.
smelt관련된 데이터를 학습한적이 없는데 smelt만을 예측하라고 했기떄문!!
그래서 테스트용 데이터를 만들때는 무작위로 잘 섞어주는것이 중요하다.
그래서 index를사용하는것이다.
numpy모듈에 arange메소드로 0~48개의 정수를 받고
그 index값들을 shuffle 메소드로 랜덤으로 섞어준다.
그리고 이제 본격적으로 train용 데이터와 test용 데이터를 나눠준다
train용 데이터는 1~35번째 데이터로 구성
test용 데이터는 36~49번째 데이터로 구성
이떄 인덱스가 무작위로 섞여있는 상황이기 때문에 각각의 데이터순서에서 인덱스를 처음부터 불러주면
알아서 섞여있는 데이터가 호출되는 방식인것이다.
제대로 섞인 데이터를 마련하기위해서 index라는 기능을 거쳐서 구현하는것이다.
그리고 kn이라는 객체를 만들고 fit메소드를 통해 기계에 학습을해준다(35개의 훈련용 데이터 사용)
잘 훈련되었는지 score메소드 활용
predict() 메소드는 새로운 데이터를 예측해준다.
제대로 예측하는지 보기위해서 어떻게 해야될까 고민해보니
predict메소드의 결과값과 test_rarget의 값이 같은지를 보면 될것같다.
target데이터들은 프로그램이 생선을 문자로 구별못하기떄문에 0과1이라는 숫자로 구별하게끔 하기위한 장치이다.
'AI(머신러닝+딥러닝) 프로젝트' 카테고리의 다른 글
ML#6 - K최근접 이웃 회귀 (0) | 2021.08.07 |
---|---|
ML#5 - 데이터 전처리 (0) | 2021.08.06 |
ML#4 - 파이썬 함수 정리(수시 업데이트) (0) | 2021.08.06 |
AI#2-지도학습 (0) | 2021.07.31 |
AI#1 - 머신러닝과 딥러닝은 무엇인가? (0) | 2021.07.30 |