分類アルゴリズムの実装方法

Classifier algorithms Tutori

分類アルゴリズムを実装します。分類アルゴリズムを使うためには、ラベルとデータのセットが必要になります。ここでは "cat", "dog", "monkey", "slow loris" の4つのラベルを用意します。

python3
import numpy as np
from htm.bindings.encoders import ScalarEncoder, ScalarEncoderParameters
from htm.bindings.sdr import SDR
from htm.algorithms import SpatialPooler as SP
from htm.bindings.algorithms import Classifier

categories = {"cat":0, "dog":1, "monkey":2, "slow loris":3}

スカラエンコーダーを定義します。4カテゴリーでカテゴリーあたり4ビットで指定しました。

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

enc = ScalarEncoder(scalarEncoderParams)

SPのパラメーターを設定します。

python3
inputSDR  = SDR( dimensions = (15, ) )
activeSDR = SDR( dimensions = (256, ) )
sp = SP(inputDimensions  = inputSDR.dimensions,
        columnDimensions = activeSDR.dimensions,
        localAreaDensity = 0.02,
        globalInhibition = True,
        seed             = 1,
        synPermActiveInc   = 0.01,
        synPermInactiveDec = 0.008)

分類アルゴリズムを定義します。

python3
clsr = Classifier()

バッジサイズを3で指定します。SP層の学習・推論とあわせて、分類器も学習します。

python3
batchSize=3
for n in range(batchSize):
    for i in range(len(categories)):
        inputSDR=enc.encode(i)
        sp.compute(inputSDR, True, activeSDR)
        print("Active Outputs: ",activeSDR)
        clsr.learn( activeSDR, list(categories.values())[i]  )
        print("Classifier learn: ",list(categories)[i] )

"cat"カテゴリーから一部アクティブセルが欠落し、"dog"の要素を含んだSDRを作成してテストしてみます。

python3
catdog=[1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0]
inputSDR = SDR(dimensions = (16, ))
inputSDR.dense = np.array(catdog)
print(inputSDR)
terminal
SDR( 16 ) 0, 1, 3, 5

分類器で分類します。

python3
sp.compute(inputSDR, False, activeSDR)
print("Active Outputs: ",activeSDR)
pdf = clsr.infer( activeSDR )
print("PDF: ",pdf)
predict = list(categories)[np.argmax( pdf )]  
print("predict index: ",predict)
terminal
Active Outputs:  SDR( 256 ) 208, 217, 223, 240, 248
PDF:  [0.2505001278091129, 0.25024944045838127, 0.24962522343597998, 0.24962522343597998]
predict index:  cat

"cat"と分類されました。PDFを可視化してみます。

図4-6

"dog"を表す"1"の部分が反応しているのが分かります。バッジサイズ3で学習したのでこの結果になっていますが、学習回数が進み、シナプスの結合が強化されると"dog"への反応はなくなりますので注意してください。

最終更新