2017-07-12 1 views
2

私は自分の機械学習プロジェクトに取り掛かっていたときに、ラベルをワンホットベクトルにするコード行を探していました。私はRedditのu/benanneからのこの素晴らしいコード行を見つけました。例えばこのワンホットベクトル変換はどのように機能しますか?

np.eye(n_labels)[target_vector] 

target_vector = np.array([1, 4, 2, 1, 0, 1, 3, 2])のために、それはワンホットコーディングされた値を返します。

np.eye(5)[target_vector] 
Out: 
array([[ 0., 1., 0., 0., 0.], 
     [ 0., 0., 0., 0., 1.], 
     [ 0., 0., 1., 0., 0.], 
     ..., 
     [ 0., 1., 0., 0., 0.], 
     [ 0., 0., 0., 1., 0.], 
     [ 0., 0., 1., 0., 0.]]) 

それは間違いなく仕事をしていますが、私はそれがどのように動作するかまたは、なぜわかりません。

+0

です。 –

+0

[トップ投票のSO質問]の2番目の回答です(https://stackoverflow.com/questions/29831489/numpy-1-hot-array)。 1H-1HAをうまく処理しているので –

答えて

4

これはかなり簡単です。 np.eye(n_labels)は、サイズがn_labelsの単位行列を作成し、target_vectorを使用して、その行列から現在のターゲットの値に対応する行を選択します。恒等行列の各行には正確に1つの1要素が含まれ、残りの部分は0であるため、各行は有効な「1つのホットコーディング」になります。

0

ndarray[[0]]はndarray

t = np.arange(9).reshape(3,3) 
print t 
print t[[1]] 

出力の最初の行を選択することで、私はOHVsを生成するためのエレガントな方法を見たことがない

[[0 1 2] 
[3 4 5] 
[6 7 8]] 
[[3 4 5]] 
関連する問題