k_oomori Archive

breezing NumPy-bration

 k_oomoriであります!これまで数値計算といえばPythonのNumPy一択かなと思っていたのですが、Scalaでも似たようなライブラリはないものかと調べてみたところ、ありました、breezeが。ここではベクトルや行列の演算について性能を調べてみたいと思います。なお、使用したサーバはAWSのc3.large EC2インスタンス、OSはUbuntu 14.04、ソフトウェアバージョンはPython 2.7.6, NumPy 1.8.2, Scala 2.10.4, breeze 0.10とな [...] Read More

RDBとグラフDBは使いよう ~ MariaDB様がみてる vs. InnoDBさんとNeo4jさん

 ごきげんよう。k_oomoriです。業務でデータノード間の関連性を追いかけるようなクエリが投げたくなったので、グラフデータベースについて調べてみました。ここではネイティブなグラフDBであるNeo4j、本来はRDBであるMariaDBのグラフ計算用エンジンとして開発されたOQGRAPH、それとお馴染みのInnoDBを直接グラフ問題に適用した例を試してみようと思います。  なお、検証に用いたサーバは全てAWSのc3.large EC2インスタンス(CPU: Intel Xeonプロセッサ2.8GH [...] Read More

Scala(スカラ)の紹介 (上)

こんにちは、k_oomoriです。今回は、タイトルの通りプログラミング言語Scalaについて書いてみたいと思います。 1/俯瞰風景  早速ですが、Scalaの特徴を俯瞰していきましょう。 ・オブジェクト指向と関数型のハイブリッド言語である  Scalaは、関数型言語とオブジェクト指向(命令型)言語の特徴を統合したマルチパラダイムなプログラミング言語です。どちらのスタイルを用いるかはプログラマに委ねられており、関数型言語にすでに親しんでいる人はvalやイミュータブル(不変)オブジェクトを用いて関数 [...] Read More

ラプラシアンの中に1人以上、ゼロ固有値がいる!

Introduction  こんにちは、k_oomoriです。前回は、非負値行列因子分解という手法によって実際の広告配信結果から関連性があると思われる広告キャンペーンのペアたちを抽出する方法を紹介しました。しかし、そこに現れるキャンペーンは全てが互いに関連し合っているわけではありません。おそらくはいくつかの離散的な“島”(連結成分)に分かれて存在しています(アイドル系の島、ソシャゲ系の島など)。そこで今回はキャンペーンの集合がいくつの島に分かれるのかを機械的に調べる方法に [...] Read More

非負ッ値行列・ファクトリゼーション ~ 半群じゃないから難しくないもん!

Introduction  こんにちは、k_oomoriです。今回は非負値行列因子分解 (Non-negative Matrix Factorization, 略してNMF) を用いたデータの解析について触れてみたいと思います。  まず最初に用語の定義として、「非負値行列」とは全ての要素が非負値(0以上の実数)であるような行列を指すこととします。これを用いると、NMFとは「与えられた非負値行列を2つの非負値行列との積に(近似的に)分解するアルゴリズム」 と表現できます。これにより、なんとの中に潜 [...] Read More

とあるオープンソースの分散処理基盤 -Hadoop(ハドゥープ)-

Introduction – Hadoopとは?  こんにちは、k_oomoriです。今回は、オープンソースミドルウェアのApache Hadoopを取り上げたいと思います。  コンピュータの性能は日々進化しているとはいえ、1台のマシンの性能にはおのずと限界があります。また、その時々で常に最高性能のマシンを維持していこうとすると莫大なコストがかかってしまいます。そこで登場するのが分散処理という考え方です。1台1台は特に高性能ではないマシンでも多数並べて処理を同時並行で行うことにより、 [...] Read More

PHPでもforkがしたい!

Introduction  はじめまして、ADN事業部所属エンジニアのk_oomoriと申します。業務ではアドネットワークサービスnend(ネンド)においてPHPやJavaScriptのプログラミングからサーバソフトウェアあたりまでの領域を担当させていただいております。  さて最初の投稿となる今回は、PHPにおけるプロセスのフォーク(fork)を扱おうと思います。  フォークとは、簡単に言うと最初に起動したプロセス(以下親プロセスと言います)が自身の複製として子プロセスを生成し、複数プロセスで並 [...] Read More