답변:
나는이 주제도 배우고 있었고 이것들은 내가 찾은 것입니다.
이러한 유형의 인코딩을 가능성 인코딩 , 영향 코딩 또는 대상 코딩이라고합니다.
아이디어는 대상 변수를 사용하여 범주 변수를 인코딩합니다 (작업에 따라 연속 또는 범주). 예를 들어 회귀 작업이있는 경우 범주 변수를 대상 평균으로 인코딩 할 수 있습니다. 모든 범주에 대해 대상의 해당 평균 (이 범주 중)을 계산하고 범주 값을이 평균으로 바꿉니다.
분류 작업이있는 경우 모든 범주 값과 관련하여 대상의 상대 빈도를 계산합니다.
수학적 관점에서이 인코딩은 각 범주 값에 따라 목표 확률을 의미합니다.
위에서 설명한 방식으로 간단한 방법으로 수행하면 편향된 추정치를 얻을 수 있습니다. 이것이 Kaggle 커뮤니티에서 보통 2 단계의 교차 검증을 사용하는 이유입니다. 읽기 여기 raddar하여이 댓글을 . 해당 노트북은 여기에 있습니다 .
인용구:
y의 평균값을 취합니다. 그러나 평범한 평균은 아니지만 교차 검증 방식 내에서 교차 검증됩니다.
20 배 교차 검증이 있다고 가정 해 봅시다. 우리는 # 2- # 20 접기 정보 만 사용하여 # 1 접기에 대한 피쳐의 평균 값을 계산해야합니다.
따라서 # 2- # 20 번을 가져 와서 그 안에 다른 교차 검증 세트를 만듭니다 (10 번 했음). 모든 휴가 후 1 회 접기에 대한 평균을 계산합니다 (결국 10 개의 평균을 얻음). 평균 10 개를 평균하고 기본 # 1 유효성 검사 세트에 해당 벡터를 적용합니다. 남은 19 번 반복합니다.
설명하기가 어렵고 이해하기 어렵고 숙달하기가 어렵습니다.) 그러나 올바르게 수행하면 많은 이점이 있습니다.)
이 인코딩의 다른 구현 은 여기에 있습니다 .
R 라이브러리 vtreat 에는 영향 인코딩 구현이 있습니다. 이 게시물을 참조하십시오 .
에서 CatBoost 라이브러리 그들은 목표 인코딩을 포함하여 범주 형 변수 인코딩 옵션을 많이 가지고 있어요.
sklearn에는 아직 그러한 인코딩이 없습니다.
대상 인코딩은 이제 category_encoders 패키지를 통해 sklearn에서 사용할 수 있습니다 .
대상 인코더
category_encoders.target_encoder.TargetEncoder (verbose = 0, cols = None, drop_invariant = False, return_df = True, impute_missing = True, handle_unknown = 'impute', min_samples_leaf = 1, smoothing = 1) 클래스
범주 형 기능을위한 대상 인코딩. 하나의 접근 방식을 남겨 둡니다.
위의 주석에서 josh가 언급 한 것처럼.
scikit learn에서는 가능성 인코딩을 계속 사용할 수 없습니다. 사전을 만든 다음 교체 기능을 수행하면됩니다.
dict1 = {'cate1':1,'cate2':1,'cate3':2,'cate4':2}
for i in df.shape[0]:
df.iloc[i] = dict1[df.iloc[i]]