Pour gérer des valeurs catégorielles dans un réseau de neurones, vous devez les représenter dans une représentation OneHot. Si elles sont des chaînes (comme cela semble être votre cas), vous devez d'abord les convertir en "représentation entière". Etape par étape:
En utilisant from sklearn.preprocessing import LabelEncoder,OneHotEncoder
vous définissez les valeurs de chaîne catégorielle
categorical_values = np.array([['Foo','bar','values'],['more','foo','bar'],['many','foo','bar']])
ensuite les encoder sous forme d'entiers:
categorical_values[:,0] = LabelEncoder().fit_transform(categorical_values[:,0])
categorical_values[:,1] = LabelEncoder().fit_transform(categorical_values[:,1])
categorical_values[:,2] = LabelEncoder().fit_transform(categorical_values[:,2])
Et utiliser OneHotEncoder
pour obtenir la représentation onehot:
oneHot_values = OneHotEncoder().fit_transform(categorical_values).toarray()
Définir votre graphique:
x_categorical = tf.placeholder(shape=[NUM_OBSERVATIONS,NUM_FEATURES],dtype=tf.float32)
weights = tf.Variable(tf.truncated_normal([NUM_FEATURES,NUM_CLASSES]),dtype=tf.float32)
bias = tf.Variable([NUM_CLASSES],dtype=tf.float32)
l2 = tf.add(tf.matmul(x_categorical,weights),bias)
et l'exécuter d'obtenir les résultats:
with tf.Session() as sess:
tf.global_variables_initializer().run()
_l2 = sess.run(l2,feed_dict={x_categorical : oneHot_values})
Edit: Comme demandé, version sans sklearn.
En utilisant simplement numpy.unique()
et tensorflow.one_hot()
categorical_values = np.array(['Foo','bar','values']) #For one observation
lookup, labeledValues = np.unique(categorical_values, return_inverse=True)
oneHotValues = tf.one_hot(labeledValues,depth=NUM_FEATURES)
Exemple complet sur le JN lien ci-dessous
Ici vous avez un ordinateur portable Jupyter avec le code sur mon Github
est fonction similaire disponible en flux tenseur? Je ne veux pas utiliser sklearn. –
@DilpreetSDhamija vient de mettre à jour la réponse mais, pourrais-je demander pourquoi vous ne voulez pas utiliser sklearn mais tensorflow oui? Juste curieux. – Alber8295