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 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序