ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 최근접 이웃 KNN(K-Nearest-Kneighbors)분류/ 회귀 알고리즘 (혼공머신 참고)
    카테고리 없음 2021. 7. 17. 15:11


    K최근접 이웃 분류 알고리즘 개념 

     

     

     

    지도학습(Supervised Learning) 거리기반 분류학습 알고리즘이다.


    유유상종 : 가장 가까운 거리에 있는 k개의 데이터 갯수중에서 가장 많은 종류의 레이블을 골라내는 것

     

    이 모델의 목적은 연속적이지 않은 클래스, 무엇인지를 예측한다.
    즉, 정답(레이블)이 있는 데이터셋 중에서 레이블 없는 데이터를 분류 또는 예측하는 것.

     

    지도학습 분류

    비지도학습인 클러스터링과 구분할 것

    비지도학습 분류


    그렇다면 k개의 갯수는 어떻게 설정하는가?

     

    보통 5개를 설정한다. 총 데이터 갯수의 제곱근 값을 설정하는 등 아직은 연구중이라고 하지만 반드시 홀수여야 한다. 만약 4개라는 짝수이면 가장 다수를 설정해야 하는데 2:2 동점으로 분류하지 못하는 경우가 발생한다.

     

     

    k근접 이웃은 어떤 원리?

     

    데이터 간 거리를 측정하는 유클리디안 거리 공식이 들어감




    어떤 문제를 해결하고 싶을 때 주로 사용하는가?


    이미지처리, 영상에서 글자인식, 얼굴인식, 영화, 음악, 상품 추천 및 개인별 선호 예측, 
    의료, 유전자 데이터 패턴 인식, 암진단, 재구매 고객, 이탈 고객 예측 등 다양하게 사용할 수 있다

     

    단, 분류이므로 연속적인 수가 아니라 어떤 하나의 클래스로 분류하는 문제를 해결하고 싶을 때 사용한다

     

     

    다른 블로거 분들 글을 읽어보니 vip 고객이 될 것 같은 가장 신규 고객을 분류하는 데 사용한다고도 함
    vip로 성장할 가능성 높고 vip 고객의 초기 사용 패턴과 유사한 속성의 신규 고객을 찾는 방법으로 knn을 사용했다고 함

     

     

    혼공머신 책 예제로는 


    앱마켓에서 생선주문이 들어오면 물류센터에서 생선을 골라 내보내야 하는데 직원이 물류센터에서 주문들어온 생선을 고를 때 어떤 생선이 주문들어온 생선인지 모를 때 물류센터에서 저울로 무게와 길이를 재는 프로세스가 있어 그 단계에서 생선 무게와 길이로 생선 종류를 맞추는 문제를 해결하는 데 알고리즘을 만들었다고 함

     

    물류센터에서 일하는데 생선을 구별 못한다??

    그런 직원들 때문에 머신러닝 모델을 만든다?

     

    좀 끼워맞춘 감이 없잖아 있지만 어쨌든 실무에 적용하는 것 같은 예제로 연습삼아 공부하는 셈 치고 넘어감

     

    예제로 공부할만한 데이터셋(Dataset)은 뭐가 있을까 

     

    iris붓꽃 데이터 , titanic 생존 분류, 유방암 진단 분류, IBM통신사고객 이탈 분류, 손글씨이미지 분류, 오렌지 자몽 분류, 소개팅데이터에서 가장 인기있는 타입 분류 등등


     

    K최근접 이웃 분류 알고리즘 데이터 다루기



    어떤 형태의 데이터를 다루는가?


    Scikit-learn 사이킷런 라이브러리의 입력과 출력은 모두 넘파이 배열임, 즉 array()로 감싸져 있는 상태로 전처리 해야 함


    K최근접 이웃 지도학습은 정답이 있으므로, 

    입력과 타깃으로 데이터를 나누어야 함

     

    입력은 여러 특성들이 있는 독립변수(X) 데이터 

    타깃은 분류하고 싶은 정답이 있는 종속변수(Y) 데이터

     

    예를 들어 생선의 무게와 길이로 생선 종류를 맞추는 문제에서

    생선의 무게와 길이가 X, 생선 종류가 Y이다

     

    입력과 타깃 데이터로 나눈 후 훈련/테스트 셋으로 나누어야 한다

    훈련한 데이터의 성능을 평가하기 위해서는 일부 훈련에 사용하지 않은 테스트 셋으로 평가해야 하기 때문이다.

     

    주의할 점으로는 훈련/테스트 셋으로 나눌 때 샘플링 편향이 없어야 한다.

    샘플링 편향 없이 골고루 샘플을 뽑아서 만들어야 함

     

    샘플링 섞을 때 input, targer 넘파이 array에서 같은 행 위치가 함께 선택되어야 함
    ->인덱스를 만들어서 무작위로 섞은 다음 훈련/테스트 세트로 나누면 된다.

     

    코드 참고

     

    np.random.seed(42)
    index = np.arange(49)
    np.random.shuffle(index)

     

     

    K근접 이웃 분류시 꼭 전처리 해야할 부분

     

    정규화(normalization)

    K- 최근접 이웃 알고리즘은 거리 기반, 샘플 간의 거리에 영향을 많이 받는다.

    특히 특성 간 값이 놓인 범위가 다를 경우가 많은데 이럴 경우 특성 스케일이 다르다고 표현한다. 모델을 만들기 위해서는 모든 특성들의 데이터를 표현하는 기준을 일정한 기준으로 맞춰야한다.

     

    바로 이 부분이 전처리가 필요하다. (트리 기반은 특성 스케일이 다르더라도 잘 작동함)
    전처리 방법은 보통 두가지가 있다.

     

    1. 최소 최대 정규화

    수치형 데이터들의 값을 모두 0~1사이로 변환시켜줘야한다. (데이터 정규화)

     

    2. Z점수 표준화

    표준점수 (z score)계산하기, 표준점수는 각 특성값이 0에서  표준편차의 몇 배만큼 떨어져 있는지 나타냄, 실제 특성값의 크기와 상관없이 동일한 조건으로 비교 가능 (훈련/테스트 데이터 각각 평균을 빼고 표준편차 나누기)

    특성마다 스케일이 다르므로 평균과 표준편차는 각 특성별로 평균, 표준편차 계산 (열, axis=0)

    #1)평균계산
    mean = np.mean(train_input, axis=0)
    2)표준편차 계산
    #std = np.std(train_input, axis=0)
    
    #훈련데이터-평균/표준편차
    train_scaled = (train_input - mean) /std

     

    보통 Z점수 표준화를 더 많이 사용한다. 현재 데이터의 최댓값이 250이라고 했을 때 나중에 예측할 데이터의 최댓값이 300등 벗어날 경우가 많아 또다시 최소최대 정규화를 해줘야 하는 불필요한 단계를 거쳐야 하는 문제가 있다.


    위 코드로 계산하면 넘파이에서는 알아서 모든 행에서 계산해줌 -> 브로드 캐스팅이라고 함

    주의할 점으로 산점도를 그려볼 때 샘플, 테스트세트도 똑같이 평균을 빼고 표준편차를 나누어줘야 함

     

    K근접 이웃의 장단점

     

    장점 단점

    -단순하고 효율적
    -다른 머신러닝 알고리즘과 달리 모델을 생성하지 않아 
    훈련 단계가 빠름
    -수치 기반 데이터 분류 작업 중 성능 우수



    -모델을 생성하지 않아 특징과 클래스 간 관계를 이해하는 데 제한적
    ->모델의 결과를 가지고 해석하는 것이 아닌 선험적으로 각 변수와 클래스 간 관계를미리 알고 파악해서 알고리즘에 적용해야 원하는 예측 결과를 얻을 수 있음
    ex)
    KNN모델로 신규고객이 VIP 고객으로 성장하는데 중요한 변수가 무엇인지 파악하는 것이아닌 분석가의 선허적 지식으로 VIP고객으로 성장하는데 중요한 변수를 선정해서 적용해야함

    -데이터가 많아지면 분류 단계가 느림
    -적절한 k의 선택 필요
    -명목/범주 데이터 시 더미변수(원핫인코딩) 생성해서 수치 형식으로 변환할 필요 있음
    -누락데이터 처리 해야 함

     

    과소적합 문제 


    1) k가 너무 작을 때 과적합-> overfitting


    하나의 이상치가 있을 경우 레이블이 그 이상치에 의해 결정될 수 있음

     


    2) k가 너무 클 때 -> underfitting


    점 사이의 거리가 의미 없어짐, 
    학습 데이터를 충분히 세세히 살펴보지 않고
    동일한 방식으로 분류되어 정확도가 떨어짐




    K최근접 이웃 회귀 알고리즘


    knn모델에서 회귀로도 쓸 수 있음 예를 들어 임의의 어떤 숫자를 예측하는 것, 내년도 경제 성장률 예측, 배달이 도착할 시간 예측할 때 사용한다.

    혼공머신 예제에서는 생선을 무게 단위로 판매하려고 하는데 공급처에서 생선 1마리 무게를 잘못 측정해서 보내는 바람에 정답있는 다른 생선 무게 데이터로 잘못 측정한 생선 무게를 예측하기 위해서 썼다.

    (사실 저울에 달아보면 되는데..그냥 넘어가자)

     

     

    K최근접 이웃 회귀 알고리즘의 한계 

     

    기존 특성의 레이블이 정해져 있는 data에서 한참 벗어난 거리의 새로운 data를 넣었을 때 

    훈련세트의 범위를 벗어나므로 엉뚱한 값을 예측할 수 있음 (혼공머신 p135)

     

     

    반응형
Designed by Tistory.