페이지

2018년 1월 22일 월요일

1.7 첫 번째 애플리케이션: 불꽃의 품종 종류

붓꽃의 품종을 정확하게 분류한 데이터를 가지고 있으므로 지도 학습
몇 가지 선택사항(붓꽃의 품종) 중 하나를 선택
분류(Classfication), 출력될 수 있는 값(붓꽃의 종류)들을 클래스(class)
붓꽃 하나 에 대한 기대 출력은 꽃의 품종, 즉 품종을 레이블(Label)

1.7.1 데이터 적재


1.7.2 성과 측정: 훈련 데이터와 테스트 데이터
이 데이터로 머신러닝 모델을 만들고 새로운 데이터의 품종을 예측 하러 합니다. 하지만 만든 모델을 새 데이터에 적용하기 전에 이 모델이 진짜 잘 작동하는지 알아야 합니다. 다시 말해서 우리가 만든 모델의 예측을 신뢰할 수 있는 지 알아야 합니다.

불행이도 모델을 만들 때 쓴 데이터는 평가 목적으로 사용할 수 없습니다. 모델이 훈련 데이터를 그냥 전부 기억할 수 있으니 훈련 데이터에 속한 어떤 데이터라도 정확히 맞출 수 있기 때문입니다. 이렇게 데이터를 기억한다는 것은 모델을 잘 일반화 하지 않았다는 뜻입니다.(다른 말로는 새로운 데이터에 대해서는 잘 작동하지 않는다는 것입니다.)

모델의 성능을 측정하려면 레이블을 알고 있는 (이전에 본 적 없는) 새 데이터를 모델에 적용해 봐야 합니다. 이를 위해 우리가 가지고 있는 레이블된 데이터(150개의 붓꽃 데이터)를 두 그룹으로 나눈ㅂ니다. 그중 하나는 머신러닝 모델을 만들 때 사용하며, 훈련 데이터 혹은 훈련 세트(traning set)라고 합니다. 나머지는 모델이 얼마나 잘 작동하는지 측정하는 데 사용하며, 이를 테스트 데이터, 테스트 세트(test set)혹은 홀드아웃 세트(hold-out-set)라고 부릅니다.

scikit-learn은 데이터셋을 섞어서 나눠주는 train_test_split함수를 제공합니다. 이 함수는 전체 행 중 75%를 레이블 데이터와 함께 훈련 세트로 뽑습니다. 나머지 25%는 레이블 데이터와 함께 테스트 세트가 됩니다. 훈련 세트와 테스트 세트를 얼만큼씩 나눌지는 상활에 따라 다르지만 전체의 25%를 테스트 세트로 사용하는 것은 일반적으로 좋은 선택입니다.

1.7.3 가장 먼저 할 일: 데이터 살펴 보기
시각화는 데이터를 조사하는 아주 좋은 방법.산점도가 그중 하나입니다. 산점도는 데이터에서 한 특성을 x축에 놓고 다른 하나는 y축에 놓아 각 데이터 포인트를 하나의 점으로 나타내는 그래프. 아쉽게도 컴퓨터 화면은 2차원이라 한 번에 2개(혹은 3개)의 특성만 그릴 수 있습니다. 따라서 이 그래프는 3개 이상의 특성을 표현하기 어렵습니다. 대신 모든 특성을 짝지어 만드는 산점도 행렬을 사용할 수 있습니다.
이 그래프를 그리려면 먼저 NumPy 배열을 pandas의 DataFrame으로 변경해야 합니다. pandas는 산점도 행렬을 그려주는 scatter_matrix함수를 제공합니다.

1.7.4 첫 번째 머신러닝 모델: k-최근접 이웃 알고리즘
k-최근접 이웃 알고리즘에서 k 는 가장 가까운 이웃 '하나'가 아니라 훈련 데이터에서 새로운 데이터 포인트에 가장 가까운 'k개'의 이웃을 찾는다는 뜻

scikit-learn의 모든 머신러닝 모델은 Estimator라는 파이썬 클래스로 각각 구현되어 있습니다. k-최근접 이웃 분류 알고리즘은 neighbors 모듈 아래 KNeighborsClassifier 클래스에 구현되어있습니다. 모델을 사용하려면 클래스로부터 객체를 만들어야 합니다. 이때 모델에 필요한 매개변수를 넣습니다.
KNeighborsClassifier에서 가장 중요한 매개변수는 이숫의 개수입니다.

fit 메소드는 knn 객체 자체를 반환합니다.(그리고 knn객체 자체를 변경시킵니다.) 그래서 knn 객체가 문자열 형태로 출력됩니다. 이 출력에서 모델을 생성할 때 사용한 매개 변수를 볼 수 있습니다. 거의 모든 매개변수가 기본값이고 n_neighbors=1은 우리가 지정한 값입니다. scikit-learn 모델들이 많은 매개 변수를 가지고 있지만 대부분 성능을 최적화하거나 특별한 목적으로 사용합니다.

1.7.5 예측하기

1.7.6 모델 평가하기


댓글 없음: