AUC计算

作者: 穿靴子的M | 来源:发表于2018-11-22 09:56 被阅读0次

    思路

    为最终比较划分好测试集和不存在边集【全集1-train-test-对角元】,根据集合中非零元【即边的数目】构建比较矩阵test_rd【比较n次,随机生成n个值右取整作为抽取的要比较的边】,下一步对test的邻接矩阵赋值,相似性指标给予一个分值存入test_pre,然后依据判断条件【test==1】只取其中非零边【为什么?降低内存?】,对应位置的test_pre存入test_data,再把最初的test_rd构建成稀疏矩阵【?为什么不直接比】,最后test_rd 和 non_rd比大小,分别给n',n''计算AUC


    AUC计算方法


    triu

    triu Extract upper triangular part.提取上三角


    function [ auc ] = CalcAUC( train, test, sim, n )

    %% 计算AUC,输入计算的相似度矩阵

        sim = triu(sim - sim.*train);%只保留上三角,因为同一条边取一次就足够了

    对于CN来说

    对应位置元素相乘,结果为训练集的相似度矩阵,这个不参与比较,因此要从sim中除掉

    % 只保留测试集和不存在边集合中的边的相似度(自环除外)

        non = 1 - train - test - eye(max(size(train,1),size(train,2)));

    %1代表全集,全连通图,减去边集,减去对角元,剩下的为不存在边集

    生成non【不存在边集】

        test = triu(test);

        non = triu(non);

        % 分别取测试集和不存在边集合的上三角矩阵,用以取出他们对应的相似度分值??【点乘sim,即后边的test_pre = sim .* test】

        test_num = nnz(test);

        non_num = nnz(non);

        test_rd = ceil( test_num * rand( 1, n)); 

    n=5为例 因为testnum=1,而且向右取整 如果testnum=5时

    % ceil是取大于等于的最小整数,n为抽样比较的次数

        non_rd = ceil( non_num * rand( 1, n));


        这里开始不太懂

    test_pre = sim .* test;%具体某条边乘他的相似性作为预测分值

        non_pre = sim .* non;%具体某条不存在边乘他的相似性作为预测分值


      这里不懂

      test_data =  test_pre( test == 1 )'; %????【将test中非零元对应位置的test_pre值取出存入test_data】

        % 行向量,test 集合存在的边的预测值

        non_data =  non_pre( non == 1 )'; 

        % 行向量,nonexist集合存在的边的预测值

        test_rd = test_data( test_rd );

        non_rd = non_data( non_rd );

        clear test_data non_data;

        n1 = length( find(test_rd > non_rd) ); 

        n2 = length( find(test_rd == non_rd));

    第二个元素相等

        auc = ( n1 + 0.5*n2 ) / n;

    end

    相关文章

      网友评论

          本文标题:AUC计算

          本文链接:https://www.haomeiwen.com/subject/ukehqqtx.html