XXd

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