Ruby

Mecabはバインディングで3.1倍速くなる

はじめに こないだIO.popenによるMecabの呼び出しを書きましたが,バインディングを利用した方法を書きます. こっちの方が速いのでおすすめ. バインディングのインストール sudo port install rb-mecab +utf8only MacPortsではたったこれだけ. 文字コード…

ベイズ分類器による極性判定

はじめに 単語への分割にはじまり,分類器での推測までできたので,ベイズ分類器として組み込みます. 実行例 ベイズ分類器で'quick money'をgoodかbadか判定するよ. def sample_train(bayes) bayes.train('Nobody owns the water.','good') bayes.train('t…

分類器での学習と分類,そして推測

はじめに 単語ごとに区切ることができるようになったので,分類器で学習と分類をさせます. 学習させるデータは本に載っているのと同じものなので,結果も全く同じになるはず. 実行例 require 'pp' def sample_train(classifier) classifier.train('Nobody …

Mecabで単語の出現数を数えるには

はじめに 油断してるとあっという間に時間が経つ. 気がついたら5月ももう終わりです. 前々回まで集合知プログラミングの第3章をやってきた訳ですが, ベイズフィルタを勉強したくなった関係で,第6章にいきなり飛びます. 今回は,本の中で登場する単語の…

多次元尺度構成法によるグラフの作成続き

はじめに 前回作成した座標データを使って,グラフを作成してみます. これにより,各Blog間の様子が目で見れるはずなのですが,どうなるでしょうか. グラフの作成 Gruffを使って描画させることにします. やってることは大したことないので,見れば分かる…

多次元尺度構成法によるグラフの作成

はじめに 階層型,K平均法でのクラスタリング手法では,デンドログラム等で結果表示がされてきました. が,決してビジュアル的には分かりやすいとは言えませんでした. 可視化してみようということで,多次元尺度構成法(以下,MDS)により図示してみることに…

Gruff::Lineの使い方まとめ

はじめに Rubyでグラフを描くためのライブラリGruff::Lineを使う機会がありましたので,まとめをしておきます. インストール 環境はMac OS Xを想定しています. ハマりどころはImageMagickのインストール. X関連の(正直どうでもよさそうな)ライブラリまで…

K平均法によるクラスタの作成

今回やること 前回の階層型クラスタに続き,K平均法クラスタを作成します.入力データも"blogdata.txt"を引き続き用います. KmeansClusterクラスの作成 K平均法クラスタのソースを示します. module My class KmeansCluster LOOP_MAX = 100 def initialize(…

階層型クラスタの作成

ついに本題に入ります. 今回やること 「集合知プログラミング」の3章で使われている,単語の頻度がファイルになっている"blogdata.txt"を使って,階層型クラスタを作成します. 得られる結果はp.47にあるデンドログラムと同じになるはずですが... blogdata.…

SetのようなもののRubyでの表現

準備その2です. クラスタ作成時には,クラスタ対象同士の相関値を延々と計算します. 特に階層型クラスタの場合は全ての組み合わせの距離を調べるので,当たり前なのですが,相関値の計算は重いのです. 何とか計算する回数を減らしたい. やりたいこと A,…

クラスタ作成に向けた準備

前エントリで期間を空けて〜と言いましたが,完全に放置してしまいました. 3章のクラスタリングをプログラミングしていたのですが,バグバグになってしまい完全にハマってしまっていました. 時間は掛かりましたが,バグも解きほぐれてまともに動くようにな…

Rubyで書くMovieLensデータセットでの推薦

前回は,データセットの準備まででした. これで準備が整ったので,これまでのプログラムを使って計算することができます. MovieLensデータセットでの推薦 まずは87番さんのデータをみてみましょう. movie_lens_critics = Marshal.load(File.open('movie_l…

Rubyで書くMovieLensデータセットの変換

MovieLensと呼ばれる映画の批評データを使って映画の推薦を行ってみよう,という試みです. 今回は元データをこれまでに作ったプログラムで使えるように変換するところまでやります. MovieLensデータセットの変換 データの形式をこれまでのcritics(いわゆる…

Rubyで書くはてブを使った推薦

書籍の例では,del.icio.usからソーシャルブックマークのデータを取得して推薦を行っています.(p.20-p.24を参照) これをこのままRubyで書こうかな...とも思ったのですが,何か面白くないので はてなブックマーク(以下 はてブ)のデータを取ってくることにし…

Rubyで書くユークリッド距離とピアソン相関(NArray編)

これまでのコードは標準ライブラリだけで書いてきました. が,もうちょっと速くできないものかと思い,調べてみたところNArrayというGemがあることがわかりました. (Rubyの数値計算ではおなじみらしいですね...) 今回はこのNArrayを使って,高速化してみよ…

Rubyで書くアイテムベースの推薦

前回作成したアイテムベースのデータを使って,映画の推薦を行うことができます. アイテム相関による推薦 アイテム同士の相関値を作成してから,批評値と相関値を掛け合わせます. あらかじめ作成したアイテム相関のデータを渡せると,計算が早くなるのが嬉…

Rubyで書くアイテム相関データの作成

これまで使っていた評価データから,アイテム同士の相関を導くことができます. アイテム相関データの作成 既出のメソッドを組み合わせているだけなので簡単です. ただし,top_matchesを何度も繰り返すので,評価データが大きくなるほど実行時間が延びてし…

Rubyで書く似ている製品探し

これまで,評価者をキーとしたデータセットを使って計算をしてきましたが, アイテム(この場合は映画)をキーとした相関を知ることはできるでしょうか. この点に注目したのが「似ている製品」の章です. アイテムをキーにした評価データへの変換 元のデータ…

Rubyで書くアイテムの推薦

前回は評者の相関まで計算しました. そこで,この値を使って映画の推薦をしてしまおう,という魂胆です. 推薦値の計算 正直,ちょっと長いです. もっとすっきり書きたかったんですが,何やってるか分かるでしょうか... module My class Recommender # # …

Rubyで書く相関値順のリスト

これまでに作ったユークリッド距離とピアソン相関を使って,相関値によるリストを作成します. このリストにより評者のランク付けが可能になります. ランキングの仕方 やっていることは単純です. オプションの渡し方だけ注意が必要です. Rubyでは名前付き…

Rubyで書くピアソン相関

前回のユークリッド距離に続いて「ピアソン相関によるスコア」です. ピアソン相関の計算 正しくは,ピアソンの積率相関係数というらしいです. 巻末のp.342にある定義をそのまま実装しました. sum_xy(x*yの部分和)を求めるのに,zipで書いてあるところがち…

Rubyで書くユークリッド距離

oreillyから「集合知プログラミング」という書籍が発売されました. この本文中で使われている例題をRubyで書いてみようと思います. どこまで行けるか分かりませんが,やるだけやってみます. では「ユークリッド距離によるスコア」から. criticsの表現 本…