One Hot Encoder

#1. get_dummies() on pandas dataframe.
예.
import pandas as pd
s = pd.Series(list('abcda'))
pd.get_dummies(s).T

0
1
2
3
4
a
1
0
0
0
1
b
0
1
0
0
0
c
0
0
1
0
0
d
0
0
0
1
0
인 코딩 지정 열
import pandas as pd
df = pd.DataFrame({
          'A':['a','b','a'],
          'B':['b','a','c']
        })
df
Out[]: 
   A  B
0  a  b
1  b  a
2  a  c

# Get one hot encoding of columns B
one_hot = pd.get_dummies(df['B'])
# Drop column B as it is now encoded
df = df.drop('B',axis = 1)
# Join the encoded df
df = df.join(one_hot)
df  
Out[]: 
       A  a  b  c
    0  a  0  1  0
    1  b  1  0  0
    2  a  0  0  1
pd.factorize( ['B', 'C', 'D', 'B'] )[0]
[0, 1, 2, 0]

#2. numpy eye()
import numpy as np

def one_hot_encode(x, n_classes):
    """
    One hot encode a list of sample labels. Return a one-hot encoded vector for each label.
    : x: List of sample Labels
    : return: Numpy array of one-hot encoded labels
     """
    return np.eye(n_classes)[x]

def main():
    list = [0,1,2,3,4,3,2,1,0]
    n_classes = 5
    one_hot_list = one_hot_encode(list, n_classes)
    print(one_hot_list)

if __name__ == "__main__":
    main()
[[ 1.  0.  0.  0.  0.]
 [ 0.  1.  0.  0.  0.]
 [ 0.  0.  1.  0.  0.]
 [ 0.  0.  0.  1.  0.]
 [ 0.  0.  0.  0.  1.]
 [ 0.  0.  0.  1.  0.]
 [ 0.  0.  1.  0.  0.]
 [ 0.  1.  0.  0.  0.]
 [ 1.  0.  0.  0.  0.]]

#3. tf.one_hot
import numpy as np
import tensorflow as tf

indices = [0, 1, 2]
depth = 3
T1 = tf.one_hot(indices, depth)  # output: [3 x 3]

indices = [0, 2, -1, 1]
depth = 3
T2 = tf.one_hot(indices, depth,
           on_value=5.0, off_value=0.0,
           axis=-1)  # output: [4 x 3]
#depth:   one hot  
#on_value: feature     ,  1
#off_value:       ,  0
#axis:     

indices = [[0, 2], [1, -1]]
depth = 3
T3 = tf.one_hot(indices, depth,
           on_value=1.0, off_value=0.0,
           axis=-1)  # output: [2 x 2 x 3]
with tf.Session() as sess:
    print(sess.run(T1))
    print(sess.run(T2))
    print(sess.run(T3))
    

[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
[[5. 0. 0. 0.]
 [0. 0. 0. 5.]
 [0. 5. 0. 0.]]
[[[1. 0. 0.]
  [0. 0. 1.]]

 [[0. 1. 0.]
  [0. 0. 0.]]]

#4. sklearn.preprocessing.OneHotEncoder
방법fit (self, X[, y])
Fit OneHotEncoder to X. fit_transform (self, X[, y])
Fit OneHotEncoder to X, then transform X. get_feature_names (self[, input_features])
Return feature names for output features. get_params (self[, deep])
Get parameters for this estimator. inverse_transform (self, X)
Convert the back data to the original representation. set_params (self, **params)
Set the parameters of this estimator. transform (self, X)
Transform X using one-hot encoding.
예.
from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder(handle_unknown='ignore')
X = [['Male', 1], ['Female', 3], ['Female', 2]]
enc.fit(X)
enc.categories_
enc.transform([['Female', 1], ['Male', 4]]).toarray() 
array([[1., 0., 1., 0., 0.],
       [0., 1., 0., 0., 0.]])
       #          ,    1 4    
enc.inverse_transform([[0, 1, 1, 0, 0], [0, 0, 0, 1, 0]])
array([['Male', 1],
       [None, 2]], dtype=object)
enc.get_feature_names()
drop_enc = OneHotEncoder(drop='first').fit(X)
drop_enc.categories_
drop_enc.transform([['Female', 1], ['Male', 2]]).toarray()
array([[0., 0., 0.],
       [1., 1., 0.]])

참고:
  • tf.one_hot
  • sklearn.preprocessing.OneHotEncoder
  • How can I one hot encode in Python?
  • 좋은 웹페이지 즐겨찾기