ターン:コミュニティは、評価指標-NMIを発見

免責事項:この記事は再現CC BY-SA 4.0の著作権契約を、従って、ブロガーオリジナル記事です、元のソースのリンクと、この文を添付してください。
              
                    このリンク:HTTPS://blog.csdn.net/kan2281123066/article/details/73825009

                   
                                            。1、はじめに
クラスタで使用NMI(正規化相互情報)正規化相互情報は、どのように密接に2つのクラスタリング結果の尺度。(コミュニティ検出)が見つかりましたコミュニティは、より客観的に、標準的な分割の間で分割コミュニティに比べて精度を評価することができる重要な尺度です。NMIの範囲は、より高い議員がより正確かもしれ、0-1です。
2、Pythonコード
#コーディング= UTF-8
のNPとしてインポートnumpyの
インポート数学
NMI(A、B)DEF:
    #1 LEN(A)は、LEN(B)に等しくなければならない
    合計= LEN(A)
    A_ids =セット(A)
    B_ids =セット(B )
    #Mutual情報
    MI = 0
    EPS = 1.4E-45
    IDAためA_idsで:
        B_idsでIDB用:
            idAOccur = np.where(A == IDA)
            idBOccur = np.where(B == IDB)
            idABOccur = np.intersect1d (idAOccur、idBOccur)
            PX = 1.0 * lenは(idAOccur [0])/総
            PY = 1.0 * lenは(idBOccur [0])/総
            PXY = 1.0 * lenは(idABOccur)/合計
            MI = MI + PXY * math.log(PXY /(PXの*はPY)+ EPS、2)
    #正規化相互情報
    のHx = 0
    A_idsにおけるIDAのために:
        idAOccurCount = 1.0 * LEN(np.where(A == IDA)[ 0])
        のHx = Hxの- (idAOccurCount /合計)* math.log(idAOccurCount /総+ EPS、2)
    のHy = 0
    B_idsでIDB用:
        idBOccurCount = 1.0 * LEN(np.where(B == IDB)[0 ])
        のHy =のHy - (idBOccurCount /合計)* math.log(idBOccurCount /総+ EPS、2)
    MIhat = 2.0×MI /(のHx + Hyの)
    戻りMIhat
もし__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])
    プリント(NMI(A、B) )
12345678910111213141516171819202122232425262728293031323334353637
結果:0.36456
---------------------
免責事項:この記事はCC BY-SA 4.0著作権協定に従って、「王子甲斐甲斐_」CSDNブロガーオリジナル記事です。 、複製、元のソースのリンクと、この文を添付してください。
オリジナルリンクします。https://blog.csdn.net/kan2281123066/article/details/73825009

おすすめ

転載: www.cnblogs.com/ruogu2019/p/11364421.html