■google

■最近のコメント
■最近のトラックバック
■最近の記事
■月別アーカイブ
■ブログランキング
■ブログ検索

■ブロとも申請フォーム
■リンク
■RSSフィード
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


スポンサー広告 | --:--:--
共起性尺度
共起尺度について説明します。

共起とは、まさに
ある一組の「共に起きる」程度を表したものです。

例えば、
amazonで本を検索するときに、
この商品を買っている人は、この本も買っています
と紹介されますが、それは、過去の購買データから、
共起が高い商品を勧めているのです。

共起尺度として、
主なものは、
共起頻度、Jaccard係数Simpson係数コサイン距離があります。

これらの指標について、「X」と「Y」という一組の共起性がどう測られるか示します
「X」と「Y」の単独での出現数を|X|、|Y|、
どちらか一方が出現した回数を|X∪Y|、
両方が出現した回数を|X∩Y|とします。

A)共起頻度
共起の回数であり、 |X∩Y|で計算される。

B)Jaccard係数
どちらかが出現したうち、何回同時に出現するかで、
|X∩Y|/|X∪Y|で計算される

C)Simpson係数
Jaccard係数の場合、多くと共起している場合、
小さくなってしまいます。(分母が大きくなる)
そういったときには、分母にminを使っているSimpson係数が便利
計算は、
|X∩Y|/min(|X|,|Y|)です

(D)コサイン距離
値としては、Jaccard係数Simpson係数の中間くらいです
ベクトル間の距離を測るものです
計算は、
|X∩Y|/sqrt(|X||Y|)です

どれも、0-1の間に収まります。
データによって、どの指標が適しているのかは違いますので
是非比べてみてください。

おすすめの参考文献は
松尾豊,友部博教,橋田浩一, 中島秀之,石塚満(2005)「Web上からの人間関係ネットワークの抽出」人工知能学会論文誌20巻1号
です

さて、これらの指標を計算するプログラムを紹介します。
以前書いたもので
今見るともっともっと簡潔に書けそうではあります。

関数を書くときには、
「後でも修正できるようにわかりやすく!」
「できるだけ早く計算できるように!」
というバランスが結構難しいのですね。。。

Jaccard係数
jaccard.function<-function(x){#jaccard係数を行列で返す関数。
#構造:キーワード毎の個人が要素になる集合を生成し、和集合、積集合を求める。
     for(i in 1:nrow(x)){
for(j in 1:ncol(x)){
if(x[i,j]!=0)x[i,j]<-i # 値が0以外のところに列番号を代入
}
}
J<-matrix(0,nrow=ncol(x),ncol=ncol(x)) #(キーワード数)×(キーワード数)の行列を準備
for(k in 1:ncol(x)){ #Jaccard係数の計算
for(l in 1:ncol(x)){
A<-x[,k] #あるワードに属する個人が要素となる集合A
A<-A[A != 0] #集合Aから0を取り除く。
B<-x[,l] #同様に、集合Bを生成。
B<-B[B != 0] #集合Bから0を取り除く。
J[k,l]<-(length(intersect(A,B))/length(union(A,B))) #積集合/和集合
}
}
rownames(J)<-colnames(x) #行名の付与
colnames(J)<-colnames(x) #列名の付与(行名、列名は同じ)
return(J) #jaccard係数の行列を返す。
}



Simpson係数 simpson.function<-function(x){#シンプソン係数の計算
simpson<-matrix(NA,ncol=ncol(x),nrow=ncol(x)) #Simpson係数を格納する行列
for(i in 1:ncol(x)){
for(j in 1:ncol(x)){ # Simpson係数の算出
simpson[i,j]<-(x[,i]%*%x[,j])/(min(sum(x[,i]),sum(x[,j])))
}
}
rownames(simpson)<-colnames(x) #行名の付与
colnames(simpson)<-colnames(x) #列名の付与(行名、列名は同じ)
return(simpson) #Simpson係数の行列を返す
}



コサイン距離
cosine.function<-function(x){#列ベクトルのコサイン距離の計算
col.similarity<-matrix(NA,ncol=ncol(x),nrow=ncol(x)) #コサイン距離を格納する行列
for(i in 1:ncol(x)){
for(j in 1:ncol(x)){ #コサイン距離の算出
col.similarity[i,j]<-(x[,i]%*%x[,j])/(sqrt(sum(x[,i]^2))*sqrt(sum(x[,j]^2)))
}
}
rownames(col.similarity)<-colnames(x) #列名の付与
colnames(col.similarity)<-colnames(x) #行名の付与
return(col.similarity) #コサイン距離の行列を返す
}



以下に例を示します。
多くの場合
Jacard係数 < コサイン距離 < Simpson係数
という傾向にあります。
共起尺度の例

すみません、クリックで見れます

共著関係の分析、
検索語で同時に検索される言葉、
レストランでの注文、
調理する食材・・・etc
色々な場面で使えそうです


※たいしたものではありませんが、研究等でこのプログラムを使われる際には、
必ず参考文献に入れてくださいね.

スポンサードリンク



プログラム | 23:45:45 | Trackback(0) | Comments(6)
微分
R微分もできます。

使う関数はDです。

例:
>F<- expression( 2+3*X+4*X^2+exp(2*X)+log(x) )
>D(F, "X")
3 + 4 * (2 * X) + exp(2 * X) * 2

Fで関数を定義して、
D(関数,"どの変数で微分するか")となります。
スポンサードリンク



その他 | 23:51:45 | Trackback(0) | Comments(0)
ネットワーク分析関連

ネットワーク分析関連のおすすめ書籍です。

最もわかりやすいのがこちらです。
幅広く紹介されているだけでなく。
特に中心性の計算式が良い。
中心性の計算式の定義はRで使われているものと同じ。




新書ならこちらがおすすめ。
値段も手頃ということもあるが、
読みやすく、しかも結構細かく説明されている。
スモールワールドスケールフリー
6次の隔たり、中心、クラスターなど
ネットワーク分析のキーワードが分かりやすく紹介。




ネットワーク分析 | 15:41:56 | Trackback(0) | Comments(0)
ネットワーク図の描画part2
前回のネットワーク図の描画では、
隣接行列からのネットワーク図の描画を説明しましたが、
今回は、ノード間のエッジを直接定義することから
ネットワークを定義したいと思います。

前回と同様に、
AさんはB,Cと友達
Bさんは、DとEと友達という関係をみます

したがって、今回のエッジの定義はこんな感じです。
A--B
A--C
B--D
B--E


手順は以下の通りです。

0.igraphライブラリの呼び出し
library(igraph)
インストールしていない場合には、
install.packages("igraph")


1.ノード番号を振る。
AからEまで0から4の番号を振ります。
igraphでは、基本的には0から始まるので注意。

2.エッジの定義
下の図のようにエッジX_Yを作ります。
これくらいならR上で作ってもよいですが、
多くなった時はCSVファイルで用意した方が便利です。
ファイルからの読み込みはこちら
no name


3,ネットワークの生成・描画

g <-as.undirected(graph.edgelist(X_Y))
V(g)$name<-c("A","B","C","D","E")
plot(g,vertex.label=V(g)$name)


as.undirectedをas.directedにすると有向グラフになります。
その場合は、左の列のノードから右の列のノードに向かったエッジです。

V(g)$nameによってノードに名前を付けています。

plotをtkplotにすると、マウスでノードの場所などを調整できます。


ネットワーク分析 | 15:09:27 | Trackback(0) | Comments(0)
文字化け
Rを開くといつも文字化けしているという方が
Windowsを使っている人に結構いるようです。

相談されることも多いので、ここに記します。
多くの場合はこれで対処できます。

入っているフォルダなど少し違う場合もありますが、
大体下記のような感じで探して下さい。

まず、
Cドライブ>Program Files > R >R-2.5.0>etc
にあるRconsoleをワードパットか何かで開いて下さい。


すると、このような画面が出てきます。

font

(クリックで大きくなります)

このfontの部分を上の図のように
font = TT MS Gothic
に直して上書き保存。


これで完了。
スポンサードリンク


Rの性質 | 18:43:59 | Trackback(0) | Comments(3)
前のページ 次のページ

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。