如果你對htm感興趣,我建立了乙個群,我們共同學習交流。515743445。
本文研究使用htm進行單變數的異常檢測,並嘗試復現了numenta的計程車異常檢測結果。numenta的異常檢測專案在這裡我們復現下的numentatm_nyc_taxi.csv的結果。
建議先閱讀readme對nab有個基本了解。
首先,在numentatm_nyc_taxi.csv中我們看到,該計程車檢測結果的異常分數一列,構成的圖形,清晰的顯示出了四個異常點,這與numenta的**中的圖形是一致的。
我們不使用nab提供的框架重複結果,採用直接呼叫algorithm的方式來復現。
**如下
from nupic.algorithms.spatial_pooler import spatialpooler as sp
from nupic.algorithms.backtracking_tm_shim import tmcppshim as tm
from nupic.encoders.random_distributed_scalar import randomdistributedscalarencoder
from nupic.encoders.date import dateencoder
from nupic.algorithms import anomaly
from datetime import datetime
import numpy as np
from tqdm import tqdm
from matplotlib import pyplot as plt
data_url = ""
path = "c:/users/mi/pycharmprojects/nupic-master/nab/"
data = "nyc_taxi.csv"
value = np.loadtxt(path+data,usecols=(1),delimiter=',',skiprows=1,dtype=np.int32)
time = np.loadtxt(path+data,usecols=(0),delimiter=',',skiprows=1,dtype=np.str)
sp = sp(inputdimensions=(454, 1),
columndimensions=(2048, 1),
potentialradius=2048,
potentialpct=0.8,
globalinhibition=true,
localareadensity=-1,
numactivecolumnsperinharea=40,
synperminactivedec=0.0005,
synpermactiveinc=0.003,
synpermconnected=0.2,
dutycycleperiod=1000,
booststrength=0.0,
seed=1956)
tm = tm( numberofcols=2048,
cellspercolumn=32,
initialperm=0.24,
connectedperm=0.50,
minthreshold=13,
permanenceinc=0.04,
permanencedec=0.008,
predictedsegmentdecrement=0.001,
newsynapsecount=31,
globaldecay=0.0,
activationthreshold=20,
seed=1960,
verbosity=0,
pamlength=3,
maxage=0,
maxsegmentspercell=128,
maxsynapsespersegment=128,
outputtype='normal',
)dateencoder = dateencoder(timeofday=(21, 9.49))
randomencoder = randomdistributedscalarencoder(resolution=422.03538461538466,seed=42)
def encode(date,value):
t = datetime.strptime(date[2:-3], "%y-%m-%d %h:%m")
datesdr = dateencoder.encode(t)
valuesdr = randomencoder.encode(value)
sdr = np.concatenate((datesdr,valuesdr))
return sdr
prdictivecolumns = np.zeros(2048)
x = np.arange(0,10320)
y =
for t, v in zip(time, value):#[:200]:
sdr = encode(t, v)
column = np.zeros(2048,dtype=np.int32)
sp.compute(sdr, true, column)
#print 'activatecolumns:',activatecolumns
prdictivecolumnssdr = tm.topdowncompute().copy()
prdictivecolumns = prdictivecolumnssdr.nonzero()[0]
#print 'prdictivacolumns:', prdictivecolumns
tm.compute(column, true,true)
activatecolumns = np.nonzero(column)[0]
activatecolumns = activatecolumns.astype(np.int32)
score = anomaly.computerawanomalyscore(activatecolumns, prdictivecolumns)
#print score
y = np.array(y)
plt.plot(x,y)
plt.show()
這裡有幾個注意點:
第一:我們使用nupic.algorithms.backtracking_tm_shim,該tm與標準tm實現不同,專門為異常檢測做了優化,但是該方法官方已不再維護。
第二:encoder,sp和tm使用的引數,來自getscalarmetricwithtimeofdayanomalyparams方法,實際讀取自nupic專案下的/src/nupic/frameworks/opf/common_models/anomaly_params_random_encoder/best_single_metric_anomaly_params_tm_cpp.json
第三:這些引數是numenta反覆試驗獲得的最優結果。
然後我們獲得了相同的結果:
很抱歉之前兩篇解讀sp和tm的文章寫的很雜亂,但是我不想改了。。。讀**嘛,一行行讀就是了,寫的還是很清晰的。裡面幾個核心類使用c++加速,但是並不影響閱讀。基本上到這裡再想深入學習htm,就要看numenta的最新**了,沒有成熟和結構良好的**和文件了。他們最新的幾篇**關於位置理論,其最新思想似乎是將位置訊號作為tm的偏置輸入,這樣相比於本文中將兩個編碼器的結構直接相連的效果要好。
android textview 使用html樣式
在textview中使用html樣式顯示,有些注意點,style沒有作用,比如在html這種樣式是可以的,但在textview的時候顯示不可以的。在string裡面的 這個符號一般要用 轉義字元 這樣用。html.fromhtml string 這個方法返回的是 spanned 要用html樣式的時...
使用BeautifulSoup解析HTML
通過css屬性來獲取對應的標籤,如下面兩個標籤 可以通過class屬性抓取網頁上所有的紅色文字,具體 如下 from urllib.request import urlopen from bs4 import beautifulsoup html urlopen bsobj beautifulsou...
使用BeautifulSoup解析html頁面
1 有很多開源庫以及python自動的htmlparser庫都可以解析html,簡單的功能,用哪個都一樣,看個人習慣,此處簡單介紹一下beautifulsoup的用法,詳細的用法可以參考官方文件 url 3 示例 from beautifulsoup import beautifulsoup imp...