あやしいサイコロと『隠れマルコフモデル』

こんにちは。 今回は、サイコロを使いながら 隠れマルコフモデル(Hidden Markov Model) をテーマにしたいと思います。 隠れマルコフモデルはDNA解析や、音声解析で利用されている基礎テクニックです。   ●ベイズ統計「見えないものをさぐる ―それがベイズ」を出版しました。詳しくはこちらをご覧下さい。 ●画像認識と強化学習(DQN)を中心とした、ディープラーニングの書籍「実装 ディープラーニング」をオーム社から出版しました。詳しくはこちらをご覧下さい。   サイコロゲーム サイコロは、みなさん良くご存じのとおり、1~6 までの目があって、その目の出方(確率)は、どの目をみても「同様に確からしい」というものです。 今回は少し物語風です。 AさんとBさんは、Cさんの家で 3 人でサイコロゲームを行いました。 ゲームはいたって簡単で、それぞれが見えないように数字を紙に書いて、 1 個のサイコロを振って、紙の数字とサイコロの目があっていれば勝ちというものです。 サイコロを振るのはCさんで、Cさんがいわゆる胴元です。 Aさんは、あとでサイコロの目を確認したかったので、出た目をすべて記録していました。 サイコロは全部で 200 回投げられましたが、中盤あたりからCさんの勝ちが目立つようになり、最後はCさんの一人勝ちに...
More

因果関係を確率で表現するベイジアンネットワーク

こんにちは。 今回はベイジアンネットワークをテーマにしたいと思います。 最初にベイズ確率についてお話しします。 ●ベイズ統計「見えないものをさぐる ―それがベイズ」を出版しました。詳しくはこちらをご覧下さい。 ●画像認識と強化学習(DQN)を中心とした、ディープラーニングの書籍「実装 ディープラーニング」を、オーム社から出版しました。詳しくはこちらをご覧下さい。 ベイズ確率 ベイズの定理でよく例題にあげられるのが、病気の確率の問題です。 <例題> ある病気を発見する検査法は、その病気の99%を発見するが、健康な人の3%にも反応し誤った診断を下すという。日本国内にはその病気の患者は0.1%であることがわかっている。   さて、ある日本人がこの検査を行なったら病気であると診断された。 この人が本当にその病気の患者である確率は何%か?   病気である事象を B1、病気でない事象を B2、検査で病気と判定される事象を A とすると、例題は下図ように整理することができます。   検査で病気と判定された(A)ときに、その病気である確率(B1)を求めるので、条件付き確率 P( B1 | A ) を求めればよいことがわかります。 ベイズの定理より、P( B1 | A ) = 0.0319 となり、例題の...
More

ベイズ統計とベイズ更新

こんにちは。 今回は少し統計について書きたいと思います。 ●ベイズ統計「見えないものをさぐる ―それがベイズ」を出版しました。詳しくはこちら ベイズ統計の基本的な考え方は、事前確率と事後確率にあります。 例えば、コインAを2回投げて、表と裏が一回ずつでたとすれば、このコインAの表がでる事前確率は0.5 となります。このコインAで、再度2回投げたら2回とも表だったとします。すると、このコインAの表の出る確率、すなわち事後確率は0.75になります。 このようにある事象があった場合に、確率をどんどん変化させていくことをベイズ更新といいます。ベイズ更新は事象があるたびに行うことができるので、ベイズ統計は少ない試行でも、このベイズ更新によって、私たちが経験的に「そうだ」と思うような確率に近づいていくので重宝されています。 ベイズ的に考えなくても、上の例では、合計4回投げて表が3回でたのですから、確率0.75 には納得がいきます。     さて、ここで次のような事例を考えます。 昨年1年間、ある薬Bの効果を調べたら 確率 0.4 で効果があることがわかった。 この調査で100個のデータを集めたのか、あるいは1万個のデータを集めて集計した結果なのかはわかっていません。この薬Bが効く確率(事前確率)は0.4であると...
More

Hadoopは巨大なNFSサーバとして使用できるのか

こんにちは。 今回は「優秀なファイルシステムであるHDFSですが、現行のNFSサーバを置き換えることができるだろうか」という事について考えてみたいと思います。   まず、HDFSのメリットについて再確認してみます。 Hadoop - HDFSのメリット 安価に大容量のファイルシステムが構築できる。 ストレージサイズの拡張が簡単に行える。 分散配置されたブロックごとに通信が発生するため、ファイルの取得・格納スピードが速い。 ファイルのレプリケーションが自動で行われるため、マシントラブルによるデータ喪失が起こりにくい。 データ容量と比例して計算能力を獲得できる。   特に注目すべきなのは 「5. データ容量と比例して計算能力を獲得できる」という事です。 今までのNFSサーバは、ファイルを格納するためだけのサーバというイメージが強く、またそのように使用しているユーザーが大半だと思います。 Hadoopでは、容量拡大のためにスレーブマシンを増やせば増やすほど処理性能も上がりますので、知らず知らずのうちにスーパーコンピュータ並の計算能力を得ることができているかもしれません。   良い事ばかりのように見えるHDFSですが、NFSのようにマウントして使用するには、別のシステムを一つ経...
More

Varnish を使ってサーバーレスポンスを向上させる

3598012865_d92632e45a
こんにちは。 まずはこんな愚痴から始めます。   ECサイトを作成したのはいいけど、レスポンスが遅くてユーザーからクレームが来てる… 今さらソースコードを修正なんて、工数が掛かりすぎるよ…   こんな問題に直面している方、結構いるのではないでしょうか。   そんな時はこれ!「Varnish」を試してみましょう。     Varnishとは Varnishは、リバース・プロキシー技術をつかった高性能なHTTPアクセラレータです。 一昔前に主流であったSquidよりも高速で動作すると言われています。 静的なhtmlのみならず、PHPやRubyなどで書かれた動的なページもキャッシュ出来るところが大きなポイントです。 Varnishについての詳しい説明と、ダウンロード・インストール関係は こちら にお任せします。 今回は どのように設定すれば、どんな風にレスポンスが改善されるか! を見ていきたいと思います。     機材構成 テストの為に作成した構成では、1台のサーバーにNginx、Varnish、Apacheが共存しています。 SSLにも対応するようにNginxを入れてありますが、HTTP接続のみで良いならNginxは必要...
More

Hadoop上でナイーブベイズを利用して、ニュース記事を分類する

こんにちは。 情報をSNSなどから取得して解析をしようとすると、どうしてもジャンルで分類をする必要が出てきます。 yahooやgooのTOPページにはたくさんのニュース記事が社会・経済・生活・・・と分類されていますよね。 10件や20件であれば、手作業で分類しても良いかもしれません。ですが、数千数万となると手作業で行うには限界があります。 そんな問題を解決するために、ナイーブベイズを利用してジャンル分類を行い、どの程度マッチするものなのかについて書きたいと思います。   ●ベイズ統計「見えないものをさぐる ―それがベイズ」を出版しました。詳しくはこちら   ナイーブベイズについて ナイーブベイズ(naive bayes) は、迷惑メールを分類するためのフィルターとして使われているようです。 基本的にベイズ確率を使用します。 ベイズ(bayes)基本式       分母P(A)は分類を行う時は一定なので、 と考えられます。 Ciがジャンル、Aがテキストに含まれる1つ1つの単語にあたります。 単語AがジャンルCiに含まれる確率を、右辺の式で計算します。 ナイーブと呼ばれる所以は、そもそも単語というものは独立ではないのに、計算上独立のように扱ってしまうこ...
More

Hadoop分散処理の性能評価(MapReduceとSpark)

こんにちは。 Hadoopでは以前よりMapReduceを用いて分散処理を行ってきましたが、 最近、オンメモリで処理を行うSparkという分散処理技術が台頭してきています。   いずれMapReduceは使用されなくなり、全てSparkに置き換わるのではないかとも言われています。 MapReduceとSparkではどの程度、性能に違いがあるのでしょうか。 ここではレコメンドエンジンの作成・実行を通して、MapReduceとSparkの性能評価を行います。   使用するHadoopクラスタは1マスター、4スレーブの5台構成。 各マシンともに低スペック (2Core, メモリ1GB)マシンを使用しています。   性能を比較するのは以下の6パターンです。 MapReduce: スレーブ1台 MapReduce: スレーブ2台 MapReduce: スレーブ4台 Spark: スレーブ1台 Spark: スレーブ2台 Spark: スレーブ4台     レコメンドエンジンの作成   レコメンドエンジンとは何でしょうか。 Amazonや楽天で欲しい物を探していると下の方に「この商品を買った人はこんな商品も買ってい...
More

ビッグデータの取り扱い方法 (Hadoop)

index
こんにちは。 今回は、最近世間で注目されている ビッグデータ の取り扱い方について考えてみたいと思います。   ビッグデータとは ビッグデータは以下のように定義されています。(もっと詳しく知りたい方は こちら をご覧ください) 市販されているデータベース管理ツールや従来のデータ処理アプリケーションで処理することが困難なほど巨大で複雑な データ集合の集積物を表す用語である。 「巨大」というのが1エクサバイトなのか1ペタバイトなのかは意見が分かれる所ですが、つまりは「今までのやり方じゃ処理出来ないくらい大きなデータの集まり」と言えるでしょう。 今までは、処理しきれないから捨ててしまっていた巨大なデータを、もう一度見直して利益につなげていこうじゃないか!!という動きが活発になったので、ビッグデータが注目されています。それは「大手ECサイトの全アクセスログ」であったり、「日本全国の高速道路交通量」であったりと実に多種多様。 そんなビッグデータを取り扱うための仕組みとして、一番認知されているのが今回取り上げます「Hadoop」です。   Hadoopとは Hadoopは、「大規模分散計算フレームワーク」と呼ばれています。 特徴としては、分散ファイルシステム(HDFS)と並列処理フレームワーク(MapReduce)があります。 ...
More