PyUblasとBoost.Pythonを使ったDTWの実装

PyUblasを試すために, 今回は距離関数の一つであるDTW(Dynamic Time Warping)を実装する. DTWの説明は余所で読んでもらうとして, まあ2つの長さが異なるベクトルx,y の距離をO(|x|×|y|)で計算するアルゴリズムだと思ってもらえばいい. 今回はパフォーマンス…

Boost.Pythonでtupleとlistの返し方

こう namespace py = boost::python; py::list test() { py::list l; l.insert(0,1); l.insert(0,make_tuple(2,3)); return l; }参考ページ: Boost.Python.list

PyUblas を使う

PyUblasはBoost.PythonとNumpyの間のデータ受け渡しをサポートする素敵ライブラリーだ. かなり便利. インストール方法は, 公式ドキュメントを参照. ただ, インストール過程で何箇所か戸惑う所があった. まず, コンパイルエラーが出たことと(const変数から非c…

Boost.PythonとNumPy Array (C API編)

Boost.PythonでNumPyのarrayを受け取る手段として, NumPyが提供するCのAPIを使うという手がある. 使いづらいが機能的には完全であることと, CとPythonを協調して使う際の知見となるため, 記録を残しておく.基本的な使い方はこちらのページを見ればわかる. Bo…

Boost.Pythonの使い方とNumpy/Scipy arrayの渡し方

scipyで書いたプログラムでも一部が遅くてそこをC++で実装したいというシナリオはよくある. それには色々な手段があるというのは以前の日記でも紹介した通り. 今回はBoost.Pythonでscipy/numpyのarray(ndarray)を取り扱う方法を説明する. 基本的な使い方はbo…

ラグランジュの未定乗数法における行列で表現される制約

みたいな制約があるときのラグランジュの未定乗数法は, という項を付け加えれば良い. 当たり前なんだけど忘れちゃうんだよなー. マジ修行不足

総和とtraceの関係

数学の忘れがちなことをメモしていくシリーズ. 今回は, PCAの証明で出てくる総和をtraceに変換する奴. 複数行にまたがる証明を書く楽なやり方がわからない・・・.数式の埋め込み方はこちらのサイトにお世話になっています. はてなダイアリーのtex記法は綺麗…

Pythonでkcachegrindを使ったパフォーマンス分析

Pythonでは, cProfileを使えばパフォーマンス分析ができるっぽいけど, やっぱりGUIでやりたいよねってことで, kcachegrindでパフォーマンス分析結果を見る方法を調べた. このページを見れば, だいたい載ってる.必要なのは kcachegrind pyprof2calltree 前者…

google-perftoolsの使い方

C++プログラムのパフォーマンス解析をgoogle-perftoolsを使ってやった.公式ドキュメントによると, LD_PRELOADを使う方法は非推奨らしいんだけど, 動的リンクする方法ではなぜかうまくいかなかった.まず, 関連パッケージをaptでインストール. そしてCPUPROFIL…

PythonからlibSVMを使うべきじゃなかったー!

うおー, このページ曰く, libSVMがSWIGを使って提供しているPythonインターフェイスはscikits-learnが提供しているインターフェイスより遅いらしい. そもそも実装が同じだったらscikits-learn使うし, これはlibsvmを直接使わない方がいいっぽいなぁ.

Boost.Pythonを使う 第1回?

Pythonを使っていると, Python遅い・・・ -> C++で一部のメソッドだけ実装したいというシナリオはかなりの人が通る道だと思う. だが, その手段がありえぬ程多い・・・. pythonとc++のインターフェイスの比較という記事を参考にした結果, とりあえずBoost.Pyt…

Pythonによるリアルタイムグラフ描画とマイクからの読み取り

なぜかマイクからの読み取りとリアルタイムグラフ描画を混ぜる. マイクからの読み取り ライブラリとしてpyaudioを使用した. aptで入る. 以下のプログラムはほとんど公式のサンプル通りだけど, 2秒マイクから音を受け取って, グラフに描画する. import pyaudi…

pythonからSVMライブラリ, libsvmを利用

このライブラリは世間の方々が頑張ってくれているのでわかりやすかった.補足: こっちの方がよかった・・・ 後の方の日記参考にしたページ: イントロダクション パラメーター一覧 それぞれのSVMの簡単な説明

ghmmにおける過学習の回避

ghmmで特徴ベクトルの次元数を大きくすると, BaumWelchアルゴリズムの結果がnanでいっぱいになってしまう. これは, 過学習が起こった際の数値的不安定さが原因と考えられる. (違うかも)そこで, 出力分布の共分散行列を対角行列に制限することで, パラメータ…

ghmmのソースコードリーディング

まだ, 編集中Pythonから呼ぶときにエラーメッセージが出るため, その原因を解明するためちょっとだけghmmのソースコードを読むことにした. 下はあいまいに読んだものなので間違っていても許してください.なお, ソースコードを読む際にBaumWelchの更新式が手…

ghmmにおいて観測変数の次元数が大きい場合に遅くなる問題

ghmmで観測系列の次元数を25次元にしたら, 話にならない程遅くなった. これは公式メーリングリストで言及されている問題で, 簡単に解決できる. 遅くなるのは, ghmm.HMMFromMatrices(values,ghmm.MultivariateGaussianDistribution(values),A,B,pi) この初期…

64bit UbuntuのChromeでFlashがクラッシュする

Flash Playerのバージョンをあげることで解決. 以下のサイトを参照 64bit Linux の Chrome に flash player plugin を導入する方法 - IKB: 雑記帖

初めてのGreaseMonkey

Twitterのホームに, The Interviewsへのリンクを追加するGreasemonkeyを作成(http://userscripts.org/scripts/show/114020). Twitterのscreen_nameとThe InterviewsのIDが同じ場合, 名前の下にリンクが出現する.初めてGreasemonkeyを書いたけど, 結構楽しい.…

ghmmにおける多次元連続確率分布の取り扱い

ghmmでろくに説明のない連続確率分布の取り扱いに関する解説. 大まかな説明は前回のページPythonからのHMMライブラリの利用 - Risky Duneを見ていただきたい. 以下のサンプルでは, 状態数2でそれぞれの状態において2次元の正規分布から値を出力するHMMを生成…

PythonからのHMMライブラリの利用

PythonからHMM(隠れマルコフモデル)ライブラリであるghmmを利用する方法の紹介です. インストール方法は公式ページhttp://ghmm.org/を参照.次のサンプルコードは, いかさま師をモチーフにしたHMMを生成しています. HMMの出力はいかさま師のサイコロの目に相…