周工作总结

Glocal代码理解

目录

在这里插入图片描述

data

data为数据集,本论文提供的代码使用的数据集为:art,分test和train
在这里插入图片描述

evl

在这里插入图片描述

evl是评价指标,本论文代码主要采用以下指标:
AU_ROC-ROC曲线下面积,AUC表示ROC曲线下的面积,主要用于衡量模型的泛化性能,即分类效果的好坏.
Average_precision:计算预测的平均精度。
coverage:覆盖率,计算需要多少步才能将预测的标签排名向下移动以覆盖实例的所有正标签。
Ranking:排名损失,负面标签排名高于正面标签的分数。

lib

在这里插入图片描述
lib依赖里主要是manopt包,Manopt是一个用于流形优化的Matlab工具箱。

clf

在这里插入图片描述

clf为分类器,也是作者真正写代码的部分。

InitGroup是初始化组,聚类

InitUVW:作用为:初始化 U , V , W U,V,W U,V,W,其中, Y ∈ R l × n Y\in \mathbb{R}^{l\times n} YRl×n是一个 l × n l\times n l×n的实际标签矩阵,它的秩是 k < l k<l k<l,将它分解为两个矩阵 U ∈ R l × k U\in \mathbb{R}^{l\times k} URl×k V ∈ R k × n V\in \mathbb{R}^{k\times n} VRk×n为了将实例映射到潜在标签,设置 W ∈ R d × k W\in \mathbb{R}^{d\times k} WRd×k是一个 d × k d\times k d×k的矩阵。可通过最小化平方损失得到。

UpdateS:作用为在梯度下降的过程中不断的修正Z
在这里插入图片描述

UpdateU:作用为在梯度下降的过程中不断的修正U
在这里插入图片描述

UpdateV:作用为在梯度下降的过程中不断的修正V在这里插入图片描述
UpdateW:作在这里插入图片描述
用为在梯度下降的过程中不断的修正W
在这里插入图片描述
代码主程序MLCTrain(本质就是不断循环梯度下降修正参数来得到满足下式的4个参数):

function [V,U,W,MgPool,Beta,time,T,perf] = MLCTrain(J,Y, X, Ytst,Xtst,param)
  [d,n] = size(X);
  [l,~] = size(Y);
  k = param.k;
  k2 = param.k2;
  
  V = rand(k,n);
  W = zeros(d,k);
  U = rand(l,k);
  perf = 0;

      
  o = sum(J(:));
  
  perf = [];
  param.lambda = param.lambda*o/(k*n);
  param.lambda1 = param.lambda1*o/((n/param.g)^2);
  param.lambda2 = param.lambda2*o/(n^2);
  param.lambda3 = param.lambda3*o/(n*k);
  param.lambda4 = param.lambda4*o/(l*k);
  param.lambda5 = param.lambda5*o/(d*k);

%    obj = 0.5*norm(J.*(Y-U*V),'fro')^2 + 0.5*param.lambda*norm(V-W'*X,'fro')^2;
%         zz = mean(Ytst);
%       Ytst(:,zz==-1) = [];
%       Xtst(:,zz==-1) = [];
%       tstv = (U*W'*Xtst);
%       perf_tmp =  evalt(tstv,Ytst, (max(tstv(:))-min(tstv(:)))/2);
%       perf_tmp.obj = obj;
%       perf = [perf;perf_tmp];
  tic;
  %[T, ~] = kmeans(X',param.g,'emptyaction','drop','MaxIter',50, 'Start','sample');
  [T, ~] = kmeans(X',param.g,'emptyaction','drop');
  cluster_time = toc;
  
  tic;
  [betav, XGXGPool, XX, param ] = InitGroup( Y, X,T, param );
  Beta = betav;
  
  
  
  g = param.g;
  MgPool = cell(g,1);
  LgPool = cell(g,1);
  for i = 1:g
      LgPool{i} = rand(l,k2);
  end
%   param.maxIter = 1;
%   param.tooloptions.maxiter = 10;
%   param.tooloptions.gradnorm = 1e-3;
  param.maxIter = 15;
  param.tooloptions.maxiter = 60;
  param.tooloptions.gradnorm = 1e-5;
  [ U,V,W ] = InitUVW(J,Y,U,V,W,X,XX,param);
  
   obj_old = [];
   last = 0;
  WXXW = W'*XX*W;
  UWXXWU = U*WXXW*U';
  WXGXGWPool = cell(g,1);
  UWXGXGWUPool = cell(g,1);
  for i = 1:g
      WXGXGWPool{i} = W'*XGXGPool{i}*W;
      UWXGXGWUPool{i} = U*WXGXGWPool{i}*U';
  end
  init_time = toc;
  
  tic;
  for i=1:param.maxIter 
      disp(i);
      for gr=1:g
          UWXGXGWU = UWXGXGWUPool{gr};
          [Lg] = UpdateS(LgPool{gr},betav(gr),UWXXWU,UWXGXGWU,param);
          LgPool{gr} = Lg;
          MgPool{gr} = Lg*Lg';
      end  
      [ V ] = UpdateV(V, J,Y,U,W,X,param );
      [ U ] = UpdateU(U, J, Y, V, betav,MgPool,WXXW,WXGXGWPool, param );        
      [ W, WXXW,WXGXGWPool ] = UpdateW(W, U, V, X, betav, XX, XGXGPool, MgPool, param );
       UWXXWU = U*WXXW*U';
       for gr=1:g
           UWXGXGWUPool{gr} = U*WXGXGWPool{gr}*U';
       end  
%       [ V ] = UpdateV( V, Y, U, W, X, param);
%       [U,USU] = UpdateU( U, Y, V, S, WXXW, USU, param );
%       [ W, WXXW ] = UpdateW(W, V, X, XX, WXXW, USU, param);
%       UWXXWU = U'*WXXW*U;
%       [ L,S,USU ] = UpdateS(L,U, UWXXWU);
%       obj = 0.5*norm(Y-U*V)^2 + 0.5*param.lambda1*trace(WXXW*USU) + 0.5*param.lambda2*norm(U)^2 + 0.5*param.lambda3*norm(W)^2;
      obj = 0.5*norm(J.*(Y-U*V),'fro')^2 + 0.5*param.lambda*norm(V-W'*X,'fro')^2;
     
      
%       zz = mean(Ytst);
%       Ytst(:,zz==-1) = [];
%       Xtst(:,zz==-1) = [];
%       tstv = (U*W'*Xtst);
%       perf_tmp =  evalt(tstv,Ytst, (max(tstv(:))-min(tstv(:)))/2);
%       perf_tmp.obj = obj;
%       perf = [perf;perf_tmp];
      disp(obj);
      last = last + 1;
      obj_old = [obj_old;obj];
      
      
      if last < 5
          continue;
      end
      stopnow = 1;
      for ii=1:3
         stopnow = stopnow & (abs(obj-obj_old(last-1-ii)) < 1e-6);
      end
      if stopnow
          break;
      end
  end

   alg_time = toc;
    time.fill=0;
  time.clust=cluster_time;
  time.init = init_time;
  time.run = alg_time;
end

总体流程:先初始化四个矩阵,用梯度下降的方式得到 U , V , W , Z U,V,W,Z U,V,W,Z 的任意一个,然后确定其余的最终结束条件为得到满足要求的四个矩阵。

MASP阅读及代码复现

代码运行

配置环境

3.通过anconda下载pytorch(注意根据本机的cuda版本在pytorch官网查相对应的指令再下载),配置环境验证是否能使用pytorch与是否能用gpu加速。

在这里插入图片描述

在这里插入图片描述
MASP调试成功(能运行,部分结果未分析)
在这里插入图片描述
在这里插入图片描述

论文部分:

摘要:本文提出了一种基于串-并神经网络 的多标签主动学习算法。对于标签关联,网络的串行部分提取所有标签共有的特征。这种机制比显式特征提取和压缩感知方法更有效。对于缺少的标签,网络将其损耗设置为用于反向传播的零。这样,就不需要完成可能会引入其他错误的标签。对于标签查询,网络的并行部分独立地为每个标签提供成对的预测。这种成对预测提供了计算标签不确定性的适当信息。在20个基准数据集上进行了3组实验,并与14个流行算法进行了比较。实验结果表明,该算法达到了最先进的主动学习性能。

下一步工作

1.理解MASP的网络,算法部分及代码。
2.在尽快掌握MASP代码的基础上尽快掌握boolean矩阵分解的方法(看论文),然后争取早点写代码,跑出结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值