Re: 頻出語を用いた文書の自己組織化マップとクラスター化(修正 2012 12/06) (HIGUCHI Koichi) KH Coder 旧掲示板
[ツリー表示] [留意事項] [ワード検索] [過去ログ]

  [No.1102] Re: 頻出語を用いた文書の自己組織化マップとクラスター化(修正 2012 12/06) 投稿者:HIGUCHI Koichi  投稿日:2012/09/27(Thu) 15:45:01

こんにちは、樋口です。書き込みありがとうございます。

自己組織化マップの方法を使って、文書を布置およびクラスター化する方法で
すね。これは結構煩雑な手順になるのですが、頻出語を使う場合は以下のよう
な形となります。

※なお、自己組織化マップを作成し、そのマップをもとにクラスター化を行う
という形になります。クラスター分析を先に行い、その結果をそのまま図示す
るデンドログラムとは、少し趣が異なっております。

[1] 「ツール」→「抽出語」→「対応分析」コマンドで、「集計単位」として
クラスター分析を行いたい単位を選択します。また「差異が顕著な語を分析に
使用」のチェックは外しておいた方が良いでしょう。あとは「OK」をクリック
して対応分析を実行します。

[2] 下記スライドの5枚目の手順まで進め、R上で対応分析を実行します。
http://www.slideshare.net/khcoder/r1kh-coder

[3] 以下のコマンドをRで実行すると、自己組織化マップの学習が行われます。
学習には相応の時間がかかりますのでご注意ください。

#------------------------------------------------------------------------------
# 1000語あたりの調整頻度を計算
library(amap)
std <- d
for (i in 1:nrow(std)){
std[i,] <- std[i,] / doc_length_mtr[i,2] * 1000
}

# どの語の影響も等しくなるよう標準化
std <- scale(std)


# 自己組織化マップ
n_nodes <- 20 # 1辺のノード数
rlen1 <- 1000 # フェーズ1の学習回数
rlen2 <- n_nodes ^ 2 * 500 # フェーズ2の学習回数

library(som)
somm <- som(
std,
n_nodes,
n_nodes,
topol="hexa",
rlen=c(rlen1,rlen2)
)

word_labs <- rownames(std)
#------------------------------------------------------------------------------

あとは「plot(somm)」を実行すると、Rのsomパッケージによるプロットが行わ
れます。これがちょっと味気ないので、KH Coderと同様のプロットを!という
場合は、さらに以下の手順に進みます。

[4] 「ツール」→「抽出語」→「自己組織化マップ」コマンドで、なんでも良
いので自己組織化マップを作成します。学習回数を「5」「10」などとしてお
くと、すぐに結果が出るでしょう。

[5] 自己組織化マップが表示されたら、「R Source」形式で保存します。仮に
「som.r」として保存することにします。

[6] 保存した「som.r」をファイルをテキストエディタで開き、下記の行を検
索します。

> word_labs <- rownames(d)

そして、この行から上をすべて削除してください(この行も削除します)。削
除したら、上書き保存します。※これによって「som.r」には、自己組織化
マップの結果をプロットするコマンドだけが残ります。

[7] Rに戻って、「som.r」を実行します。実行するには、Rのコンソールに
「som.r」をドラッグ&ドロップしてください。これでKH Coderと同じプロット
を作成できるはずです。


余談として、「som.r」の中の「n_cls <- 8」という部分の数字を変更すれば、
クラスター数を変更できます。また「plot_mode <- "color"」という部分の
「color」を「gray」「freq」「umat」等に変更すると、違う種類のプロット
を作成できます。もちろん、これらの部分を変更して、再度「som.r」を実行
するだけで変更できます。[1]〜[6]を再度実行する必要はありません。


- 関連一覧ツリー (■ をクリックするとツリー全体を一括表示します)