tensorflow에서 하나의 핫 인코딩은 무엇입니까?


11

나는 현재 tf.one_hot (indices, depth)을 사용한 tensorflow 과정을 진행하고 있습니다. 이제이 지수가 어떻게 이진 순서로 바뀌는 지 이해할 수 없습니다.

누군가 나에게 정확한 과정을 설명해 줄 수 있습니까 ???

답변:


14

데이터 세트에 범주 기능 (예 : 색상)이 있다고 가정합니다. 샘플은 빨간색, 노란색 또는 파란색 일 수 있습니다. 이 인수를 ML 알고리즘에 전달하려면 먼저 문자열 대신 숫자를 갖도록 인코딩해야합니다.

이러한 작업을 수행하는 가장 쉬운 방법은 다음과 같은 위치에 매핑을 만드는 것입니다.

빨간색-> 1
노란색-> 2
파란색-> 3

각 문자열을 매핑 된 값으로 바꿉니다.

그러나 숫자를 처리 할 때 파랑> 노랑 (3> 2이기 때문에) 또는 빨강 + 노랑 = 파랑 (1 + 2 = 3이기 때문에)으로 생각할 수있는 것처럼 ML 모델에서 원하지 않는 부작용을 일으킬 수 있습니다. 모델은 이러한 데이터가 범주 형이고 정수로 매핑되었음을 알 방법이 없습니다.

이 문제에 대한 해결책은 N 개의 새로운 기능 을 생성하는 원핫 인코딩입니다 . 여기서 N 은 원래 기능의 고유 한 값의 수입니다. 우리의 시험에서 N 은 3과 같습니다. 왜냐하면 우리는 3 개의 고유 한 색 (빨강, 노랑, 파랑)을 가지고 있기 때문입니다.

이러한 각 기능은 이진이며 이러한 고유 한 값 중 하나 에 해당 합니다. 이 예에서 첫 번째 기능은 샘플이 빨간색인지 아닌지를 알려주는 이진 기능이며, 두 번째는 노란색과 세 번째는 동일합니다.

이러한 변환의 예는 다음과 같습니다.

이 접근 방식은 데이터 집합의 차원을 증가시키기 때문에 많은 고유 값을 취하는 기능이있는 경우, 위에서 제시 한 것과 같이 더 희소 한 인코딩을 사용하고자 할 수 있습니다.


3

depth : 하나의 핫 차원의 깊이를 정의하는 스칼라.

지수 : 지수 텐서.

이 예제는 tensorflow 설명서에 나와 있습니다.
1. 인덱스와 깊이 만 지정 (on_value의 기본값은 1, off_value는 0)

 indices = [0, 1, 2]
    depth = 3
    tf.one_hot(indices, depth)  # output: [3 x 3]
    # [[1., 0., 0.],
    #  [0., 1., 0.],
    #  [0., 0., 1.]]
  1. on_value 및 off_value 지정
지수 = [0, 2, -1, 1]
깊이 = 3
tf.one_hot (표시, 깊이, on_value = 5.0, off_value = 0.0, axis = -1)
## 출력 : [4 x 3]
    # [[5.0, 0.0, 0.0], # one_hot (0)
    # [0.0, 0.0, 5.0], # one_hot (2)
    # [0.0, 0.0, 0.0], # one_hot (-1)
    # [0.0, 5.0, 0.0]] # one_hot (1)

GitHub 에서 코드를 볼 수도 있습니다


tf 문서는 더 이해하기 쉽습니다
dturvene
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.