めもめも ...〆(。_。)
認知心理学・認知神経科学とかいろいろなはなし。 あるいは科学と空想科学の狭間で微睡む。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ちまちまいじっていたRのプログラムのうち1つがちゃんと通るようになったので晒し上げ。
今回作ったのは、てけとーなデータからコサイン類似度を計算するもの。
自作関数とかめんどいので中身べた貼り。
「動きゃいーのよ」が開発理念ゆえに、だいぶぶさいくなコードですが自分が満足すればそれでいいのです。
参考にしたのはここ(http://isyus2.yz.yamagata-u.ac.jp/xoops/modules/pukiwiki/index.php?cmd=read&page=R%B8%C0%B8%EC%A4%CE%A5%E1%A5%E2%BD%F1%A4%AD&word=)。
data <- read.csv("調べるデータの名前.csv", header =T)
#ちなみにデータは、1行目に項目名、列ごとに各項目のデータが入るようにしてある
labeldata <- read.csv("Labels.csv", header =T)
names(labeldata)
#いろいろいじるので、めんどくさくなってラベル用にラベル(項目名)だけ書いたCSV用意しちゃった。てへ。
#ちなみに元データから抜き出す方法だと行番号がずれて、修正しようにも収拾つかなくなったので苦肉の策。
distmat1 <- diag(ncol(data))
#コサイン類似度出力用。おなじものは1になるのであらかじめ単位行列として作る
#コサイン類似度を計算。型変換しないとつまるので、ぶさいくながらこまめに変数にする
for (i in 2:nrow(distmat1)) {
for (j in 1: (i -1)) {
temp1 <- as.matrix(data[ ,j])
temp2 <- as.matrix(data[ ,i])
tempdot <- crossprod(temp1, temp2)
tempprod1 <- as.numeric(crossprod(temp1))
tempprod2 <- as.numeric(crossprod(temp2))
tempcos <- tempdot /sqrt(tempprod1 * tempprod2)
distmat1[i, j] <- tempcos
}
}
#計算していない上半分を下半分からコピーして対称行列にする
distmat2 <- distmat1 + t(distmat1)
diag(distmat2) <- diag(distmat2)/2
#クラスター分析用にコサイン類似度の距離に変換(要するに1から引き算)
onemat <- matrix(1, ncol(distmat2), nrow(distmat2))
#引き算用1だけ行列
distmat3 <- onemat - distmat2
#これが距離行列になる
#おまけのクラスター分析
(このへんはこの過去めもを参照)
AD <- as.dist (distmat3)
result1 <- hclust(AD, method ="ward")
plot(result1, labels=labeldata$ラベル用のデータのラベル)
#このlabelsをつけておかないと、plotが数字(order)だけの図になってしまう
だいたいこんなかんじ。
ちなみに、Rのdist関数はユークリッド距離と最大距離とマンハッタン距離とミンコフスキー距離と、あとなんか
今回作ったのは、てけとーなデータからコサイン類似度を計算するもの。
自作関数とかめんどいので中身べた貼り。
「動きゃいーのよ」が開発理念ゆえに、だいぶぶさいくなコードですが自分が満足すればそれでいいのです。
参考にしたのはここ(http://isyus2.yz.yamagata-u.ac.jp/xoops/modules/pukiwiki/index.php?cmd=read&page=R%B8%C0%B8%EC%A4%CE%A5%E1%A5%E2%BD%F1%A4%AD&word=)。
data <- read.csv("調べるデータの名前.csv", header =T)
#ちなみにデータは、1行目に項目名、列ごとに各項目のデータが入るようにしてある
labeldata <- read.csv("Labels.csv", header =T)
names(labeldata)
#いろいろいじるので、めんどくさくなってラベル用にラベル(項目名)だけ書いたCSV用意しちゃった。てへ。
#ちなみに元データから抜き出す方法だと行番号がずれて、修正しようにも収拾つかなくなったので苦肉の策。
distmat1 <- diag(ncol(data))
#コサイン類似度出力用。おなじものは1になるのであらかじめ単位行列として作る
#コサイン類似度を計算。型変換しないとつまるので、ぶさいくながらこまめに変数にする
for (i in 2:nrow(distmat1)) {
for (j in 1: (i -1)) {
temp1 <- as.matrix(data[ ,j])
temp2 <- as.matrix(data[ ,i])
tempdot <- crossprod(temp1, temp2)
tempprod1 <- as.numeric(crossprod(temp1))
tempprod2 <- as.numeric(crossprod(temp2))
tempcos <- tempdot /sqrt(tempprod1 * tempprod2)
distmat1[i, j] <- tempcos
}
}
#計算していない上半分を下半分からコピーして対称行列にする
distmat2 <- distmat1 + t(distmat1)
diag(distmat2) <- diag(distmat2)/2
#クラスター分析用にコサイン類似度の距離に変換(要するに1から引き算)
onemat <- matrix(1, ncol(distmat2), nrow(distmat2))
#引き算用1だけ行列
distmat3 <- onemat - distmat2
#これが距離行列になる
#おまけのクラスター分析
(このへんはこの過去めもを参照)
AD <- as.dist (distmat3)
result1 <- hclust(AD, method ="ward")
plot(result1, labels=labeldata$ラベル用のデータのラベル)
#このlabelsをつけておかないと、plotが数字(order)だけの図になってしまう
だいたいこんなかんじ。
ちなみに、Rのdist関数はユークリッド距離と最大距離とマンハッタン距離とミンコフスキー距離と、あとなんか
canberraとかbinaryとかいうのならデフォルトで対応しているそうな。
http://127.0.0.1:23392/library/stats/html/dist.html
まあ要するにそれ以外なら自力でなんとかせんといかんということかいのう。
まあいいや。
だいたいでいいや。
この記事にコメントする
この記事にトラックバックする
トラックバックURL:
カレンダー
10 | 2024/11 | 12 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
カテゴリ説明
もっさり:日々の雑感をもっさり。
がっつり:論文や研究関連をがっつり。
びっくり:科学ニュースでびっくり。
まったり:空想科学などでまったり。
ばっかり:デザイン系自己満足ばっかり。
ほっこり:お茶を嗜んでほっこり。
がっつり:論文や研究関連をがっつり。
びっくり:科学ニュースでびっくり。
まったり:空想科学などでまったり。
ばっかり:デザイン系自己満足ばっかり。
ほっこり:お茶を嗜んでほっこり。
最新コメント
※SPAMが多いのでhttpを含むコメントと英語のみのコメントを禁止しました※
最新記事
(05/08)
(04/24)
(04/10)
(02/03)
(11/01)
最新トラックバック
プロフィール
HN:
az
性別:
非公開
自己紹介:
興味のあるトピックス
分野は視覚認知。視知覚にがて。
あと記憶全般。
カテゴリ (semanticsか?) とかも。
最近デコーディングが気になる。
でも基本なんでもこい。
好奇心は悪食。
好きな作家(敬称略)
川上弘美
小林秀雄
津原泰水
森茉莉
レイ・ブラッドベリ
イタロ・カルヴィーノ
グレッグ・イーガン
シオドア・スタージョン
分野は視覚認知。視知覚にがて。
あと記憶全般。
カテゴリ (semanticsか?) とかも。
最近デコーディングが気になる。
でも基本なんでもこい。
好奇心は悪食。
好きな作家(敬称略)
川上弘美
小林秀雄
津原泰水
森茉莉
レイ・ブラッドベリ
イタロ・カルヴィーノ
グレッグ・イーガン
シオドア・スタージョン
ブログ内検索
最古記事
(08/05)
(08/16)
(08/19)
(08/19)
(08/21)
カウンター
フリーエリア
PR