タグ

2010年3月28日のブックマーク (4件)

  • Boost.Python の機能をざっと紹介してみる - moriyoshiの日記

    Boost の一部ながらも「実用的」すぎるため、とかくテンプレートメタプログラミングを愛好する諸兄から黙殺されてきた不幸のライブラリ、Boost.Python。Boost.勉強会でこいつの魅力を伝えようと思ったのだけど、時間の都合で無理だったので、簡単に紹介してみたい。 Boost.Python の基礎 Boost.PythonC++ のクラスや関数をラップする Python モジュールを恐ろしく簡単に書けるようにする、強力なライブラリである。 特に、Pyrex や Cython と比べて何がうれしいのかというと、 Python側にいちいちラッパ関数を書かなくてよい (テンプレートにより自動的に定義される) コンバータを登録することで、PythonC++の型の透過的な変換が容易にできる C++ のクラスを分かりやすい形で Python のクラスとして見せることが可能 といった点が挙

    Boost.Python の機能をざっと紹介してみる - moriyoshiの日記
  • SMO法でSVMの学習してみた - きちめも

    SMO法はPRMLに名前はあるけど詳細が無かったので、別の*1買ってきて読んで理解した気分になったのでコードを書いてみた。 コードはpythonで書いたのだが、アルゴリズム的に行列の計算が全く無かった。 実際に試した対象は学習データが200程度だったので、scipyとOpenOptで素直に2次計画問題を計算させた方が早かった気がしてもにょい。*2 データはPRMLのページからダウンロードしたものを使った。 今はRVMの節を読んでいる。まだ7章終わってない>ω<; #!/usr/bin/python # -*- coding: utf-8 -*- import sys import random from scipy import * from scipy.linalg import norm from scipy.io import read_array import matplotli

    SMO法でSVMの学習してみた - きちめも
    kabisuke
    kabisuke 2010/03/28
  • SVMの学習用アルゴリズムSMOを実装してみる - きしだのHatena

    SVMは2次最適化問題になるので、それを勉強してみてはということだったのですが、SVMに特化したSMO(Sequential Minimal Optimisation)アルゴリズムがあるということなので、そちらをやってみました。 SVMの制約条件に というのがあって、yiは正例なら1、負例なら-1となる値なのですが、そうすると、ようするにこの条件は、正例のαの合計と負例のαの合計が等しくなるということを示してるわけです。 この条件をつかうと、ひとつαを操作したときには、ほかのαを操作して、正例と負例のバランスを取る必要があることがわかります。 で、このことを利用して、同時に2つのαを操作することにすると、解析的に一つ目のαが求められて、2つ目のαはそこから足し算引き算で求められてお徳かも、というのがSMOの考え方です。 問題は、いかに効率よく更新する2つのαを決めるかということになります。

    kabisuke
    kabisuke 2010/03/28
  • SVMコード

    SVM(SMO法)のコードを載せておきます。理論についてはこちらをどうぞ。 2011.9.18追記: ここでも書いたのですが,引数 target は -1 or 1 と設定頂く方が正しいはずです。(理論的にも正しいはず) 初出時は簡単なテストデータで動作確認を行っていたためか 0 or 1 でも動作確認が取れていたよう記憶しています。格的に学習させる場合には 0 or 1 では学習が収束しませんでした。 大まかな流れ SMOではラグランジュ未定乗数が教師データの数量分作成されます。これらを下記の処理フローで更新していきます。 ラグランジュ乗数の更新評価は1つずつ順番に行い,全ての評価を終えたところで実際に更新が行われたかをチェックします。1件でも更新したものがあれば,更新の作業を続けていきます。 下記のコードでは,個々のラグランジュ未定乗数の更新チェックはexaminUpdate()で行

    SVMコード
    kabisuke
    kabisuke 2010/03/28