Python

scikit.learn手法徹底比較! 決定木編

今回は決定木を用いて手書き文字データの分類を行う.決定木の詳細はあらゆる所で解説されているので適当に調べて欲しい. このPDFを参考にしたけど, いい資料かは微妙. 決定木は各節に質問が, 葉にクラスラベルが結び付けられている木(データ構造の木)であ…

scikit.learn手法徹底比較! K近傍法編

今回はK近傍法を用いて手書き文字データを分類する.K近傍法は, あるデータのクラスを分類する際に, そのデータから距離が近い順にK個訓練集合からデータを取り出し, それらのラベルの投票によって分類対象のラベルを決定するシンプルなアルゴリズムである.一…

scikit.learn手法徹底比較! ナイーブベイズ編

scikit.learnの分類手法を比較するこの企画. 今回はナイーブベイズを検証する.ナイーブベイズはi番目の入力ベクトルの各次元が, クラスラベルが与えられると互いに独立, すなわち となると仮定する分類手法である. ただし, はの次元数, はi番目の入力ベクト…

scikit.learn手法徹底比較! SVM編

問題設定や細かい実験手法は下のページを参照. scikit.learn手法徹底比較! イントロダクション今回は言わずと知れたSVM(サポートベクターマシン)を試す. 訓練データ数を増やしていったときに, 手書き文字の分類性能がどのように推移していくかを調べる.SVM…

scikit.learn手法徹底比較! イントロダクション

MNIST手書き文字データセットを利用してscikit.learnのsupervisedな分類アルゴリズムを比較する. パラメーターチューニングや計算時間の感覚が掴みたくて, 1回やってみたかった.MNIST手書き文字データセットとは, 機械学習初学者が何故か必ず与えられると言…

raw data(バイナリ列や数値列)を画像として表示する

Pythonでraw data(バイナリ列や数値列)を画像として表示する. 今まではOpenCVを用いていたが, インストールされていない環境も多そうなので, 今回はPIL(Python Imaging Library)とPyGTKを用いた. PILのみ用いる場合 数値のリストからnumpyのarrayを経由してP…

Theano 解説

「Deep Learning Implementation」でググるとトップに出てくることで, たまに話題になるライブラリ Theano について簡単に調べたので紹介する. 間違いがあったら是非教えて欲しい. なお, Deep Learningに関する解説は今回は行わない.TheanoとはPythonにおけ…

パフォーマンス解析に関するまとめ

ここ2日ぐらい調べたパフォーマンス解析に関する調査をまとめる. 推測も含まれているので注意. まず, 当初の目的は「Boost.Pythonを用いて作った共有ライブラリをPythonから呼び出した際のボトルネック(hot spot)を発見したい」だった. パフォーマンス解析…

Boost.Python Tips

Boost Pythonで困ったところを適当にまとめる. 型の対応 (左がPython, 右がC++) numpy.float32 ⇔ float fload ⇔ double 2次元array ⇔ pyublas::numpy_matrix 1次元array ⇔ pyublas::numpy_vector (たぶん) list ⇔ boost::python::list numpy_matrixのインタ…

Python版mechanizeの関わるテスト

テスト始めました 最近, テストをちゃんと開発工程に入れようとし始めました. まだ手探り状態なんですけど. とりあえず, nosetestsを利用してテストを行おうと思っています参考になったページは Nose利用ノート 公式ドキュメント pdb-failuresオプションは使…

PEP342と343を読んだ

初めてちゃんと英語のPEP(Python Enhancement Proposals)を読んだ. Proposalだったら現在の仕様と違うんじゃないの? とか思ったけど, そのProposalのステータス(議論中・実装済み)とかがちゃんとトップに書いてあった. PEP342 generatorの拡張仕様. それ…

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

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

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…

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…

ghmmにおける過学習の回避

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

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

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

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

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