📄 classify_new_data.m
字号:
function [us_class] = Classify_New_Data(X_in,model)% [us_class] = Classify_New_Data(X_in,model)% Classify unseen examples - X_in is the input data (one case per row)%% Clustering Through Ranking On Manifolds% Version 0.2%% Copyright by Markus Breitenbach and Gregory Z. Grudic% This code is for your personal and research use only.%% http://www.cs.colorado.edu/~grudic/% http://ucsu.colorado.edu/~breitenm/%% This software is provided "as is," without warranty of any kind, express% or implied. In no event shall the authors be held liable% for any direct, indirect, incidental, special or consequential damages% arising out of the use of or inability to use this software.%[num_data,d] = size(X_in);if model.DST_TYPE == 1 if model.SCALE == 1 A = model.A'; B = model.B'; X = X_in.*A(ones(num_data,1),:) + B(ones(num_data,1),:); X(X>1) = 1; X(X<0) = 0; else X = X_in; endelse if model.SCALE == 1 model.B = mean(X_in); X_in_2 = X_in - model.B(ones(num_data,1),:); x_row_ln = (sum(X_in_2'.^2).^(-1/2))'; X = X_in_2.*(x_row_ln(:,ones(d,1))); else x_row_ln = (sum(X_in'.^2).^(-1/2))'; X = X_in.*(x_row_ln(:,ones(d,1))); t77 = 77; endendData_X = model.X;one_over_2_sigma_sq = model.one_over_2_sigma_sq;S_norm = model.S_norm;ind_mat_unseen = model.ind_mat_unseen;Dt = model.Dt;% model.ind_clust = ind_clust;% model.num_models = num_models;% model.Dt = Dt;[n,dim] = size(Data_X);ind_diag = find(eye(n,n) == 1);coeff_unseen = zeros(num_data,n);iaS_inv_un_seen = zeros(n,num_data);outlier_est_unseen = zeros(n,1);% model.S_norm = S_norm(ind_clust,:);% model.ind_mat_unseen = ind_mat_unseen(ind_clust,:);% model.one_over_2_sigma_sq = one_over_2_sigma_sq;% model.X_clust = X(ind_clust,:);UNS_one_over_2_sigma_sq = 1/(2*0.05^2);for pt = 1:num_data % dst_us = zeros(1,n); % for i=1:n % t1 = Data_X(i,:) - X(pt,:); % dst_us(i) = t1*t1'; % end if model.DST_TYPE == 1 %t1 = Data_X - X(pt*ones(n,1),:); %dst_us = sum(t1.*t1,2); if pt==1 ncentres = size(Data_X,1); ndata = size(X,1); all_my_distances= (ones(ncentres, 1) * sum((X.^2)', 1))' + ones(ndata, 1) * sum((Data_X.^2)',1) - 2.*(X*(Data_X')); end; dst_us = all_my_distances(pt,:); else dst_us = 1 - Data_X*X(pt*ones(n,1),:)'; t99 = 0; end c_us = exp(-dst_us.*one_over_2_sigma_sq); W_us = c_us(ind_mat_unseen); W_us(ind_diag) = 0; Dt_us = sum(W_us').^(-1/2); %S_us = diag(Dt_us) * W_us * diag(Dt); S_us = (W_us.*Dt_us(ones(n,1),:)').*((Dt(ones(n,1),:))); len_rows = sum(S_us'.^2).^(-0.5); S_norm_us = S_us.*(len_rows(ones(n,1),:))'; t2 = sum((S_norm_us.*S_norm)'); t22 = (t2/(sum(t2))); % t_d = 1-t2; % t_d_s = Gen_Scale(t_d',0,1); % t_scale = 1-t_d_s; % t22 = (t2.*t_scale').^2; %t22 = exp(-(1-t2).*UNS_one_over_2_sigma_sq); coeff_unseen(pt,:) = t22; t3 = model.norm_iaS_inv.*t22(ones(n,1),:); iaS_inv_un_seen(:,pt) = sum(t3')'; t99 = 8;endlen_cols = sum(iaS_inv_un_seen.^2).^(-0.5);norm_iaS_inv_un_seen = iaS_inv_un_seen.*(len_cols(ones(n,1),:));dot_dist = norm_iaS_inv_un_seen' * model.norm_iaS_inv;us_class.outlier_est_unseen = mean(dot_dist');F_us_nn = norm_iaS_inv_un_seen' * model.Y;len_cols_F_us_nn = sum(F_us_nn.^2).^(-0.5);F_us = F_us_nn.*(len_cols_F_us_nn(ones(num_data,1),:));% Fnorm_us = model.norm_iaS_inv * model.Y;% len_rows_F = sum(Fnorm_us.^2).^(-0.5);% Fnorm_us_norm = Fnorm_us.*(len_rows_F(ones(n,1),:));% % len_rows = sum(coeff_unseen').^(-1);% coeff_unseen = coeff_unseen.*(len_rows(ones(n,1),:))';% % % F_us_nn = coeff_unseen * Fnorm_us_norm;% len_cols_F_us_nn = sum(F_us_nn.^2).^(-0.5);% F_us = F_us_nn.*(len_cols_F_us_nn(ones(n,1),:));% % % dot_dist = coeff_unseen * model.norm_iaS_inv;% us_class.outlier_est_unseen = mean(dot_dist);Y = zeros(size(F_us));for i=1:num_data ind_t = find(max(F_us(i,:)) == F_us(i,:)); Y(i,ind_t) = 1;endClass_Outlier = [];for i=1:model.num_classes ind_t = logical(Y(:,i)); ind_vals = find(Y(:,i) == 1); scale_mat = coeff_unseen(ind_t,model.Class_Outlier(i).ind); %len_rows4 = sum(scale_mat'.^2).^(-0.5); len_rows4 = sum(scale_mat').^(-1); scale_mat_norm = scale_mat.*(len_rows4(ones(sum(model.Class_Outlier(i).ind),1),:))'; t1 = scale_mat_norm * model.Class_Outlier(i).val; Class_Outlier(i).val = t1; plot_values = zeros(size(F_us(:,i))); plot_values(ind_t) = t1; Class_Outlier(i).plot_values = plot_values; figure;plot(Class_Outlier(i).plot_values,'b^'); %plot the points in each clusterendus_class.F = F_us;us_class.Y = Y;us_class.Class_Outlier = Class_Outlier;us_class.Fs= Gen_Scale(F_us,0.1,1);t99 = 7;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -