get_dummies()
https://tonnykang.tistory.com/216
KNN 모델은 참 편하고 단순한
Base 모델로 사용하기에는 너무나 좋은 모델이다
하지만 각 instance간의 거리를 구해야하는 모델이기에
범주형 Catagorical Feature같은 경우에는 문제가 생긴다...
예를 들어 아래와같은 데이터가 있다고 하자
data = {
'Color': ['Red', 'Blue', 'Green', 'Blue', 'Red']
}
그러면 아래와 같이 보기 쉽게 나타내보자
Color
0 Red
1 Blue
2 Green
3 Blue
4 Red
우리는 보통 KNN모델에 이런 데이터를 학습 시키려하면
오류가 뜨기 때문에
에라이~ 인코딩 해버렷
하고 숫자 값을 준다
이 경우에는 [red, blue, green] 가 각각 [0, 1, 2] 이라고 하자
그럼 아래와 같이 인코딩 될것이다
Color
0 0
1 1
2 2
3 1
4 0
KNN과 같은 경우에는
숫자형 Feature들을 통해 각 instance들의 거리를 구하는 모델이다
그럼 위에같은 경우에는 (index)
0번째 instance는 4번째와 가장 가깝고 2번째 instance와 가장 멀고
상대적으로 1번과 3번과는 가깝다
그러나 red가 green보다 더 멀고 blue와 더 가깝다고 말 할수 있을까?
어떤 데이터에 관해서 이야기하느라 다르겠지많은
어지간해서 이러한 데이터는 서로 거리를 따지기 매우 까다롭다
하지만
위와같이 encoding되면 KNN이 이 숫자들이 연관도라고 생각하기에 거리를 위와같이 실제 관련도와 상관 없이 거리를 측정하게된다
이를 방지하기위해서는
같으면 거리가 0 다르면 거리를 1로 따져서 가까운 neighbor을 따지면 되지 않을까?
이를 구현 시켜주는 Python의 pandas라이브러리의 get_dummies() 메소드가 있다
한 범주형 feature의 모든 unique한 값들을 새로운 feature로 만들어주는데
한번 예시를 통해 확인해보자
import pandas as pd
df_dummies = pd.get_dummies(df, columns=['Color'])
위와 같이 import해주고 적용해주면
Color_Blue Color_Green Color_Red
0 0 0 1
1 1 0 0
2 0 1 0
3 1 0 0
4 0 0 1
짜잔
이제 blue, green, red 인지 아닌지를 판단해주는 feature들이 생겼다!!
그리고 각 색간의 거리는 전부 똑같다!!
이러면 효율적으로 각 instance간의 거리를 구할 수 있
하지만 여기서 피할 수 없는게
Curse of Dimensons.. 차원의 저주이다
<아래 글 초반부에서 자세하게 확인 가능하다>
https://tonnykang.tistory.com/135
그래서 항상
drop_first=True
를 적용해주면 원래 original feature을 삭제시켜주기에
차원을 조금이나마 줄여줄 수 있다, 데이터, 모델 특징들을 잘 파악해서 활용하길 바랍니다
'컴퓨터공학 > 인공지능' 카테고리의 다른 글
딥뉴럴 네트워크 Deep Neural Networks (79) | 2024.07.30 |
---|---|
딥러닝과 뉴런, 파이썬 케라스 코드 (83) | 2024.07.29 |
Naive Bayes model, 네이브 베이즈 모델 (75) | 2024.05.27 |
k-Nearest Neighbors (k-NN) 모델 KNN (69) | 2024.05.26 |
Scikit-learn, Imputer 결측값 처리기 (null values, nan) (57) | 2024.04.05 |