投稿

ラベル(som)が付いた投稿を表示しています

Rの自己組織化マップ(SOM)で文字が重ならないようにする方法

イメージ
Rでsom関数を使って自己組織化マップを作った後、各ユニットの座標に文字列をplotした場合、同じユニットに配置された文字列の重なりが気になることってありますよね。 下記は、放送大学の 「データからの知識発見」という授業のテキスト からの引用です。 重なり対処を全く行っていない表示例 入門者向けの講義なので、サンプルコードのシンプルさを優先したのか、文字の重なりについての対処はありません。用いられていた入力のデータ数(動物の数)が14、同じ場所に配置されてしまったデータが最大で2個なので、なんとか読み取れます。ライオンとトラが重なると「ライトオン」っぽくなるというのはトリビアですね。 ただ、データ数が多くなって、3つも4つも重なってくると、読み取れなくなって実害が出てくると思います。 「 データマイニング入門 」(わたせせいぞうの表紙のシリーズのやつ)では、そこに一工夫されていて、$visualで得られる座標をそのまま使うのではなく、乱数を加えることによって、文字が全く同じ位置で重なることを避けています↓ 乱数による重なり対処を行った表示例 でも、そこはやはり乱数なので、うまく分離されているところもあれば、これじゃ読み取れないでしょってレベルのところもあります。 ↓以下は データマイニング入門 に載っていたサンプルをそのまま動かしたものです。 乱数による重なり対処を行った表示例(私の環境で実行させたもの) library ( som ) 動物データ 1 <- read.csv ( "animal1.csv" , header=T ) 標準化動物データ <- normalize ( 動物データ 1 [ , 2 : 14 ] , byrow=F ) 動物 SOM <- som ( 標準化動物データ , xdim= 10 , ydim= 10 , topol= "rect" ) 乱数 <- cbind ( rnorm ( nrow ( 動物データ 1 ) , 0 , 0.15 ) , rnorm ( nrow ( 動物データ 1 ) , 0 , 0.15 ) ) 動物マップ <- ...