3章 その14 単語のクラスタリング
p.44より
clusters.rbに行列反転を追加
# 行列の入れ替え def rotatematrix(data) newdata = Array.new for i in 0...data[0].length newrow = Array.new for j in 0...data.length newrow.push(data[j][i]) end newdata.push(newrow) end return newdata end
load 'clusters.rb' cs = Clusters.new blognames,words,data = cs.readline('myblogdata.txt') rdata = cs.rotatematrix(data) wordclust = cs.hcluster(rdata)
blog数97に対し単語数は1168あったので、クラスタリングの再帰回数が10倍以上になるはず。1時間ぐらいかかりそうなので、学校のサーバで処理させることにした
(追記)12時間かかっても終わらないので単語数を100にした
http://www.bitbucket.org/shokai/collective-intelligence-study/src/ee7e4816b175/03/clusters.rb
# 行列の入れ替え def rotatematrix(data) newdata = Array.new # 単語数が多すぎるので100個に制限する for i in 0...[100, data[0].length].min newrow = Array.new for j in 0...data.length newrow.push(data[j][i]) end newdata.push(newrow) end return newdata end
irbで続き
>> load 'clusters.rb' >> cs = Clusters.new >> blognames,words,data = cs.readline('myblogdata.txt') >> rdata = cs.rotatematrix(data) >> wordclust = cs.hcluster(rdata) >> words[1] = " " >> cs.drawdendrogram(wordclust, words[0...100], 'mywordclust.png') => mywordclust.png 1200x2000 DirectClass 16-bit 96kb
できた。あまり意味は読み取れないが、google, map, blogspotが近かったりpublishingとbloggers、superとwantsとsmallとかは同じクラスタと言われればそんな気もする