T'SPACE

다채로운 에디터들의 이야기

컴퓨터공학/인공지능

파이선 pandas 라이브러리 get_dummies()

Tonny Kang 2024. 5. 28. 10:37
반응형

get_dummies()

https://tonnykang.tistory.com/216

 

k-Nearest Neighbors (k-NN) 모델 KNN

k-NN(k-Nearest Neighbors)는 지연 학습 알고리즘이다.정의k-NN은 함수가 Locally (가깝게) 근사되고, 모든 계산이 함수 평가 시점까지 미뤄지는 지연 학습 알고리즘이다. 분류와 회귀 모두에서 알고리즘은

tonnykang.tistory.com

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

 

[LG Aimers] 해카톤 후기, 코드 분석

*LG Aimers 문제를 공개하면 문제가 있을까봐 간소하게 설명 합니다 문제 Train.csv 파일과 Submission.csv 파일을 두개 준다 Train 파일로 학습을 시켜 True, False를 판단해야하고 Submission에 주어진 정보로 Tr

tonnykang.tistory.com

 

그래서 항상

 drop_first=True

를 적용해주면 원래 original feature을 삭제시켜주기에

차원을 조금이나마 줄여줄 수 있다, 데이터, 모델 특징들을 잘 파악해서 활용하길 바랍니다

반응형