カテゴリーエンコーダー

Category Encoder

入力のカテゴリをエンコードするには、ScalarEncoderまたはRandom Distributed Scalar Encoder (RDSE)を作成し、パラメータ category=True を設定します。

そして、エンコードする前にカテゴリを整数に列挙します。

簡単のため、カテゴリーの各要素の順番を数値に置き換えて、実際にやってみましょう。要素0は"unknown"のために予約しておきます。

ここではスカラーエンコーダーよ使用します。パラメーターのカテゴリーを True で指定します。パラメータの最小値と最大値によってカテゴリーの数が決定されます。

python3
from htm.bindings.encoders import ScalarEncoder, ScalarEncoderParameters
from htm.bindings.sdr import SDR

categories = ("unknown","cat", "dog", "monkey", "slow loris")

scalarEncoderParams = ScalarEncoderParameters()
scalarEncoderParams.minimum = 0
scalarEncoderParams.maximum = 5
scalarEncoderParams.activeBits = 3
scalarEncoderParams.category = True

enc = ScalarEncoder(scalarEncoderParams)

エンコーダーのパラメータの指定ができました。カテゴリーの要素に合わせた数値をエンコードします。

python3
print ("cat =       ", enc.encode(1))
print ("dog =       ", enc.encode(2))
print ("monkey =    ", enc.encode(3))
print ("slow loris =", enc.encode(4))

エンコードされたSDRは以下のようになります。パラメータの最小値と最大値、そしてオンビット数を指定したので自動的にSDRサイズがエンコードされます。

bash
cat =        SDR( 18 ) 3, 4, 5
dog =        SDR( 18 ) 6, 7, 8
monkey =     SDR( 18 ) 9, 10, 11
slow loris = SDR( 18 ) 12, 13, 14

各カテゴリーをまとめたSDRを可視化してみます。

図3-4

Numpy配列に形式を変換してみます。

python3
print ("cat =       ", enc.encode(1).dense)
print ("dog =       ", enc.encode(2).dense)
print ("monkey =    ", enc.encode(3).dense)
print ("slow loris =", enc.encode(4).dense)
terminal
cat =        [0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0]
dog =        [0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0]
monkey =     [0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0]
slow loris = [0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0]

最終更新