qq_43327800 2019-01-19 15:45 采纳率: 14.3%
浏览 3078
已结题

迁移学习代码,哪个是算MMD距离的,哪个值是二个域之间的距离

% Set predefined variables
X = [X_src',X_tar'];
X = X*diag(sparse(1./sqrt(sum(X.^2))));
ns = size(X_src,1);
nt = size(X_tar,1);
n = ns+nt;

% Construct kernel matrix
K = kernel_tjm(kernel_type,X,[],gamma);

% K = kernel_tjm(kernel_type,X,[],sqrt(sum(sum(X .^ 2).^0.5)/n ));

% Construct centering matrix
H = eye(n)-1/(n)*ones(n,n);%中心矩阵是一个单位阵

% Construct MMD matrix
e = [1/ns*ones(ns,1);-1/nt*ones(nt,1)];
C = length(unique(Y_src));
M = e*e' * C;

Cls = [];
% Transfer Joint Matching: JTM
G = speye(n);%稀松单位矩阵
acc_list = [];
for t = 1:T
    %%% Mc [If want to add conditional distribution]
    N = 0;
    if ~isempty(Cls) && length(Cls)==nt
        for c = reshape(unique(Y_src),1,C)%返回源域标签值,重组矩阵
            e = zeros(n,1);
            e(Y_src==c) = 1 / length(find(Y_src==c));
            e(ns+find(Cls==c)) = -1 / length(find(Cls==c));
            e(isinf(e)) = 0;%判定是否无界
            N = N + e*e';
        end
    end
    M = M + N;

    M = M/norm(M,'fro');

    [A,~] = eigs(K*M*K'+lambda*G,K*H*K',dim,'SM'); %计算特征值
%     [A,~] = eigs(X*M*X'+lambda*G,X*H*X',k,'SM');
    G(1:ns,1:ns) = diag(sparse(1./(sqrt(sum(A(1:ns,:).^2,2)+eps))));%对角线矩阵 迹函数
    Z = A'*K;
    Z = Z*diag(sparse(1./sqrt(sum(Z.^2))));
    Zs = Z(:,1:ns)';
    Zt = Z(:,ns+1:n)';

```书上写的MMD= min tr(A'*K*M*K'*A)
但是输入数据以后,这个迹函数根据不同的参数值有时候会越来越大,有的时候会越来越小,然后准确率却一如既往的上升。。。
  • 写回答

1条回答 默认 最新

  • dabocaiqq 2019-02-06 20:12
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 Matlab问题解答有两个问题
  • ¥50 Oracle Kubernetes服务器集群主节点无法访问,工作节点可以访问
  • ¥15 LCD12864中文显示
  • ¥15 在使用CH341SER.EXE时不小心把所有驱动文件删除了怎么解决
  • ¥15 gsoap生成onvif框架
  • ¥15 有关sql server business intellige安装,包括SSDT、SSMS。
  • ¥15 stm32的can接口不能收发数据
  • ¥15 目标检测算法移植到arm开发板
  • ¥15 利用JD51设计温度报警系统
  • ¥15 快手联盟怎么快速的跑出建立模型