htmresearch's People
htmresearch's Issues
系列間の相互情報量を反映したネットワークへの対応
適当にモデル化したものは #30 で学習まで行えるようにしたが、
相互情報量を反映したモデルについてはまだなので、やる。
多変量の場合のHTMのチューニング
とにかく元々のHTMの論文に載っているやり方でどこまでいけるか
動的・単変量の場合の確率伝播法
原論文に書いてはあるけどなんか微妙。
一応アイデアはあるのでそれを実装してみてうまくいくか試したい。
ResultsVisualizationを使えるように
結局使えるようになってない
画像のパスの問題なので何とかする
C#のusing周りの調査
staticメソッドを含むプロジェクトをリファレンスに加え、他のプロジェクトからusingしようとしても、うまく行ったり行かなかったりする。しかもその法則に全然規則性が感じられない。
RelationAnalyzer のリファクタリング
非常に汚い
できればstaticメソッド群にしたい
Spatial Poolingをソフト割り当てに
DetectorForWaterTreatmentPlant のリファクタリング
Hamming距離の実装
Level2以上でも離散化は必要か考える #53 で使う
データの素性の分析
#42 でも書いたが、データの素性を調べたほうがよいかもしれない。
とりあえずHTMでの多変量の外れ値検知をやってみてから。
状態が確率的なときに遷移確率をどう計算するか考える
掲示板に投稿した質問を再掲。
分かりづらいかもしれないんですが、以下はHMMのモデルを図示したものです。
この図で、観測がデータ点、隠れ状態がクラスタだと考えてください。
生成確率Gはクラスタの割り当てを示す行列です。ここで、生成確率Gと、すべての時刻を通じての各観測値は既知とします。
このような状況において、隠れ状態の遷移確率Tを求めることを考えたいです。もしクラスタリングがハードクラスタリングだったら、
観測が与えられればそれに対応するクラスタが必ず一つ決まるので、
それを数え上げれば上位のノードの遷移確率を計算することができました。しかし、クラスタリングがソフトクラスタリングだった場合、
隠れ状態の遷移確率はそのように単純には求まりません。このような場合に、正しく隠れ状態の遷移確率を求める方法はあるでしょうか?
一応、Gの疑似逆行列を計算すれば、行列計算で求まるのかなと思ったのですが、行列のランクが見かけより低いときに不安が残ります。
Sampling.CalcSamplePoints のリファクタリング
欠損値対応で汚くなった
欠損データへの対応
NaNがあるとクラスタリングもできないし離散化もできない。
Sampling時に対応すればよいと思われる。
TPでのクラスタリングのファジー化
加えて、そういう場合に顕在化するであろう問題の整理。
特に多変量の場合に上の階層の遷移確率を学習させるのが大変そう。
動的・多変量の場合の確率伝播法
一応長期的な目標。
ここまでやったら大目標を立て直す。
多変量・時系列の異常検知のデータセットの調査
現在は以下のデータセットを使っているが、もっと有名なデータセットがあればそれを使いたい。
動画(画像+音声)でもいいはずなのでそれのベンチマークもないか検討。
あとはNASAのデータセットから何かいいのが探せないか……
K-medoids法の実装
いつかは必要だと思ってはいた。
「Level2以上でも離散化は必要か考える #53」で使うことになりそうなので、やる。
やることとやらないことを決める
HTMに関してどこまでやるのかを決める。
現在(3/14)のプログラム
- ネットワーク構造はハードコーディング
- Temporal Poolingはハード割り当て
- Spatial Poolingはハード割り当て
- メモされた入力にしか対応していない
オリジナルの論文
- Temporal Poolingはハード割り当て
- 上位のノードでメモする必要があるため、結局1-hotベクトルにする。
- Spatial Poolingはソフト割り当て
- 学習時はメモしているので1-hotだが、推論時にはソフトになる
- 未知の入力にも対応している
結果の可視化を一括に
単一のhtmlから見るデータを選んで見られるようにしたい
静的・多変量の場合のパラメータ学習
とりあえずハードクラスタリングなら数え上げで行けるはずなのでそれをやる。
ファジークラスタリングでうまくいくかは微妙。
行列演算でうまくいくと思っていたがランクが行列の大きさより小さいときに問題が起こりそう。
要検討。
KLダイバージェンスによるファジークラスタリング手法の調査
以下のイシューに関連する調査
- TPでのクラスタ割り当てのファジー化 #31
連続値の相互情報量の算出方法
時間的な予測の評価のために、予測値と実測値の相互情報量を出したりしていますが、今は離散値に丸めて相互情報量を出してしまっているので、連続な場合にも使える手法がないか調べたい。
下のサイトを見ると、連続値を離散化する方法と、何らかの分布を仮定する方法がある様子。
確かに正規分布を仮定したほうが、離散値に丸めるより数値のわずかなブレに柔軟に対応できるかもしれない。
欠損値の扱い
今はNaNという値として使ってしまっているが、「NaNであること」と「情報がないこと(他のどんな値でもありうる)」は違うのでそれを反映した実装にすべき。
確率伝播法実装
多変量の場合に系列間の相互情報量を出す
ネットワークの構成を考えるときに、相互情報量が高いノードからまとめていくとうまくいく気がする。
IndexOfを使わない書き方にする
@herumi さんよりアドバイスいただいた内容に沿って書き換える。
C#的には
・double.NaN == double.NaNはfalseでdouble.NaN.Equals(double.NaN)はtrue
・listなどのIndexOfはEqualsを使って検索している
ことから、double[]にNaNが含まれているときにそれが見つかるのはOKだと思います。ただ口頭でいいましたが、浮動小数点数の厳密比較をするのは避けた方がよいため、
if (fabs(a[i] - value) < 1e-6) { return i; }
のようなコードを作った方が安全だと思います。
欠損値もNaNではなく10^300のようなデータに含まれない十分大きな値としたほうがよいでしょう。
後者の理由はCPUによってはNaNを扱うととても遅くなることがあるため。
https://cybozulive.com/1_264054/gwBoard/view?bid=1%3A5080491&fid=28320366&focusOn=follow
離散化でのクラスタリングのファジー化
これをやったときにどうやって遷移確率を計算するかも考える。
Baum-Welch実装
群平均法実装
閾値法の実装
#62 の一環
それぞれの系列について閾値法を適用し、k個以上の系列で異常があったら全体としても異常として扱う
testデータ対応
LeafNodeでtrainStreamとtestStreamを受け取れるように
系列間の相互情報量の可視化
いい感じに可視化する方法を考える。
Rのパッケージを参考にしてもいいかもしれない。
DetectorForWTPのリファクタリング
現在、メソッドに分離できる処理は可能な限り分離してきたが、DetectorForWTPやHTMDetectorクラスだけは非常に複雑なクラスになってしまっている。
プロトタイピングのため仕方ないと思っていたが、デバッグしづらい。
解決できる手段がないか考える。
モデルベースなライブラリへの書き換え
kerasみたいにネットワークを楽にかけるようにしたい
このリポジトリは調査用と割り切ってad hocな書き方で通して、
使いやすさとかを考えるのはアルゴリズムが固まってから別のリポジトリを作ってやるべきかもしれない。
K-medoids法の単体テストを書く
K-medoids法の実装 #65 に関係して
K-medoids自体必要ない説があるので必要になったらでよい
多変量のいい感じの可視化
より親切な可視化の方法は #32 同様別リポジトリでやるにしても、
結果を分析するのに多変量の可視化は必要。どうやるか。
静的・多変量の場合の確率伝播法
理論的には問題なさそう。
行列積で表現できる。
多変量な場合の既存手法の実装
- 閾値法 #63
- 井手さんの Graphical lasso?
multily-connectedな場合の確率伝播法の調査
閉路(loopback)がある場合はそもそもベイジアンネットワークではないが、無向化したときに閉路が生じるような場合(multiply-connected)には確率伝播法は厳密には適用できない(つまりpolytreeでないと無理)。と思っていたが、出来る可能性もあるので、きちんとリサーチすべき。
HTMの原論文(Georgeの博論)でやられているやり方を完全には理解できていないのできちんと吟味すべき。
自分なりの閉路の解消方法も考えているのでそれも試したい
Level2以上でも離散化は必要か考える
グラフィカルlassoの実装
およびWater Treatment Plantデータへの適用。
井手さんの本にも含まれている。
機械学習勉強会で発表したいかもです
系列同士を相互情報量でクラスタリング
#36 に書いただが、系列同士を相互情報量を基準としてAHCでクラスタリングすることで、HTMのネットワーク構造を決めるときのヒントを得られそう。
とくに凝集型階層的クラスタリングを使えばデンドログラムをそのままネットワークに使えそう。
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.