체인의정석

머신러닝 스터디 01 - 지도학습 vs 비지도 학습, Iris data 예시 본문

빅데이터&인공지능/인공지능

머신러닝 스터디 01 - 지도학습 vs 비지도 학습, Iris data 예시

체인의정석 2020. 7. 5. 16:02
728x90
반응형

지도학습 - 이미 알려진 사례를 바탕으로 일반화된 모델을 만들어 의사 결정 프로세스를 자동화 하는 것.

 

지도학습의 예시

 

편지 봉투에 손으로 쓴 우편번호 숫자 판별

입력 - 손글씨 , 출력 - 우편번호 숫자

 

의료 영상이미지 가반 종양 판단

입력- 이비지, 출력 - 종양의 양성 여부

 

의심되는 신용카드 거래 감지

입력 - 신용카드 거래 내역, 출력 - 부정거래 여부

 

=> 의료 영상 이미지의 경우 데이터를 얻는것이 어려울 수 있음

 

비지도 학습 - 입력은 주어지지만  출력은 제공되지 않으며, 평가가 어려움

 

비지도학습의 예시

 

블로그 글의 주제 구분

=> 고객군의 분류를 모르니 출력도 모름

 

비정상적인 웹사이트 접근 탐지

=> 웹 트랙픽만 관찰 가능 어느것이 정상인지 판단 불가

 

머신러닝에서 하나의 개체/행 = 샘플, 데이터 포인트라고 부름

샘플의 속성을/열 = 특성 이라고 함

 

붓꽃의 품종 분류

붓꽃의 품종을 정확하게 분류한 데이터를 가지고 있으므로 이것은 지도학습에 속함.

이예는 분류 문제에 해당되며 출력될 수 있는 값을 클래스라고 함.

데이터 포인트 하나(붓꽃 하나)에 대한 기대 출력은 꽃의 품종이 된다. 이런 특정 데이터 포인트에 대한 출력, 즉 품종을 레이블 이라고 한다.

 

 

데이터 적재

 

아래 사진과 같이 먼저 key를 뽑아내면 각 key가 들어가 있고 이 키들을 입력하면 거기에 해당되는 정보값들을 불러올 수 있다. DESCR키에는 데이터셋에 대한 간략한 설명이 들어가 있으며, target_names에서는 예측하려는 붓꽃 품종의 이름을 배열로 가지고 있고, feature_names의 값은 각 특성을 설명하는 문자열의 리스트가 나오게 됩니다. 또한 실제 데이터는 target과 data필드에 들어 있습니다. 

 

머신러닝에서 각 아이템은 샘플이라고 하고 속성은 특성이라고 부릅니다. 그러므로 data 배열의 크기는 샘플의 수에 특성의 수를 곱한 값이 됩니다. 이는 scikit-learn의 스타일이며 항상 데이터가 이런 구조일거라 가정하고 있습니다.

 

다음과 같이 data 와 target안에 실제 데이터가 들어가 있고 여기에 있는 정보값이 나머지 key값에 들어있는 형식으로 구성되어있다.

 

훈련 데이터와 테스트 데이터

데이터 150개를 2 그룹으로 나누어 훈련데이터와 , 테스트 데이터로 나누어서 사용하며 scikit-learn에서는 train_test_split함수를 사용하여 분리합니다. 여기서는 75%는 훈련 세트, 25%는 테스트 세트가 되며 이 비율이 일반적입니다. 여기서 데이터는 X 레이블은 y로 표기하는데 이는 f(X)=y 와 같은 것으로 이해하면 됩니다.

 

따라서 크기를 출력했을때 레이블 값에서는 X_train은 데이터로 2차원 y_train은 라벨로 1차원으로 출력되며 전체의 75%를 차지하며 X_test와 y_tarin은 또 하나의 짝이 되어 전체의 25%를 차지하게 됩니다.

 

이때 random_state를 0으로 고정시켜 데이터 셋을 똑같이 고정시켜 둔 후에 랜덤으로 섞어 주는데, 이를 섞어 주는 이유는 데이터가 원래 초기 데이터 포인트가 레이블 순서대로 정렬이 되어서 마지막에 2인 레이블의 값만 모두 나오게 되기 때문입니다.

 

데이터살펴보기

먼저 머신러닝 모델을 만들기 전에 머신러닝 없이도 풀 수 있는지, 필요한 정보가 누락되지는 않았는지 조사해보는것이 좋습니다. 시각화로는 먼저 데이터를 조사할때 산점도를 쓸 수 있는데 산점도는 x와 y축만 있는 2차원이기 때문에 특성이 4개인 붓꽃 데이터는 모든 특성을 짝지어 만드는 선점도 행렬을 쓸 수 있습니다. 특성의 수가 4개정도로 적으면 괜찮은 방법이지만 2개씩만 비교해야하는 한계가 있습니다. 

 

먼저 mglearn을 설치해야 합니다.

그후 import mglearn을 하면 인식이 된다.

 

다음과 같이 3가지 색으로 잘 분류됨을 볼 수 있다. 데이터의 분포를 확인하고 이를 통해서 머신러닝이 가능할지 가능하지 않을지 보는것인데 여기서는 분류가 잘 되어있으므로 머신러닝으로 해결이 가능한 문제로 보았다.

 

K-최근접 이웃 알고리즘 

알고리즘으로는 비교적 이해하기 쉬운 k-최근접 이웃 알고리즘을 사용하겠습니다.

여기서 일단은 1개의 이웃만을 설정한 부분만 있고 나머지 부분은 기본 디폴트 값입니다.

예를 들어 꽃받침의 길이 5, 폭 2.9,  꽃잎의 길이 1, 폭이 0.2인 데이터를 가지고 품종을 예측하려면 다음과 같이 나온다.

knn객체의 predcit 메서드를 사용하면 다음처럼 쉽게 살펴볼 수 있다.

 

모델 평가하기

앞서 만든 테스트 세트를 사용할 때가 왔습니다. 이 데이터는 모델을 만들 때 사용하지 않았고 테스트 세트에 있는 각 붓꽃의 품종을 정확히 알고 있습니다. 

보면 pred가 생성되서 예측값이 나온것을 볼 수 있습니다.

np.mean을 한 후에 정확도를 뽑거나 knn에 있는 scroe를 사용하여 정확도를 뽑을 수 있습니다.

 

요약 및 정리

분류 문제에서는 각 품종을 클래스라고 하며,

개별 붓꽃의 품종은 레이블 이라고 합니다.

 

붓꽃 데이터셋은 2개의 Numpy배열로 이루어져 있어, 하나는 데이터를 담고 있으며, scikit-learn에서는 X로 표기합니다. 다른 하나는 정확한 혹은 기대하는 출력을 가지고 있으며 y로 표기합니다. 

 

X는 2차원 배열이므로 각 데이터 포인트는 행 하나로 나타나고, 각 특성은 열 하나가 됩니다. 배열 y는 1차원 배열로 각 샘플의 클래스 레이블에 해당하는 0~2사이의 정수를 담고 있습니다. 

 

이를 테스트 세트와 훈련 세트로 나누었으며 , 훈련 데이터 X_train 과 훈련 데이터의 레이블 y_train을 매개변수로 하여 fit 메서드를 호출해 모델을 만들었습니다. 그 다음에 score을 메서드에 넣어 97%의 정확도를 얻었습니다. 이는 테스트 세트에 있는 샘플의 97%를 정확히 맞혔다는 뜻입니다.

 

학습서적 : 파이썬 라이브러리를 활용한 머신러닝 [한빛미디어]

 

728x90
반응형
Comments