Jaccard similarity是用來計算某個兩個東西的相似度有多少,假設上表的1-7項目表示七種食物,ABCD分別表示四個人,1表示喜歡0表示不喜歡,我就可以利用Jaccard similarity來了了解B和C的喜好有多相似,Jaccard similarity長應用在機器學習裡面
Jaccard similarity的計算公式:J(A,B)=(A交集B)/(A聯集B)
以下是Java的實作範例
JaccardSimilarity.java:
package jaccardsimilarity; import lib.Jaccard; /** *Jaccard Similarity 計算實作 */ public class JaccardSimilarity { public static void main(String[] args) { boolean mix[][]= { {false,true,true,true}, {true,true,false,true}, {true,false,true,false}, {false,false,false,true}, {true,true,true,false}, {false,true,true,false}, {true,false,true,false}, }; Jaccard JaccardA=new Jaccard(mix); System.out.println(JaccardA.JaccardCount(1, 2));//B C的Jaccard similarity System.out.println(JaccardA.JaccardCount(0, 3));//A D的Jaccard similarity } }
Jaccard.java
package lib; public class Jaccard { private boolean data[][]; public Jaccard(boolean mix[][]) { this.data=mix; } public float JaccardCount(int x,int y)//要運算的兩個項目編號(0-N) { float andNum=0,orNum=0; int d=data.length; float Jac; for(int i=0;i<d;i++) { if(data[i][x]&data[i][y])//求交集數量 { andNum++; } if(data[i][x]|data[i][y])//求連集數量 { orNum++; } } Jac= andNum/orNum; return Jac; } }
輸出結果:
run:
0.5
0.16666667
發表留言