[Python] MMD (Maximum Mean Discrepancy) using Jaccard Similarity?

Discussão em 'Python' iniciado por Stack, Junho 23, 2025.

  1. Stack

    Stack Membro Participativo

    I am currently computing the Maximum Mean Discrepancy (MMD) between two binary (0/1) datasets using Jaccard similarity. The code works, but since I’m new to this concept, I’d really appreciate any feedback on whether this is an appropriate approach.

    Thank you in advance!

    import numpy as np
    from sklearn.metrics.pairwise import pairwise_distances

    # Jaccard Kernel function
    def jaccard_kernel(X, Y=None):
    # self kernel
    if Y is None:
    Y = X

    jaccard_distance = pairwise_distances(X, Y, metric='jaccard')
    jaccard_similarity = 1- jaccard_distance
    return jaccard_similarity

    # MMD function
    def compute_mmd_with_kernel(X, Y):
    # Step 1: Compute the Jaccard kernel
    similarity_matrix_X = jaccard_kernel(X)
    similarity_matrix_XY = jaccard_kernel(X, Y)
    similarity_matrix_Y = jaccard_kernel(Y)

    # Step 2: Calculate MMD terms
    m_X = len(X)
    m_Y = len(Y)

    # Calculate terms
    term_X = np.sum(similarity_matrix_X) / (m_X * (m_X - 1))
    term_XY = np.sum(similarity_matrix_XY) / (m_X * m_Y)
    term_Y = np.sum(similarity_matrix_Y) / (m_Y * (m_Y - 1))

    # Step 3: Compute MMD^2
    mmd_squared = term_X - 2 * term_XY + term_Y

    # Step 4: Compute final MMD
    mmd = np.sqrt(mmd_squared)

    return mmd


    Reference: https://www.onurtunali.com/ml/2019/03/08/maximum-mean-discrepancy-in-machine-learning.html`

    Continue reading...

Compartilhe esta Página