- Akbilgic O and Howe J. Symbolic Pattern Recognition for Sequential Data. Sequential Analysis. Accepted for publication.
- Akbilgic, O., Howe, J. A., Davis, R. L., December 2016. Categorizing Atrial Fibrillation via Symbolic Pattern Recognition. Journal of Medical Statistics and Informatics 4 (8), 1–9.
Everything was developed from first principals and the documentation in the articles. This code was not simply ported from the original MATLAB source code.
Several optimizations have been used, including efficient hash-based substring search and several recurrence relations between sequentially-sized lists of n-grams and pattern transition matrices.
thisSPR = SPRanal(['a','b','c'],'aabcabccbabcabcbaabc')
thisSPR.SetPTPParams(10,0.1,{'p':4241,'x':42}); print(thisSPR)
ngrams_2 = thisSPR.MakenGrams(maxn_p=2,only=True)
PTP_2 = thisSPR.BuildPTP(ngrams_2,ngramsRed=None)[0]
print(thisSPR.PrintPTP(PTP_2,ngrams_2,True))
thisSPR.BuildPTPs(True); print(thisSPR.PrintiPTP(1))
print('The next symbol should be: %s'%thisSPR.Predict(predStart=None)[0])
print('A similar sequence is: %s'%thisSPR.Simulate(20))
SstarSPR = SPRanal(thisSPR.alpha,'abcbaabcabccbabcabcb')
SstarSPR.SetPTPParams(10,0.1,{'p':4241,'x':42}); SstarSPR.BuildPTPs(True)
SstarstarSPR = SPRanal(thisSPR.alpha,'bcbabcbaababcbababcc')
SstarstarSPR.SetPTPParams(10,0.1,{'p':4241,'x':42}); SstarstarSPR.BuildPTPs(True)
print('dist(S,S*) = %0.2f'%thisSPR.Distance(SstarSPR))
print('dist(S,S**) = %0.2f'%thisSPR.Distance(SstarstarSPR))
print('dist(S*,S**) = %0.2f'%SstarSPR.Distance(SstarstarSPR))