ruby

久々にNaive Bayes Classifierを実装してみた

明日はComplement Naive Bayesいってみよー。 参考 Rubyでベイジアンフィルター - ザリガニが見ていた...。 新はてなブックマークでも使われてるComplement Naive Bayesを解説するよ - 射撃しつつ前転 改

RubyとJavaのArrayを比較してみる

Array 同じように使える join, pop, push, shift, map 微妙に違う Ruby JavaScript リテラル [1,2,3] [,,3] 抜けたところはnullが入る concat 副作用あり, 引数はArrayのみ 副作用なし, 引数に要素を並べてもOK reverse 非破壊的 破壊的 slice 引数は(pos[,l…

Float xx out of range

LDAのmodel.betaをto_fしながら読んでると"Float xx out of range"なwarningが大量に出る. irbでやってみるとこんな感じ. "1.6327561e-315".to_f (irb):34: warning: Float 1.6327561e-315 out of range => 1.63275608151574e-316 Floatの有効桁数が足りてな…

Matrix

http://www.sakalab.org/prog-ruby/ruby-man-ja-html-20051129/Matrix.html Matrix#row(i) 第i番目の行ベクトルを返す。ブロックが与えられたときは、各行ベクトルについて、ブロックを繰り返す。 ちょっと使い方がぴんと来なかったので試してみた。 #eachみ…

NMatrix to NVector

v = NVector[NMatrix[[1.0,2.0,3.0],[3.0,4.0,5.0]].slice(true,0)] => NVector.float(3,1,1): [ [ [ 1.0, 2.0, 3.0 ] ] ] irb(main):077:0> v.shape = 3; v => NVector.float(3): [ 1.0, 2.0, 3.0 ] とりあえず最後にNVector#shape = hogeとして、行列では…

String#wakati

str_wakati.rb require "chasen" class String def wakati(stem=false) ary = Chasen.sparse(self).map {|line| ary = line.split stem ? ary[2] : ary[0] } ary.delete_at(-1) ary end end if $0 == __FILE__ p "牛乳を飲む人より牛乳を配る人のほうがよっ…

Array#ngram

require "str_wakati" class Array def ngram(n) raise "n must be larger than 0" unless n > 0 h = {} (length - n + 1).times do |i| c = self[i + n - 1] tmp = slice(i, n - 1).inject(h) {|a,b| a[b] ||= {}} tmp[c] ||= 0 tmp[c] += 1 end h end end …

Symbol#to_proc

いまさらながら試してみました。 参考:http://wota.jp/ac/?date=20060309 [[1,2],[3,4]].map(&:first) #=> [1,3] みたいなことをしたいな、と思いくまくまーさんのを丸写し。 class Symbol def to_proc Proc.new {|obj,*args| obj.send(self,*args) } end e…

add_ruby_type

http://doc.loveruby.net/refm/api/view/method/YAML/m/add_ruby_type NArrayをto_yamlしたいな〜。

ruby-chasenのmake

ruby-chasenのmakeではまった。 % ruby extconf.rb Warning:extconf.rb:2: parsearg is deprecated after Ruby 1.8.1; use optparse instead checking for chasen_getopt_argv() in -lchasen... no creating Makefile/usr/local/libchasen.aがあるのに、chec…

.irbrc

#Tabで補完。TabTabで候補を表示。 require 'irb/completion' #pretty print。Hash等を見やすく表示。 require 'pp' #コマンドの履歴を30行分ファイルに保存。 IRB.conf[:SAVE_HISTORY] = 30 IRB.conf[:AUTO_INDENT] = true ホームにおいておくと吉。

K-means

昨日のコードに追加で、 class Array def kmeans(k,mode) get_nearest = {:similarity => :max, :distance => :min}[mode] or raise "unknown mode #{mode}" begin clusters = random_split(k).collect {|elems| [elems.avg, elems, []]} loop { moved = fal…

配列をランダムに分割

class Array def random_sample self[rand(self.size)] end def random_sample! self.slice!(rand(self.size)) end def random_split(k) return nil if empty? r = [] k.times { r << [] } a = self.dup min_part_size = self.size / k r.each {|ary| min_pa…

shuffle

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/40891 K-meansでクラスタをランダムに割り当てるところを配列のrandomizeの考え方でさっぱり書けないかな? と思ってぐぐったらここに行き着きました。今じっくり読んでます。 あと、Fisher-Ya…

Struct

Struct.new("AAA",:a.:b) #=> Struct::AAA って、 class Struct class AAA attr_accessor :a, :b end end Struct::AAA #=> Struct::AAA ということか。 クラスを定義してるって感じがしなくて、はまってた。 ちょっと意味が違うけど、 AAA = Struct.new(:a,:…

方針

設定ファイルはyamlで記述する。 IO.eachとString#splitで読み込みルーチンを逐一書くのは面倒くさい。 yamlで記述すればYAML.load_file(filename)で一発。 コマンドライン引数を使わないで設定ファイルに書く。 子スクリプト単品で使うことがあまりない。ま…

CSV読み

CSV.open(path, "r").each {|row| row } よりも、 File.open(path, "r").each {|line| line.chomp!.split(",") } の方が速いみたい。

root無しでRuby/GSLとNArrayを利用

setup.rb config setup.rb setup 必要なファイルを適当なフォルダ(~/ruby/lib)に突っ込む。 #NArray。別のLinux機でsite_ruby以下にインストール済みなので、nfs越しにホームにコピーしておく。 mkdir ~/ruby/lib/narray cd /usr/lib/ruby/site_ruby/1.8/ cp…

Rubyコード添削

モジュールやメソッドでくくる基準とか、StringやArrayの便利なメソッドを使いどころがかなり参考になると思う。kwicを作ろうとしてPerlできちゃないコードを書きまくったけど、RubyだとString#ljustを使ってきれいに書けそう。(知らないだけで、Perlでもそ…

久しぶりにRubyを使ってみる

SPIで食塩水の濃度を出す練習用のスクリプトを書いてみました。下のように、かなり怪しい出題をしますがw 155gの水に95gの食塩を完全に溶かしたとき、この食塩水の濃度はいくらか? 95 / (95 + 155) * 100 = ?#!/usr/bin/ruby # 100 * 塩の量 / 水溶液の量 …