Find the Jaccard Index and Jaccard Distance between the two given sets
Last Updated :
29 Aug, 2022
Given two sets of integers s1 and s2, the task is to find the Jaccard Index and the Jaccard Distance between the two sets. Examples:
Input: s1 = {1, 2, 3, 4, 5}, s2 = {4, 5, 6, 7, 8, 9, 10} Output: Jaccard index = 0.2 Jaccard distance = 0.8 Input: s1 = {1, 2, 3, 4, 5}, s2 = {4, 5, 6, 7, 8} Output: Jaccard index = 0.25 Jaccard distance = 0.75
Approach: The Jaccard Index and the Jaccard Distance between the two sets can be calculated by using the formula:
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
set< int > intersection(set< int > s1, set< int > s2)
{
set< int > intersect;
set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(),
inserter(intersect, intersect.begin()));
return intersect;
}
double jaccard_index(set< int > s1, set< int > s2)
{
double size_s1 = s1.size();
double size_s2 = s2.size();
set< int > intersect = intersection(s1, s2);
double size_in = intersect.size();
double jaccard_in = size_in
/ (size_s1 + size_s2 - size_in);
return jaccard_in;
}
double jaccard_distance( double jaccardIndex)
{
double jaccard_dist = 1 - jaccardIndex;
return jaccard_dist;
}
int main()
{
set< int > s1;
s1.insert(1);
s1.insert(2);
s1.insert(3);
s1.insert(4);
s1.insert(5);
set< int > s2;
s2.insert(4);
s2.insert(5);
s2.insert(6);
s2.insert(7);
s2.insert(8);
s2.insert(9);
s2.insert(10);
double jaccardIndex = jaccard_index(s1, s2);
cout << "Jaccard index = "
<< jaccardIndex << endl;
cout << "Jaccard distance = "
<< jaccard_distance(jaccardIndex);
return 0;
}
|
Java
import java.util.*;
class GFG
{
static HashSet<Integer> intersection(HashSet<Integer> a, HashSet<Integer> b)
{
HashSet<Integer> intersect = new HashSet<Integer>();
for ( int n : a)
{
if (b.contains(n))
intersect.add(n);
}
return intersect;
}
static double jaccard_index(HashSet<Integer> s1, HashSet<Integer> s2)
{
int size_s1 = s1.size();
int size_s2 = s2.size();
HashSet<Integer> intersect = intersection(s1, s2);
int size_in = intersect.size();
double jaccard_in = ( double )size_in / ( double )(size_s1 + size_s2 - size_in);
return jaccard_in;
}
static double jaccard_distance( double jaccardIndex)
{
double jaccard_dist = 1 - jaccardIndex;
return jaccard_dist;
}
public static void main(String[] args)
{
HashSet<Integer> s1 = new HashSet<Integer>();
s1.add( 1 );
s1.add( 2 );
s1.add( 3 );
s1.add( 4 );
s1.add( 5 );
HashSet<Integer> s2 = new HashSet<Integer>();
s2.add( 4 );
s2.add( 5 );
s2.add( 6 );
s2.add( 7 );
s2.add( 8 );
s2.add( 9 );
s2.add( 10 );
double jaccardIndex = jaccard_index(s1, s2);
System.out.println( "Jaccard index = " + jaccardIndex);
System.out.println( "Jaccard distance = " +
jaccard_distance(jaccardIndex));
}
}
|
Python3
def intersection(s1, s2) :
intersect = s1 & s2 ;
return intersect;
def jaccard_index(s1, s2) :
size_s1 = len (s1);
size_s2 = len (s2);
intersect = intersection(s1, s2);
size_in = len (intersect);
jaccard_in = size_in / (size_s1 + size_s2 - size_in);
return jaccard_in;
def jaccard_distance(jaccardIndex) :
jaccard_dist = 1 - jaccardIndex;
return jaccard_dist;
if __name__ = = "__main__" :
s1 = set ();
s1.add( 1 );
s1.add( 2 );
s1.add( 3 );
s1.add( 4 );
s1.add( 5 );
s2 = set ();
s2.add( 4 );
s2.add( 5 );
s2.add( 6 );
s2.add( 7 );
s2.add( 8 );
s2.add( 9 );
s2.add( 10 );
jaccardIndex = jaccard_index(s1, s2);
print ( "Jaccard index = " ,jaccardIndex);
print ( "Jaccard distance = " ,jaccard_distance(jaccardIndex));
|
C#
using System;
using System.Collections.Generic;
class GFG
{
static HashSet< int > intersection(HashSet< int > a, HashSet< int > b)
{
HashSet< int > intersect = new HashSet< int >();
foreach ( int n in a)
{
if (b.Contains(n))
intersect.Add(n);
}
return intersect;
}
static double jaccard_index(HashSet< int > s1, HashSet< int > s2)
{
int size_s1 = s1.Count;
int size_s2 = s2.Count;
HashSet< int > intersect = intersection(s1, s2);
int size_in = intersect.Count;
double jaccard_in = ( double )size_in / ( double )(size_s1 + size_s2 - size_in);
return jaccard_in;
}
static double jaccard_distance( double jaccardIndex)
{
double jaccard_dist = 1 - jaccardIndex;
return jaccard_dist;
}
public static void Main( string [] args)
{
HashSet< int > s1 = new HashSet< int >();
s1.Add(1);
s1.Add(2);
s1.Add(3);
s1.Add(4);
s1.Add(5);
HashSet< int > s2 = new HashSet< int >();
s2.Add(4);
s2.Add(5);
s2.Add(6);
s2.Add(7);
s2.Add(8);
s2.Add(9);
s2.Add(10);
double jaccardIndex = jaccard_index(s1, s2);
Console.WriteLine( "Jaccard index = " + jaccardIndex);
Console.WriteLine( "Jaccard distance = " +
jaccard_distance(jaccardIndex));
}
}
|
Javascript
function intersection(a, b)
{
let intersect = new Set([...a].filter(i => b.has(i)));
return intersect;
}
function jaccard_index(s1, s2)
{
let size_s1 = s1.size;
let size_s2 = s2.size;
let intersect = intersection(s1, s2);
let size_in = intersect.size;
let jaccard_in = size_in / (size_s1 + size_s2 - size_in);
return jaccard_in;
}
function jaccard_distance(jaccardIndex)
{
let jaccard_dist = 1 - jaccardIndex;
return jaccard_dist;
}
let s1 = new Set();
s1.add(1);
s1.add(2);
s1.add(3);
s1.add(4);
s1.add(5);
let s2 = new Set();
s2.add(4);
s2.add(5);
s2.add(6);
s2.add(7);
s2.add(8);
s2.add(9);
s2.add(10);
let jaccardIndex = jaccard_index(s1, s2);
console.log( "Jaccard index = " , jaccardIndex);
console.log( "Jaccard distance = " ,
jaccard_distance(jaccardIndex));
|
Output:Jaccard index = 0.2
Jaccard distance = 0.8
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...