xiangze's sparse blog

機械学習、ベイズ統計、コンピュータビジョンと関連する数学について

Python, Sympyを用いたVanishing Component Analysisの実装(と動作)

未だ挙動が怪しいですが、Pythonの数式処理ライブラリSympyを用いて Vanishing Component Analysis(論文pdf)を実装しました。
Sympyは可読性が高いのが利点ですが、速度を考慮した実装ではないため特に次数の高い多項式まで求めようとした場合にどんどん動作が遅くなってしまいます。
また動作に未だ不審な点があります。

既知の問題点

  • 速度が遅い
    • pure pythonで実装されており、抽象度の高いことも実現できるSympyの問題と思われますが、
  • Errorを吐いて落ちる場合がある。
  • x^2+y^2=0のような単純な多項式+noiseのデータを入力してもかなり複雑なVanishing componentとしてかなり複雑な多項式が返ってきてしまう。
  • Sympyではlimit関数で変数に代入ができますが、多変数多項式の変数に一括して代入する方法がすぐに見つけられなかったので独自実装してしまいました(一方でsumが使えます)。

今後

デバッグとともに得られたVanishing componentのプロットをsympy単体またはmatplotlibで行いたいです。

link

どんなデータでも(※)線形分離可能にしてしまう技術,Vanishing Component Analysis(ICML 2013)を紹介してきました
Rのほうが1行が長いせいか行数が少なく、またライブラリに依存せずに書けるようです。
R で Vanishing Component Analysis - Mi manca qualche giovedi`?
Vanishing Component Analysis を試作してみました 塚原裕史のブログ matlabです。componentのプロットがされています。

Pythonの数式処理ライブラリについてまとめました。C++で実装されたより速そうながあるようです。
Groebner bases in Python
Groebner基底の紹介です。
駆け足で読む『What is … a Grobner Basis?』

おまけ?

論文pdf擬似コードの間違い

  1. FindRangeNull(Figure 2.)の添字 t->i
  2. D_ij -> D_ii (そもそもDの非対角要素は0)