Вы можете иметь n+1+4
размерную векторную кодировку.Если вам необходим двоичный код, это может быть одним из способов сделать это.
Первые n
записи будут кодировать десятилетие.1
если оно принадлежит тому десятилетию, 0
иначе.Следующая запись (n+1)th
может быть 1
, если мужчина, и 0
, если женщина.Аналогично для расы: 1
, если она относится к этой категории, 0
, остальное.
Допустим, у вас есть до десятилетий до 100. Для 98 лет, мужчина, белый, вы могли бы сделать что-то вроде [0 0 0 0 0 0 0 0 1 1 0 1 0 0 0]
при условии, что вы начинаете с 10
года до 100
.
import numpy as np
def encodeAge(i, n):
ageCode=np.zeros(n)
ageCode[i]=1
return ageCode
n=10 # number of decades
dict_race={'w':[1,0,0,0],'b':[0,1,0,0],'a':[0,0,1,0],'l':[0,0,0,1]} # white, black, asian, latino
dict_age={i:encodeAge(i, n) for i in range(n)}
dict_gender={'m':[1],'f':[0]}
def encodeAll(age, gender, race):
# encode age
code=[]
code=np.concatenate([code, dict_age[age//10]])
# encode gender
code=np.concatenate([code, dict_gender[gender]])
# encode race
code=np.concatenate([code, dict_race[race]])
return code
например, encodeAll(12,'m','w')
вернет array([0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 1., 1., 0., 0., 0.])
Это немного более длинная кодировка, чем предложенные другие кодировки.