y_uti のブログ

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

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

SplDoublyLinkedList を LIFO で使うときの注意点

前回の記事の最後に書いたように、PHP の SplDoublyLinkedList を LIFO で使う場合には、いくつか注意しなければいけない挙動があります。一つ目は、イテレータのキーについてです。まずは FIFO の場合について、以下のようなコードで確認してみます。各要素…

SplDoublyLinkedList を利用したリスト操作

このエントリの内容が興味深かったので、PHP で SplDoublyLinkedList を使って書いてみました。 Python - すごく簡単なアルゴリズムがphpで書けなくてつらい - Qiita [キータ] PHPでは配列ではなくオブジェクトに状態を持たせよ - なんたらノート第三期ベー…

Particle filter のリサンプリング方法の比較

Particle filter のリサンプリング方法を比較した下記の論文を読んでみました。そこで、論文中で比較されていた各手法を PHP で実装して試してみたいと思います。 Randal Douc, Olivier Cappé, and Eric Moulines. Comparison of resampling schemes for par…

各言語でのバイトコード命令表示方法

普段あまり使うことのない言語も含めていくつか調べてみたので、備忘録として。Perl $ perl -MO=Concise hello.pl 6 <@> leave[1 ref] vKP/REFC ->(end) 1 <0> enter ->2 2 <;> nextstate(main 3 hello.pl:6) v:*,&,{,$ ->3 5 <@> print vK ->6 3 <0> pushma…

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

ここ何回か PHP の最適化について書いていますが、実はこの企画にチャレンジしています。 新人女子プログラマの書いたコードを直すだけの簡単なお仕事です!|paizaオンラインハッカソンVol.1以下、提出したコードを掲載しています。自力でチャレンジしてい…

PHP プログラムの最適化あれこれ

先日から PHP のコードの性能について記事を書いていますが、今回もそういった内容です。まず、ループカウンタの操作についてです。 以下のようなコードを考えます。計測用のプログラムなので計算に意味はありません。

データを正しい型で扱うことによる高速化

PHP のようなスクリプト言語では型を意識せずにコードを書いてしまいがちですが、適切な型を付けることで処理速度を大きく改善できる場合があります。そりゃあそうだろうという話なのですが、実際に計測してみると予想以上に大きな効果があって驚きました。…

PHP の配列の局所性

PHP で、整列済み配列を走査する処理を書いていたところ、メモリアクセスの局所性によると思われる速度低下が見られて面白かったので、記事にしてみます。例として配列の総和を計算するコードを考えます。

サンプリングのばらつきによる同一文書間の Hellinger 距離

LDA はサンプリングによってトピック分布を推定するので、同じ文書でも実行するたびに異なる分布が推定されることになります。このばらつきがどの程度の大きさになるのかを同一文書間の Hellinger 距離として調べてみます。実験の手順は次のとおりです。まず…

トピック数による Hellinger 距離の分布

前回は、Hellinger 距離を利用して類似の記事を抽出してみました。基準にする記事と他の各記事との距離をそれぞれ計算して、距離の小さなものほど似ているということでした。ところで、この Hellinger 距離は全体としてどのような分布になっているのでしょう…

Hellinger 距離による記事間の類似度計算

LDA の用途の一つとして、文書間の類似度の計算があります。今回はこれを試してみたいと思います。前回の記事で参考にした Blei 先生の教科書によると、文書間の類似度は Hellinger 距離を使って計算できるようです。以下のようなコードを書いて試してみます…

Term-score

前回に続き LDA の話題です。前回は、コーパスからトピックモデルを学習し、コーパスに含まれる記事が分野ごとにトピックに分かれる様子を見てみました。今度は、それぞれのトピックからどのような単語が生成されやすいかを調べてみたいと思います。トピック…

LDA による文書集合のクラスタリング

潜在ディリクレ配分法 (Latent Dirichlet Allocation) による文書集合のクラスタリングを試してみました。LDA の実装は探せば色々と出てくるのですが、今回は plda を利用して実験します。plda のソースコードは下記の URL からダウンロードできます。 http:…

今朝の array_reduce の実行速度

今朝の記事に書いた複数配列を取れる array_reduce ですが、これは全然駄目ですね。関数型言語でのリスト操作のような感覚で array_merge や array_shift を使ってしまっているので、パフォーマンスが悪すぎです。こんなコードを使って実行時間を計測してみ…

複数の配列を取る array_reduce の実装

PHP の array_reduce は一つの配列しか扱えません。array_map などと同じように、複数の配列を扱いたいことがあります。簡単な例を一つ挙げるならベクトルの内積計算です。次のように書きたいところです。

Doctrine 2 の find メソッドには配列を渡せる

私が現在担当しているプロジェクトでは Symfony2 を使っています。 Doctrine 2 の find メソッドは、配列を渡すと WHERE field IN (...) になってくれるのですね。知りませんでした。7. Working with Objects — Doctrine 2 ORM 2 documentation

Excel の行列関数と配列数式

ここ数日、会社の仕事で Excel のシートを作成しています。今さらながら MATCH 関数や INDEX 関数、配列数式の使い方を少し覚えました。これらの関数や配列数式の使い方はマイクロソフト社のページに書かれています。この記事の内容はこれらの実例です。 ワ…

なぜ PHP の三項演算子は左結合なのか

PHP の三項演算子が左結合で使いにくいという話題についてです。次のプログラムは大抵の言語では one を表示するのですが、PHP では two になってしまいます。

アカウントを共有するときの SSH の設定

そもそもアカウントを共有するのが良くないことだというのは重々承知。とはいえ、仕事ではそういう環境で作業をすることもよくあります。お客様のサーバで作業する場合など、社名でアカウントを一つ作成して、複数人の作業担当者で共有するという運用です。…

マジックビーンズ

引き続き『SQL アンチパターン』の話です。 24 章の内容は、仕事でプログラムを書いているときに、私もよく悩みました。この章については、解決策に書かれているような簡単な話ではないと思っています。図 24-2 と図 24-3 を見比べると、コントローラとアク…

『SQL アンチパターン』 を読んでいます

先日、『SQL アンチパターン』という本を購入しました。毎日の通勤時間にちょこちょこと読んでいます。17.5.3 節に書かれている、CASE と SUM の組み合わせで条件付き集約を行う方法は、目的が行数を数えることなら、次のような書き方もできることを最近知り…