y_uti のブログ

統計、機械学習、自然言語処理などに興味を持つエンジニアの技術ブログです

2015-01-01から1年間の記事一覧

PHP の配列を操作する

PHP Advent Calendar 2015 - Qiita の 12/22 の記事が話題になっていました。このアドベントカレンダーは毎日チェックしているのですが、通勤前に読んで、これは盛り上がるだろうな、と思いながら夕方に再度アクセスしたところ案の定という展開で、寄せられ…

php-build をカスタマイズして使う

以前このブログでも紹介したことがありますが、php-build というビルドツールが便利で、愛用しています。phpenv と php-build を組み合わせて使うことで、複数のバージョンの PHP を共存可能な形でインストールし、切り替えて使うことができます。バージョン…

PHP の echo と print の違い (闇)

この記事は、闇PHP Advent Calendar 2015 の 7 日目として書いたものです。qiita.com PHP 7.0.0 がリリースされたので改めてオペコードを眺めていたところ、次のように欠番があることに気付きました。 #define ZEND_ASSIGN_REF 39 #define ZEND_ECHO 40 #def…

PHP プログラムのファイルサイズと抽象構文木のノード数の分布

PHP7 で利用できる php-ast 拡張モジュールを導入して、PHP のプログラムのファイルサイズと抽象構文木のノード数の関係をプロットしてみます。PHP7 では、プログラムを実行する際、構文解析の結果を抽象構文木 (Abstract Syntax Tree) の形にして、それから…

続パタ 第 3 章「ベイズ決定則」の復習

前回の記事に続き、『続・わかりやすいパターン認識』の例題を実装しながら内容を確認します。今回は第 3 章「ベイズ決定則」です。第 3 章の例題は、前回の記事と同じ設定のコイン投げを題材にして、観測結果 (あるコインを n 回投げて、そのうち r 回が表…

続パタ 2.3 節「ベイズ更新の実験」を試す

『続・わかりやすいパターン認識』の 2.3 節「ベイズ更新の実験」を MATLAB で試してみました。読書会に参加しながら読み進めているのですが、前半部分は残念ながら参加できなかったので、復習の意味で読み直しています。教科書 2.3 節の実験はコイン投げを…

for ループのオペコードで PHP5 と PHP7 の違いを見る

先日の PHP カンファレンス 2015 で、蒋池東龍さんによる「PHP あるあるパフォーマンス対決」という発表がありました。私は当日は他のセッションに参加していたのですが、処理系内部のこのような話には興味があり、後から YouTube で楽しませてもらいました…

PHP Conference 2015 に参加

PHP Conference 2015 に参加してきました。今年は 2000 人を超える参加登録があり、会場の大田区産業プラザ PiO を貸し切っての開催だったようです。PHP の生みの親である Rasmus Lerdorf 氏をはじめ海外からの招待講演も多数あり、何を聴こうか直前まで悩ん…

paiza オンラインハッカソンでコードゴルフに挑戦

paiza オンラインハッカソン Vol. 6+ に挑戦しました。ウェブページはこちらです。 「え、妻が松江?」松江Ruby会議07協賛 回文作成プログラミングコンテスト|POH6+今回は、提出したコードのバイト数が表示されていたためか、どれだけ短いコードで問題を解…

任意の距離関数で k-means 法を実行する

任意の距離関数を用いて k-means 法によるクラスタリングを行うプログラムを作成しました。コードは以下のとおりです。MATLAB で実装しました。fminunc 関数を利用しているため、実行には MATLAB 本体のほかに Optimization Toolbox が必要です。 function […

LDA の逐次学習における活性化

Canini らの論文*1を読んでみました。LDA の逐次学習について述べた論文で、『トピックモデルによる統計的潜在意味解析』の 3.5.2 節は、この論文の方法を説明したものになっています。下記のウェブページで論文の PDF ファイルをダウンロードできます。 JML…

LDA の逐次学習アルゴリズム (勉強会発表資料)

第5回『トピックモデルによる統計的潜在意味解析』読書会で、教科書 3.5 節の「逐次ベイズ学習 - サンプリング近似法の場合 -」を担当しました。発表資料を公開します。 逐次ベイズ学習 - サンプリング近似法の場合 - from y-uti www.slideshare.netスライド…

Hartigan-Wong のアルゴリズムを確認する

R の stats パッケージで提供されている kmeans 関数は、既定では Hartigan-Wong のアルゴリズムを利用します。通常の k-means (Lloyd のアルゴリズム) では、各データ点を最も近いクラスタに割り当てる操作を繰り返しますが、Hartigan-Wong の方法はより直…

各言語の k-means 比較

第10回「続・わかりやすいパターン認識」読書会 に参加して、いくつかの言語での k-means の実装比較について発表しました。発表資料を公開します。 各言語の k-means 比較 from y-uti MATLAB, R, Python (scikit-learn, SciPy) の k-means をそれぞれ調査し…

混合正規分布のパラメータ推定

『続・わかりやすいパターン認識』第 9 章のアルゴリズムを実装して、混合正規分布のパラメータ推定実験を試してみます。今回も MATLAB で実装しました。 サンプルデータの生成 まず、教科書 9.5 節にしたがってパラメータを設定します。各クラスの事前確率…

初期値の違いによる Baum-Welch アルゴリズムの収束過程

Baum-Welch アルゴリズムは、初期値によって収束の過程が異なります。出力記号系列が複数の局所解を持つ場合には、初期値によっていずれか一つの解が求まります。また、収束に要する反復回数も初期値によって大きく異なることがあります。今回は、初期値を変…

MATLAB で Baum-Welch アルゴリズムを実装する

前回に続いて、『続・わかりやすいパターン認識』のアルゴリズムを実装します。今回は Baum-Welch アルゴリズムを実装して、隠れマルコフモデルのパラメータ推定を試してみます。 前向きアルゴリズム まず、前向きアルゴリズムを実装します。以下のように実…

MATLAB で Viterbi アルゴリズムを実装する

先日、第8回「続・わかりやすいパターン認識」読書会 に参加しました。第 8 章の隠れマルコフモデルについて解説していただきました。そこで今回は、教科書に載っている Viterbi アルゴリズムを実装して試してみます。MATLAB で実装してみました。遷移確率と…

paiza オンラインハッカソンに挑戦

この一ヶ月ほど、paiza オンラインハッカソンというイベントで、15 パズルを解くプログラムの作成に挑戦していました。与えられた盤面を解く手数の短さを競う形式です。イベントのウェブサイトは以下にあります。 Rena and Minami International Programming…

Dynamic Time Warping による時系列データの類似度計算

台風の経路情報を題材にして、Dynamic Time Warping (DTW) を用いた時系列データの類似度の計算を試してみます。DTW は二つの時系列データの類似度を測る方法の一つで、英語版の Wikipedia に簡単な説明と実装例があります。 Dynamic time warping - Wikiped…

15 パズルの問題を生成する

paiza オンラインハッカソンというイベントで、15 パズルを解くプログラムの作成に挑戦してみました。イベントの公式サイトはこちらです。 Rena and Minami International Programming Competition |Paiza Online Hackathon 5イベントでは、あらかじめ決めら…

NumPy のブロードキャスティングを PHP で模倣する

NumPy の配列には、ブロードキャスティングという仕組みがあります。これは、大きさの異なる多次元配列同士の算術演算に関する仕組みで、要素数が 1 の次元があった場合にそれを拡張し、二つの配列の要素数を揃えて演算結果を得るというものです。NumPy のマ…

PHP の GC の話 (勉強会発表資料)

昨日、第87回 PHP勉強会@東京 で PHP の GC について発表しました。発表資料を公開します。 PHP の GC の話 from y-uti PHP の処理系に実装されている、参照カウント方式の GC と循環参照によるごみの回収について、比較的平易に説明したつもりです。GC に…

コピュラを用いた確率密度の描画

統計学の分野に、コピュラという概念があるようです。年末年始に少し勉強してみました。どうやら、多次元の確率分布について、各次元の周辺分布をある性質を満たす関数 (コピュラ) で組み合わせると結合分布が得られるというお話のようです。利用するコピュ…