one-Hot encoding
인코딩(Encoding)
카테고리 값이나 텍스트 정보를 저리가 쉬운 정수로 변환하는 과정
one-hot 인코딩은 one-of-k라고도 하며 0~k-1의 값을 가지는 정수 스칼라 값을 0 또는 1을 가지는 k차원(클래스수 =k)의 벡터로 변환합니다. 예로서 자료의 목록이 0~2의 범위를 가지는 경우에서 값들이 0, 1, 2라면 다음과 같이 변환됩니다.
0: 1,0,0
1: 0,1,0
2: 0,0,1
1: 0,1,0
2: 0,0,1
- import numpy as np
x=[0, 1, 2]
x_oh=np.zeros((3,3));x_oh
- array([[0., 0., 0.],
- [0., 0., 0.],
- [0., 0., 0.]])
for i, j in zip([0,1,2], x):
- x_oh[i, j]=1
- array([[1., 0., 0.],
- [0., 1., 0.],
- [0., 0., 1.]])
tensorflow.one_hot()
tf.one_hot(indices, depth, on_value=None, off_value=None, axis=None, dtype=None, name=None)
depth의 지정한 위치(indices)에 지정한 값(on_value), 나머지 위치에 off_value값을 입력합니다.
on_value와 off_value의 기본값은 1과 0입니다.
depth는 axis의 값에 따라 유동적입니다.
- indice가 feature 즉, 1차원으로 구성된 경우
- axis=-1 → feature × depth
axis=0 → depth × feature - axis=-1 → batch × feature × depth
axis=1 → batch × depth × feature
axis=0 → depth × batch × feature
indice가 2차원 즉, [batch, feature]일 경우
- tf.one_hot([0,1,3], depth=4)
- <tf.Tensor: shape=(3, 4), dtype=float32, numpy=
array([[1., 0., 0., 0.],
- [0., 1., 0., 0.],
- [0., 0., 0., 1.]], dtype=float32)>
tf.one_hot([0,1,3], depth=4, axis=0)
- <tf.Tensor: shape=(4, 3), dtype=float32, numpy=
array([[1., 0., 0.],
- [0., 1., 0.],
- [0., 0., 0.],
- [0., 0., 1.]], dtype=float32)>
tf.one_hot([[1,2],[1,3]], depth=4, \
on_value=True, off_value=False, axis=-1)
- <tf.Tensor: shape=(2, 2, 4), dtype=bool, numpy=
array([[[False, True, False, False],
- [False, False, True, False]],
- [[False, True, False, False],
- [False, False, False, True]]])>
tf.one_hot([[1,2],[1,3]], depth=4,\
on_value=True, off_value=False, axis=1)
- <tf.Tensor: shape=(2, 4, 2), dtype=bool, numpy=
array([[[False, False],
- [ True, False],
- [False, True],
- [False, False]],
- [[False, False],
- [ True, False],
- [False, False],
- [False, True]]])>
tf.one_hot([[1,2],[1,3]], depth=4, \
on_value=True, off_value=False, axis=0)
- <tf.Tensor: shape=(4, 2, 2), dtype=bool, numpy=
array([[[False, False],
- [False, False]],
- [[ True, False],
- [ True, False]],
- [[False, True],
- [False, False]],
- [[False, False],
- [False, True]]])>
댓글
댓글 쓰기