하나의 핫 인코딩이란 무엇이며 그것을 수행하는 방법
당신이 기계 학습에 있다면,당신은 필연적으로”하나의 핫 인코딩”이라고 불리는이 것을 보게 될 것입니다. 그러나,그것은 기계 학습에 대한 초보자로서 이해하기 어려운 것들 중 하나입니다,당신은 종류의 그것을 이해하는 기계 학습에 대한 몇 가지를 알 필요가 있기 때문에. 돕기 위해,나는 초보자 설명을 제공하려고 시도 할 것이라고 생각했다.
어떤 종류의 기계 학습 프로그램을 만들 때 가장 먼저하는 일은 일반적으로 사전 처리입니다. 즉,프로그램에 의해 분석 될 데이터를 준비하는 것을 의미합니다. 어쨌든 너는 다만 너의 프로그램으로 스프레트시트 또는 몇몇 그림을 던지고 무엇을 하기 위하여 알는 예기할. 우리는 아직 그 수준의 인공 지능에 있지 않습니다.
전처리의 큰 부분은 뭔가 인코딩입니다. 이것은 컴퓨터가 이해할 수있는 방식으로 각 데이터 조각을 나타내는 것을 의미하므로 문자 그대로”코드로 변환”을 의미하는 이름이 인코딩됩니다. 레이블 인코딩 또는 짐작할 수 있듯이 하나의 핫 인코딩과 같은 다양한 인코딩 방법이 있습니다. 레이블 인코딩은 직관적이고 이해하기 쉬운,그래서 내가 먼저 설명 할 것이다. 바라건대 거기에서 하나의 핫 인코딩을 완전히 이해할 수 있기를 바랍니다.
고양이 및 개와 같은 범주형 데이터로 작업한다고 가정해 보겠습니다. 레이블 인코딩의 이름을 보면 레이블이 범주(예:고양이 또는 개)인 레이블을 인코딩하고 인코딩은 해당 범주를 나타내는 숫자를주는 것을 의미한다고 추측 할 수 있습니다(고양이 용 1,개 용 2). 각 범주에 숫자를 부여함으로써 컴퓨터는 이제 숫자로 작업하는 방법을 알고 있기 때문에이를 나타내는 방법을 알고 있습니다. 이제 레이블 인코딩 설명을 마쳤습니다. 그러나 범주형 데이터에는 종종 작동하지 않는 문제가 있습니다.
문제는 레이블 인코딩에서 범주가 자연 정렬 된 관계를 갖게된다는 것입니다. 이 높은 숫자로 높은 숫자를 취급하도록 프로그램되어 있기 때문에 컴퓨터는이 작업을 수행;그것은 자연스럽게 높은 숫자 높은 가중치를 줄 것이다. 우리는 예제에서이 문제를 볼 수 있습니다:
- 사과,닭고기,브로콜리 등 3 가지 종류의 음식이 있다고 상상해보십시오. 레이블 인코딩을 사용하여 사과=1,닭고기=2 및 브로콜리=3 과 같은 각 숫자를 할당하여 분류합니다. 그러나 이제 모델이 내부적으로 범주 전체의 평균을 계산해야하는 경우 1+3=4/2=2 를 수행 할 수 있습니다. 즉,귀하의 모델에 따르면 사과와 닭고기의 평균은 함께 브로콜리입니다.
물론 모델에 의해 생각의 라인은 완전히 잘못된 상관 관계를 얻기로 이어질 것입니다,그래서 우리는 하나의 핫 인코딩을 도입 할 필요가있다.
1 부터 시작하여 각 범주에 대해 증가하는 숫자로 레이블을 지정하는 대신 분류의 이진 스타일을 더 많이 살펴 보겠습니다. 당신은 당신이 하나의 뜨거운 것을 알고 있다면 생각했을 수도 있습니다(그것은 바이너리 코딩과 관련이 있지만 그것에 대해 걱정하지 마십시오). 레이블과 원 핫 인코딩 간의 시각화 된 차이를 제공하겠습니다. 당신이 차이를 해결할 수 있는지:
차이점은 무엇입니까? 음,우리의 범주는 이전에 행 이었지만 지금은 열입니다. 그러나 우리의 수치 변수 인 칼로리는 동일하게 유지되었습니다. 특정 열의 1 은 해당 행의 데이터에 대한 올바른 범주를 컴퓨터에 알려줍니다. 즉,우리는 각 범주에 대한 추가 이진 열을 만들었습니다.
왜 이것이 더 나은지(앞에서 언급 한 문제를 제외하고)즉시 명확하지 않으며 명확한 이유가 없기 때문입니다. 기계 학습의 많은 것들과 마찬가지로,우리는 모든 상황에서 이것을 사용하지 않을 것입니다. 범주 형 데이터
코드에서 하나의 핫 인코딩(가져 오기? 그것은 말장난입니다)
이 코드에서 어떻게 수행되는지 항상 도움이되므로 예를 들어 보겠습니다. 일반적으로 나는 그것을 배우기 위해 라이브러리없이 무언가를해야한다는 확고한 신자이지만,이 지루한 사전 처리 작업을 위해 우리는 정말로 필요하지 않습니다. 도서관은 이것을 그렇게 간단하게 만들 수 있습니다. 당신은 당신이 당신의 프로젝트
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
import numpy as np
import pandas as pd
의 많은에서 그 3 라이브러리를 사용하여 자신을 찾을 수 있습니다 이제 우리는 도구를 가지고,시작하자. 우리는 구성된 데이터 세트로 작업 할 것입니다. 팬더와 함께 데이터 세트를 입력하십시오.기능:
dataset = pd.read_csv('made_up_thing.csv')
잘하면 그게 자명합니다. 다음은 조금 더 까다 롭습니다. 스프레드 시트에 대한 것은 당신이 또는 열의 일부에 대해 걱정하지 않을 수 있다는 것입니다. 단순성을 위해 마지막 열을 제외한 모든 것에 관심이 있다고 가정 해 봅시다. 우리는 팬더의 기능을 사용할 것입니다.당신이 그것을 말할 어떤 열(들)에서 데이터를 가져옵니다:
X = dataset.iloc.values
.일록 실제로 소요,그래서 우리는 입력. 는:우리가 그 열에있는 모든 행을 원하기 때문에,그리고:당신이 그렇게 그냥 방법입니다. 우리는 추가.값은,음,우리가 선택한 어떤 세그먼트의 값을 얻을 수 있습니다. 즉,첫 번째 부분은 값을 선택하고 두 번째 부분은 값을 가져옵니다.
이제 실제 인코딩을 해 봅시다. 스켈런은 믿을 수 없을 정도로 쉽게,하지만 캐치가있다. 당신은 우리가 라벨 인코더와 하나의 핫 인코더를 모두 가져 눈치 챘을 수도 있습니다. 스켈런의 핫 인코더는 카테고리를 숫자로 변환하는 방법을 실제로 알지 못하며 숫자를 바이너리로 변환하는 방법 만 알고 있습니다. 먼저 라벨코더를 사용해야 합니다.
먼저 일반 객체와 마찬가지로 라벨 인코더를 설정합니다:
le = LabelEncoder()
그 다음엔 스클런을 써야 한다.맞춤 _변형 함수. 의 우리가 단지 첫 번째 열을 인코딩 할 필요가 있다고 가정 해 봅시다. 우리는 할 것입니다:
X = le.fit_transform(X)
이 함수는 단지 조합.적합.변환 명령. .맞춤 소요 엑스(이 경우 첫 번째 열 엑스 때문에 우리의 엑스)모든 것을 숫자 데이터로 변환합니다. .변환은 그 변환을 적용합니다.
남은 것은 하나의 핫 인코더를 사용하는 것입니다. 고맙게도,그것은 우리가 방금 한 것과 거의 같습니다:
ohe = OneHotEncoder(categorical_features = )
X = ohe.fit_transform(X).toarray()
범주 형_공포는 우리가 하나의 핫 인코딩 할 열을 지정하는 매개 변수이며,우리는 첫 번째 열을 인코딩 할 이후,우리는 넣어. 마지막으로,우리는 바이너리로 변환하고,우리가 쉽게 앞으로 작업 할 수 있도록 배열로 설정합니다.
그게 다야! 그것은 꽤 간단합니다. 마지막으로 한 가지 메모는 첫 번째 열보다 더 많은 작업을 수행해야하는 경우,당신은 우리가 방금 한 일을하지만,대신 0 의 당신은 당신이 원하는 열을 넣어. 많은 열을 들어,당신은 루프에 넣을 수 있습니다:
le = LabelEncoder()#for 10 columns
for i in range(10):
X = le.fit_transform(X)
기계 학습 모험에 행운을 빕니다!