プログラミング
Pythonに慣れるためにSCWを書いた。前にPerlで書いたのは密な素性を前提にしていた。これだと不便なので今回は疎な素性を取るように変更した。 https://github.com/echizentm/ConfidenceWeighted
"ビジネスでもほとんど使われていない最新の統計モデル"とかいう謎なレッテルをはられてしまったことで話題の隠れマルコフモデル(Hidden Markov Model)を実装した。 NLPでのHMMは教師ありデータに対して使う場合が多いが、完全に品詞がわかっている場合はCRF…
SCWはまともに実装すると高次元密行列ができてしまう。なんだか対角成分だけでもいいんじゃないの的な話があったので試しに実装してみた。 対角成分だけだったら疎なままでもOKだし(今回の実装では密行列を想定しているけど)、これで充分に精度が出るならSCW…
CW(Confidence Weighted)を実装したので調子に乗ってSCW(Soft Confidence Weighted)も書いてみた。 SCWには1と2があって、それぞれL1,L2正則化っぽい感じのことをしている。今回はSCW1を実装した。 またCWは学習時に使う共分散行列が対角成分しかなかったの…
時代はSCW(Soft Confidence Weighted)らしいのだがCWさえまともに実装したことがなかった。これでは良くないということでCWを実装したので公開しておく。 https://github.com/echizentm/ConfidenceWeighted参考: http://www.cs.jhu.edu/~mdredze/publication…
学習器を実装しようとすると唐突に逆誤差関数(erf(誤差関数)の逆関数)が必要になったりする。 こんなときに慌てず騒がずコピペできるようにPerlで実装したものをメモしておく。
作ったプログラムのテストとかでまとまった数の乱数が欲しいことがある。値が重複しても良いならひたすら乱数を生成する関数(rand()とか)を呼べばいい。 ところが場合によっては同じ値が何回も出現すると困ることがある。こういう時のために重複のない乱数リ…
時代はテスト駆動開発(TDD)らしいので有名な単体テスト用フレームワークCppUnitを試してみた。 これまでテスト用コードは自前で書いていたのでフレームワークのありがたさを実感するなどした。ただCppUnitは「必ず書かないといけないコード」の量が何気に多…
最近、色々と学習器を作って遊んでいるときに気軽にコピペで使える疎ベクトル(sparse vector)クラスが欲しくなってきたので勉強を兼ねて書いてみた。必要最低限の機能は付いている(はず)。 サポートしている演算は加算(減算)とスカラー倍と内積の3つ。加えて…
故あって今更ながらTopCoderをはじめた。英語サイトということもあり、コーディングをはじめるまでに結構手間取ってしまった。とりあえず過去問を解いてみるまでの手順をメモしておく。
感覚を掴むためにperlでLDAを書いてみた。130行くらい。あくまで練習なので効率のよさとかは考えてない。とりあえず動いたよ的な。実装はBlei論文に書かれている変分ベイズ版を使った。 Latent Dirichlet Allocation D.M.Blei et al, 2003 なおディガンマ関…
そろそろXSをちゃんとやろうと思ったので、メモリ周辺のことが良くわからなくて放置していたsv_2mortal()やhv_store()のことについて調べた。 参考: perlguts http://www.kt.rim.or.jp/~kbk/perl5.005/perlguts.html
1行1エントリの巨大なデータから数千行サンプリングして小さいデータを作りたい、という問題が起きた。overlastさんにCoreutilsのshufを紹介していただいたので使ってみた。これは便利。 参考: http://www.gnu.org/software/coreutils/ http://ftp.gnu.org…
昨日書いたSVMのカーネルは線形カーネル(というかただの内積)だったので、多項式カーネルにパワーアップ!させてみた。 参考: perlでSGD版SVMを書いてみた - EchizenBlog-Zwei
SVM(Support Vector Machine, サポートベクターマシン, サポートベクトルマシン)をperlで書いてみた。 実装が簡単という理由からSGDによるオンライン学習を行っている。カーネル行列(グラム行列)をメモリに持っておかないといけないので本当の意味ではオンラ…
故あってmmapの調査をしていた。UNIX環境だとファイルディスクリプタを引数にmmapコマンドを呼ぶだけなのだけれどwindowsだとちょい面倒なAPIを呼ばないといけない。そんなわけで今後の利便性のためwindows版mmapのリーダークラスをメモしておく。
普段PHPは使わないのだが、故あってPHPのstringクラスのメソッドを調べていたらlevenshtein()なるものが。
次にC++ラッパーの作り方。 参考:http://www.johnkeiser.com/perl-xs-c++.html
perlの変数はスカラ値、配列、ハッシュの3つ。一方C/C++ではintやdouble、構造体、クラスなどが使われる。xsではC/C++のコードとPerlのコード間でこれらの変数をどのようにやり取りしているのかという話。生半可な知識で書いているので間違ってる可能性あり…
C/C++ライブラリのperlラッパーの作り方をメモ。まずは単純なCラッパーを。
Perlでクラスを書く方法をメモ。