분류자를위한 인코딩

Aug 24 2020

로지스틱 회귀 또는 SVM과 같은 모델에서 매개 변수로 사용하기 위해 범주 형 변수를 인코딩 (이러한 작업에 익숙하지 않음)에 대해 약간의 의문이 있습니다. 내 데이터 세트는 다음과 같습니다.

Text                                  Symbol    Note    Account    Age   Label 
There is a red car                      !        red      John    24   1
My bag was very expensive               ?       orange    Luke    36  0
Where are my keys?                      @        red      Red     58  1
I promise: I will never let you go!    ...       green    Aoife   28  0

텍스트에는 커뮤니티 사용자의 댓글이 저장됩니다. 기호는 사용자가 가장 많이 사용하는 기호를 포함합니다. 참고는 수준을 나타냅니다. 녹색은 경험이 많고 빨간색은 새로운 결합 자입니다. 계정은 사용자 이름입니다. Label은 사용자의 신뢰할 수있는 정보를 제공합니다. 0이면 사용자가 가짜가 아닙니다. 사용자가 가능한 봇일 수 있습니다.

현재 정보를 기준으로 신규 사용자를 분류하고 싶습니다 (위의 열 참조). 내 데이터 세트에는 1000 개 이상의 행과 400 명의 사용자가 포함되어 있습니다. 분류자를 사용하기 위해 범주 형 필드를 인코딩해야하므로 MultiColumnLabelEncodersklearn에서 사용하여 다음과 같이 시도했습니다 .

MultiColumnLabelEncoder(columns = ['Text', 'Symbol', 'Note', 'Account']).fit_transform(df)

여기서 df는 내 데이터 프레임입니다. 그러나 onehotencoder도 바람직하다는 것을 이해했습니다. 같은 계정에서 더 많은 댓글이있을 수 있으므로 계정도 포함 시켰기 때문에 계정을 가짜로 분류하고 같은 계정에서 새 댓글을 받으면이 계정이 가짜로 쉽게 감지 될 수 있습니다. 앞서 언급했듯이 목표는 주어진 정보 (기호, 메모, 나이, 텍스트)를 기반으로 테스트 세트의 새로운 요소를 특정 정확도로 분류하는 것입니다. 즉, 이러한 변수 간의 가능한 상관 관계를 찾는 것입니다. 새 계정이 가짜 (1)인지 아닌지 (0)라고 말할 수 있습니다.

보시다시피 문제는 매개 변수가 숫자 일뿐만 아니라 범주 형인 분류기와 관련이 있습니다.
데이터 전처리 (불용어 제거 및 데이터 정리)를 위해 nltk의 Python 패키지를 사용했습니다. 특징 추출과 관련하여 (이는 다음 단계, 즉 분류기를 사용하여 클래스-1 또는 0을 예측하는 것과 연결되어 있기 때문에 핵심 포인트 여야 함) 인코딩에서 어떤 출력을 기대해야하는지 이해하는 데 어려움이 있습니다. 위의 정보를 내 모델의 입력으로 사용할 수 있습니다 (대상은 레이블이라고하며 이진 값입니다). 분류 자 로지스틱 회귀뿐만 아니라 SVM으로도 사용하고 있습니다.

16 세 사용자 X의 경우 내 예상 출력, 기호 #, 메모 Wonderful 및 메모 빨간색 (새 조이너)은 특정 비율로 가짜로 분류됩니다.

누군가가 새로운 사용자의 레이블 (가짜 또는 가짜가 아님)을 결정하기 위해 로지스틱 회귀 내에서 사용할 수있는 변수가있는 데이터 세트에서 데이터 세트를 변환하는 방법을 단계별로 설명해 주시면 감사하겠습니다.

답변

1 hssay Aug 28 2020 at 19:05

텍스트 처리와 핫 인코딩을 혼합하여 사용해야합니다. 텍스트 열은 데이터 세트의 모든 고유 한 문장에 대해 하나의 새 변수를 생성하려고 시도 할 것이므로 원-핫 인코딩으로 처리되어서는 안됩니다. 이는 학습에별로 도움이되지 않습니다. 텍스트 벡터 라이저는 표시되는 단어 / 토큰 유형에 따라 텍스트 열을 요약합니다.

따라서 먼저 텍스트 열만 처리 하려면 텍스트 벡터 라이저 를 사용해야합니다 . 이것은 하나의 데이터 프레임을 제공합니다 (예 : A). 이 데이터 프레임에는 데이터 세트의 토큰 / 단어에 해당하는 열이 있습니다. 따라서 텍스트 벡터 라이저가 100 개의 고유 한 단어를 선택하면 1000x100 크기의 데이터 프레임을 갖게됩니다. 이 100 개의 열은 텍스트 벡터 라이저에 의해서만 생성되었습니다.

기호 및 메모의 경우 원-핫 인코딩을 사용하면 다른 데이터 프레임 (예 : B)을 얻을 수 있습니다. 그런 다음 입력되는 경우 최종 데이터 프레임을 얻기 위해 공통 키에서 A와 B를 결합해야합니다. 여기서 공통 키는 행 ID입니다 (사용자 수준에서 데이터 집계에 대한 다음 설명을 참조하십시오).

사용자 이름 (계정) 열이 데이터에서 고유한지 확실하지 않습니까? 행이 1000 개이지만 사용자가 400 명뿐이면 사용자 당 행이 1 개 이상있을 수 있습니다. 이 경우 사용자 수준에서 데이터 집계를 고려할 수 있습니다 (텍스트 열의 경우 동일한 사용자의 모든 문자열을 간단히 연결할 수 있음).