精华内容
下载资源
问答
  • 可用于评估社区划分效果的标准互信息NMI的Python代码。输入为算法的社区划分结果与真实划分结果,均为二维列表。
  • 对于NMI计算的python实现
  • NMI标准互信息,用于评价复杂网络质量,适用于重叠社区的评价,java实现
  • 互信息神经估计 该存储库包含使用相互信息神经估计(MINE)的信息瓶颈(IB)的pytorch实现。 已使用标准基线MLP(如Deep VIB论文中所述进行了比较)。 设置 git clone ...
  • 离散序列的标准互信息计算(转载)

    千次阅读 2017-07-19 22:50:00
    离散序列的标准互信息计算  来源:http://www.cnblogs.c...

                                                                                                        离散序列的标准互信息计算

                                                                    来源:http://www.cnblogs.com/ziqiao/archive/2011/12/13/2286273.html

    一、离散序列样本

      X = [1 1 1 1 1 1   2 2 2 2 2 2    3 3 3 3 3];

      Y= [1 2 1 1 1 1   1 2 2 2 2 3    1 1 3 3 3];

    二、计算离散序列X与Y的互信息(Mutual information

      MI可以按照下面的公式(1)计算:

                                                           

    X和Y的联合分布概率p(x,y)和边缘分布律p(x)、p(y)如下:

                                                     

    其中,分子p(x,y)为x和y的联合分布概率:

                                                               p(1,1)=5/17, p(1,2)=1/17, p(1,3)=0;

                                                               p(2,1)=1/17, p(2,2)=4/17, p(2,3)=1/17;

                                                               p(3,1)=2/17, p(3,2)=0, p(3,3)=3/17;                  

    分母p(x)为x的概率函数,p(y)为y的概率函数,

                                                    对p(x):

                                                               p(1)=6/17,p(2)=6/17,p(3)=5/17  

                                                    对p(y):

                                                               p(1)=8/17,p(2)=5/17,P(3)=4/17 

    把上述概率代入公式(1),就可以算出MI。

    三、计算标准化互信息NMI(Normalized Mutual information)

      标准化互信息,即用熵做分母将MI值调整到0与1之间。一个比较多见的实现是下面所示:

                                                                 

    H(X)和H(Y)分别为X和Y的熵,H(X)计算公式如下,公式中log的底b=2。

                                                          

    例如,H(X) =  -p(1)*log2(p(1)) - -p(2)*log2(p(2)) -p(3)*log2(p(3))。

     

    四、计算标准互信息的MATLAB程序

    function MIhat = nmi( A, B ) %NMI Normalized mutual information
    % http://en.wikipedia.org/wiki/Mutual_information
    % http://nlp.stanford.edu/IR-book/html/htmledition/evaluation-of-clustering-1.html
    % Author: http://www.cnblogs.com/ziqiao/   [2011/12/13] if length( A ) ~= length( B)
        error('length( A ) must == length( B)');
    end
    total = length(A);
    A_ids = unique(A);
    B_ids = unique(B);
    
    % Mutual information
    MI = 0;
    for idA = A_ids
        for idB = B_ids
             idAOccur = find( A == idA );
             idBOccur = find( B == idB );
             idABOccur = intersect(idAOccur,idBOccur); 
             
             px = length(idAOccur)/total;
             py = length(idBOccur)/total;
             pxy = length(idABOccur)/total;
             
             MI = MI + pxy*log2(pxy/(px*py)+eps); % eps : the smallest positive number
    
        end
    end
    
    % Normalized Mutual information
    Hx = 0; % Entropies
    for idA = A_ids
        idAOccurCount = length( find( A == idA ) );
        Hx = Hx - (idAOccurCount/total) * log2(idAOccurCount/total + eps);
    end
    Hy = 0; % Entropies
    for idB = B_ids
        idBOccurCount = length( find( B == idB ) );
        Hy = Hy - (idBOccurCount/total) * log2(idBOccurCount/total + eps);
    end
    
    MIhat = 2 * MI / (Hx+Hy);
    end
    
    % Example :  
    % (http://nlp.stanford.edu/IR-book/html/htmledition/evaluation-of-clustering-1.html)
    % A = [1 1 1 1 1 1   2 2 2 2 2 2    3 3 3 3 3];
    % B = [1 2 1 1 1 1   1 2 2 2 2 3    1 1 3 3 3];
    % nmi(A,B)% ans = 0.3646

      为了节省运行时间,将for循环用矩阵运算代替,1百万的数据量运行 1.795723second,上面的方法运行3.491053 second;  但是这种方法太占内存空间, 五百万时,利用matlab2011版本的内存设置就显示Out of memory了。

    版本一:

    function MIhat = nmi( A, B )
    %NMI Normalized mutual information
    % http://en.wikipedia.org/wiki/Mutual_information
    % http://nlp.stanford.edu/IR-book/html/htmledition/evaluation-of-clustering-1.html
    % Author: http://www.cnblogs.com/ziqiao/   [2011/12/15] if length( A ) ~= length( B)
        error('length( A ) must == length( B)');
    end
    total = length(A);
    A_ids = unique(A);
    A_class = length(A_ids);
    B_ids = unique(B);
    B_class = length(B_ids);
    % Mutual information
    idAOccur = double (repmat( A, A_class, 1) == repmat( A_ids', 1, total ));
    idBOccur = double (repmat( B, B_class, 1) == repmat( B_ids', 1, total ));
    idABOccur = idAOccur * idBOccur';
    Px = sum(idAOccur') / total;
    Py = sum(idBOccur') / total;
    Pxy = idABOccur / total;
    MImatrix = Pxy .* log2(Pxy ./(Px' * Py)+eps);
    MI = sum(MImatrix(:))
    % Entropies
    Hx = -sum(Px .* log2(Px + eps),2);
    Hy = -sum(Py .* log2(Py + eps),2);
    %Normalized Mutual information
    MIhat = 2 * MI / (Hx+Hy);
    % MIhat = MI / sqrt(Hx*Hy); another version of NMIend
    
    % Example :  
    % (http://nlp.stanford.edu/IR-book/html/htmledition/evaluation-of-clustering-1.html)
    % A = [1 1 1 1 1 1   2 2 2 2 2 2    3 3 3 3 3];
    % B = [1 2 1 1 1 1   1 2 2 2 2 3    1 1 3 3 3];
    % nmi(A,B) % ans =  0.3646

    版本二:

    A = [1 1 1 1 1 1   2 2 2 2 2 2    3 3 3 3 3];
    B = [1 2 1 1 1 1   1 2 2 2 2 3    1 1 3 3 3];
     
     if length( A ) ~= length( B)
        error('length( A ) must == length( B)');
     end
     
    total = length(A);                  %17
    A_ids = unique(A);                %[1,2,3]
    A_class = length(A_ids);       % 3
    B_ids = unique(B);                 %[1,2,3]
    B_class = length(B_ids);        %3
    
    % Mutual information
    idAOccur = double (repmat( A, A_class, 1) == repmat( A_ids', 1, total ));
    idBOccur = double (repmat( B, B_class, 1) == repmat( B_ids', 1, total ));
    idABOccur = idAOccur * idBOccur';
    Px = sum(idAOccur') / total;
    Py = sum(idBOccur') / total;
    Pxy = idABOccur / total;
    miMatrix = Pxy .* log2(Pxy ./(Px' * Py)+eps);  %加上一个很小的数,log2的真数部分不能<=0.
    mi = sum(miMatrix(:));
    
    % Entropies(熵)
    Hx = -sum(Px .* log2(Px + eps),2);
    Hy = -sum(Py .* log2(Py + eps),2);
    
    %Normalized Mutual information
    nmi= 2 * mi / (Hx+Hy)   % nmi = mi / sqrt(Hx*Hy); another version of nmi

     

    展开全文
  • 标准互信息的python实现(sklearn)

    万次阅读 2019-05-27 20:06:13
    标准互信息(normalized Mutual Information, NMI)用于度量聚类结果的相似程度,是community detection的重要指标之一,其取值范围在[0 1]之间,值越大表示聚类结果越相近,且对于[1, 1, 1, 2] 和 [2, 2, 2, 1]的...

    标准化互信息(normalized Mutual Information, NMI)用于度量聚类结果的相似程度,是community detection的重要指标之一,其取值范围在[0 1]之间,值越大表示聚类结果越相近,且对于[1, 1, 1, 2] 和 [2, 2, 2, 1]的结果判断为相同
    其论文可参见Effect of size heterogeneity on community identification in complex networks
    举例说明:
    对于6个点(v1, v2, …, v6),若聚成3个类
    真实值为v1, v2, v3一个类,v4一个类,v5,v6一个类,则其结果可写为[1, 1, 1, 2, 3, 3] (相同的数字表示对应的id属于同一个类)
    通过自己的聚类算法,得到v1, v4一个类,v2, v5一个类 v3, v6一个类,则结果为[1, 2, 3, 1, 2, 3]
    也可查看Mutual information and Normalized Mutual information 互信息和标准化互信息查看相关解析
    在python中,sklearn已集成了相关计算步骤,直接调用即可:

    from sklearn import metrics
    if __name__ == '__main__':
        A = [1, 1, 1, 2, 3, 3]
        B = [1, 2, 3, 1, 2, 3]
        result_NMI=metrics.normalized_mutual_info_score(A, B)
        print("result_NMI:",result_NMI)
    
    result_NMI: 0.30192109848
    
    展开全文
  • 以鸢尾花数据为例: from sklearn import metrics ...def NMI_matrix(df): # 计算标准互信息矩阵 number = df.columns.size # 获取df的列数 List = [] Name = [] for n in range(number): Name

    以鸢尾花数据为例:

    from sklearn import metrics
    import pandas as pd
    import seaborn as sns
    import matplotlib.pyplot as plt
    
    
    def NMI_matrix(df):  # 计算标准化互信息矩阵
        number = df.columns.size  # 获取df的列数
        List = []
        Name = []
        for n in range(number):
            Name.append(df.columns[n])  # 获取dataframe的索引
        for i in range(number):
            A = []
            X = df[df.columns[i]]  # df.columns[i]获取对应列的索引,df['索引']获取对应列的数值
            for j in range(number):
                Y = df[df.columns[j]]
                A.append(metrics.normalized_mutual_info_score(X, Y))  # 计算标准化互信息
            List.append(A)  # List是列表格式
        print('NMI(标准化互信息) = \n', pd.DataFrame(List, index=Name, columns=Name))  # 将二维列表转为dataframe格式
        figure, ax = plt.subplots(figsize=(12, 12))
        sns.heatmap(pd.DataFrame(List, index=Name, columns=Name), square=True, annot=True, ax=ax)  # 画出热力图
        plt.show()
    
    
    if __name__ == '__main__':
        path = './seaborn-data-master/iris.csv'
        data = pd.read_csv(path)  # 读取csv格式的数据
        df = data.iloc[:, :4]  # 取前四列数据
        NMI_matrix(df)  # df是dataframe格式,计算df的标准化互信息矩阵
    
    

    输出在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 在MATLAB软件中,采用互信息法计算时间序列的延迟时间。
  • 聚类的评价指标NMI标准互信息+python实现+sklearn调库概念引例公式信息熵相对熵(relative entropy)互信息*归一化互信息(NMI)代码pythonsklearn 概念 标准互信息(normalized Mutual Information, NMI)用于...

    概念

    标准化互信息(normalized Mutual Information, NMI)用于度量聚类结果的相似程度,是community detection的重要指标之一,其取值范围在[0 1]之间,值越大表示聚类结果越相近,且对于[1, 1, 1, 2] 和 [2, 2, 2, 1]的结果判断为相同

    引例

    对于6个点(v1, v2, …, v6),若聚成3个类
    真实值为v1, v2, v3一个类,v4一个类,v5,v6一个类,则其结果可写为[1, 1, 1, 2, 3, 3] (相同的数字表示对应的id属于同一个类)

    通过自己的聚类算法,得到v1, v4一个类,v2, v5一个类 v3, v6一个类,则结果为[1, 2, 3, 1, 2, 3]

    如何度量算法结果与标准结果之间的相似度,使结果越相似,值应接近1;如果算法结果很差则值接近0?

    公式

    信息熵

    H ( X ) = − ∑ i p ( x i ) log ⁡ p ( x i ) H(X)=-\sum_{i} p\left(x_{i}\right) \log p\left(x_{i}\right) H(X)=ip(xi)logp(xi)

    相对熵(relative entropy)

    又被称为Kullback-Leibler散度(Kullback-Leibler divergence,KL散度)或信息散度(information divergence)

    是两个概率分布(probability distribution)间差异的非对称性度量 。在在信息理论中,相对熵等价于两个概率分布的信息熵(Shannon entropy)的差值

    设p(x),q(x)是随机变量X上的两个概率分布,则在离散与连续随机变量的情形下,相对熵的定义分别为: K L ( p ∥ q ) = ∑ p ( x ) log ⁡ p ( x ) q ( x ) K L ( p ∥ q ) = ∫ p ( x ) log ⁡ p ( x ) q ( x ) \begin{array}{l} K L(p \| q)=\sum p(x) \log \frac{p(x)}{q(x)} \\ \\ K L(p \| q)=\int p(x) \log \frac{p(x)}{q(x)} \end{array} KL(pq)=p(x)logq(x)p(x)KL(pq)=p(x)logq(x)p(x)
    KL散度可以理解为两个概率分布的距离,但不是真的距离,即p对q的相对熵与q对p的相对熵不相等。

    互信息

    互信息(Mutual Information)是信息论里一种有用的信息度量,它可以看成是一个随机变量中包含的关于另一个随机变量的信息量,或者说是一个随机变量由于已知另一个随机变量而减少的不肯定性。

    设两个随机变量 ( X , Y ) (X,Y) (X,Y)的联合分布为 p ( x , y ) p(x,y) p(x,y),边缘分布分别为 p ( x ) , p ( y ) p(x),p(y) p(x),p(y)

    互信息 I ( X ; Y ) I(X;Y) I(X;Y) 是联合分布 p ( x , y ) p(x,y) p(x,y)与乘积分布 p ( x ) ( y ) p(x)(y) p(x)(y) 的相对熵,即公式为:
    I ( X ; Y ) = ∑ x ∑ y p ( x , y ) log ⁡ p ( x , y ) p ( x ) p ( y ) I(X ; Y)=\sum_{x} \sum_{y} p(x, y) \log \frac{p(x, y)}{p(x) p(y)} I(X;Y)=xyp(x,y)logp(x)p(y)p(x,y)

    *归一化互信息(NMI)

    将互信息缩放在[0,1]之间。比较常见的归一化方法:
    N M I ( X ; Y ) = 2 I ( X ; Y ) H ( X ) + H ( Y ) N M I(X ; Y)=2 \frac{I(X ; Y)}{H(X)+H(Y)} NMI(X;Y)=2H(X)+H(Y)I(X;Y)

    代码

    python

    # -*- coding:utf-8 -*-
    '''
    Created on 2017年10月28日
    
    @summary: 利用Python实现NMI计算
    
    @author: dreamhome
    '''
    import math
    import numpy as np
    from sklearn import metrics
    def NMI(A,B):
        #样本点数
        total = len(A)
        A_ids = set(A)
        B_ids = set(B)
        #互信息计算
        MI = 0
        eps = 1.4e-45
        for idA in A_ids:
            for idB in B_ids:
                idAOccur = np.where(A==idA)
                idBOccur = np.where(B==idB)
                idABOccur = np.intersect1d(idAOccur,idBOccur)
                px = 1.0*len(idAOccur[0])/total
                py = 1.0*len(idBOccur[0])/total
                pxy = 1.0*len(idABOccur)/total
                MI = MI + pxy*math.log(pxy/(px*py)+eps,2)
        # 标准化互信息
        Hx = 0
        for idA in A_ids:
            idAOccurCount = 1.0*len(np.where(A==idA)[0])
            Hx = Hx - (idAOccurCount/total)*math.log(idAOccurCount/total+eps,2)
        Hy = 0
        for idB in B_ids:
            idBOccurCount = 1.0*len(np.where(B==idB)[0])
            Hy = Hy - (idBOccurCount/total)*math.log(idBOccurCount/total+eps,2)
        MIhat = 2.0*MI/(Hx+Hy)
        return MIhat
    
    if __name__ == '__main__':
        A = np.array([1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3])
        B = np.array([1,2,1,1,1,1,1,2,2,2,2,3,1,1,3,3,3])
        print NMI(A,B)
        print metrics.normalized_mutual_info_score(A,B)
    
    

    标准化互信息NMI计算步骤及其Python实现 https://blog.csdn.net/DreamHome_S/article/details/78379635?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.baidujs&dist_request_id=1328603.9611.16149098780214877&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.baidujs

    sklearn

    from sklearn import metrics
    A = [1, 1, 1, 2, 3, 3]
    B = [1, 2, 3, 1, 2, 3]
    result_NMI=metrics.normalized_mutual_info_score(A, B)
    print("result_NMI:",result_NMI)
    
    展开全文
  • Matlab实现Kmeans聚类,并利用匈牙利算法Kuhn-Munkres实现对聚类标签和真实标签的映射,对结果进行聚类精度Accuracy评价和标准互信息Nmi评价思路输入数据为经典MNIST数据集利用Matlab中Kmeans算法对数据进行聚类聚类...
  • 马修斯相关系数MCC和标准互信息NMI

    千次阅读 2019-07-23 12:26:00
    1 机器学习知识补充 机器学习分为三个阶段: ...只有通过优秀的评价标准才能选择出性能更好的分类器。 2.马修斯相关系数(性能评估的指标) . 马修斯相关系数是应用在机器学习中,用以测量二分类的分类性能的指标...
  • 标准聚类信息也很简单,有几个不同的版本,大体思想都是相同的,都是用熵做分母将MI值调整到0与1之间。一个比较多见的实现是下面所示:   H(X)和H(Y)分别为X和Y的熵,下面的公式中log的底b=2。   ...
  • NMI(标准互信息) python实现

    万次阅读 多人点赞 2017-03-14 15:26:53
    介绍NMI是社区发现(community detection)在有标准ground-truth的情况下的重要衡量指标,基本可以比较客观地评价出一个社区划分与标准划分之间相比的准确度。NMI的值域是0到1,越高代表划分得越准。具体的原理和例子...
  • 据多变量之间的相关关系, 以输入输出之间的k- 近邻互信息变化率作为评价标准选择相关变量; 同时根据输入变 量子集之间互信息值的大小判断变量是否为冗余变量; 通过设定合适的阈值系数, 可以有效地实现输入变量...
  • 归一化互信息(NMI)评价指标

    万次阅读 2019-03-24 23:23:13
    信息熵 对信息进行量化度量。可以理解为某种特定信息的出现概率。 计算公式 相对熵 【百度百科】相对熵(relative entropy),又被称为Kullback-Leibler散度(Kullback-Leibler divergence,KL散度)或信息...
  • 互信息(mutual information)

    千次阅读 2017-09-29 17:09:50
    http://blog.csdn.net/pipisorry/article/details/51695283
  • 标准互信息NMI计算步骤及其Python实现

    万次阅读 多人点赞 2017-10-28 21:37:19
    Excellence is a continuous process and not an ...标准互信息NMI计算步骤及其Python实现 标准互信息NMI具体定义可以参考另一篇博客: https://smj2284672469.github.io/2017/10/27/community-detection-mea
  • 基于互信息(MI)的特征选择方法能够有效地降低数据维数,提高分析结果精度,但是,现有方法在特征选择过程中评判特征是否冗余的标准单一,无法合理排除冗余特征,最终影响分析结果。为此,提出一种基于最大联合条件...
  • 互信息计算matlab代码计算聚类之间的调整后的相互信息 该存储库包含用于在R中的聚类之间快速且并行地计算调整后的相互信息(AMI),归一化的相互信息(NMI)和调整后的兰德指数(ARI)的代码。 NMI和ARI被广泛使用...
  • 互信息

    千次阅读 2018-04-03 13:06:57
    我们可以有线性相关系数(皮尔逊积矩相关系数)、卡方检验(此处不谈)和互信息这几个指标来进行量化。 使用线性相关系数的前提自变量与因变量是线性关系,取值范围为[-1,1],负数表示负相关: ρx,y=cov(X,Y)σX,σ...
  • 为了进一步提高遥感图像配准精度,提出了尺度不变特征变换(SIFT)结合区域互信息优化的遥感图像配准方法.首先利用混沌序列的随机性和遍历性,提出一种混沌量子粒子群优化(CQPSO)算法,在量子粒子群优化(QPSO)算法迭代...
  • 为了在特征选择过程中得到较优的特征子集, 结合标准互信息和遗传算法提出了一种新的两阶段特征选择方法。该方法首先采用标准化的互信息对特征进行排序, 然后用排序在前的特征初始化第二阶段遗传算法的部分种群, ...
  • 1.NMI指数,互信息标准互信息      具体公式和matlab代码参见博客,Python代码参加,C++代码参见 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...
  • 为了获得决策系统中更好的相对属性约简,提出一种基于互信息的多目标属性约简算法。该算法首先根据互信息寻找核属性集;然后以最小属性子集和最大互信息为目标,定义新的适应度函数,在粒子运动方程、克隆及自适应...
  • 这里给出三个聚类效果评价指标:互信息标准互信息,调整互信息(MI, NMI, AMI),分别给出它们的计算方法与代码。需要指出的是,这三个指标均需要已知数据点的真实标签。 Preliminaries and Notation 已知 NNN 个...
  • 使用具有标准互信息的层次框架对医学图像进行非刚性配准
  • 使用互信息标准设计汉语拼音到字符转换的有效词典
  • 基于模糊粗糙集的信息熵模型提出最大互信息最大相关熵标准,并根据该标准设计了一种新的特征选择方法,能同时处理离散数据、连续数据和模糊数据等混合信息。经UCI数据集试验,表明该算法与其他算法相比,具有较高的...
  • Hanchuan Peng、Fuhui Long 和 Chris Ding,“基于互信息的特征选择:最大依赖、最大相关和最小冗余的标准”, IEEE 模式分析和机器智能汇刊, 卷。 27, No. 8, pp.1226-1238, 2005. [PDF] Ding C. 和 Peng HC,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 82,866
精华内容 33,146
关键字:

标准互信息