⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 udnoisyswiss.m

📁 提供了一种维数约减的思路
💻 M
字号:
function [Swiss,psiSet]=udNoisySwiss(N,NoiseType,fScale,ShowFlg)

switch nargin
case 0,
    N=500;
    NoiseType=1;
    fScale=20;
    ShowFlg=1;
case 1,
    NoiseType=1;
    fScale=20;
    ShowFlg=1;
case 2,
    fScale=20;
    ShowFlg=1;
case 3,
    ShowFlg=1;
end  

Swiss=zeros(3,N);
psiSet=[1,N];
for i=1:1:N
    psi=8*rand+5;  z=10*rand;  %z=psi; %
    x=psi*cos(psi);  y=psi*sin(psi);
    Swiss(:,i)=[x;y;z];
    psiSet(i)=psi;
end

%fScale=5时,Isomap无法保持噪声点与非噪声点的区别;fScale=20时,Isomap为了保持出噪声点与其他点之间的距离,使整个流形重构发生了歧变。
%为了保证SIE的重构质量,需要在选取锚点时引入随机重起机制:随机选取锚点、尝试训练,如果训练结果不理想重复上述过程。
%一般地,如果锚点集选取的合适,不包含很多高噪声点,而嵌入维的选择又可以实现较充分的嵌入,则从理论上说应该能够获得较还好的训练效果。
%如果锚点集始终不能获得较好的训练效果,说明或者噪声过大,或者嵌入维不充分。

NP=0;
indx=[];
switch NoiseType
    case 0
        %无噪声
    case 1
        %伪自由度型噪声
        %fScale=20;
        NoisyRate=0.5;
        for i=1:1:N
            if psiSet(i)>9.1 & psiSet(i)<9.2 & rand<NoisyRate
                Swiss(1,i)=Swiss(1,i)-fScale;
                NP=NP+1;  indx=[indx,i];
            elseif psiSet(i)>11.1 & psiSet(i)<11.2 & rand<NoisyRate
                Swiss(2,i)=Swiss(2,i)-fScale;
                NP=NP+1;  indx=[indx,i];
            elseif psiSet(i)>12.9 & rand<NoisyRate
                Swiss(1,i)=Swiss(1,i)+fScale;
                NP=NP+1;   indx=[indx,i];   
            end
        end
    case 2,
        %稀疏贯通型噪声
        %fScale=-3;
        for i=1:1:N
            NoisyRate=0.5;
            if  psiSet(i)<5.1 & rand<NoisyRate
                Swiss(2,i)=Swiss(2,i)+fScale;
                NP=NP+1;   indx=[indx,i]; 
                break;
            end
        end
    case 3,
        %稠密贯通型噪声
        %fScale=2;
        NoisyRate=0.05;
        for i=1:1:N
            if rand<NoisyRate
                Swiss(1,i)=Swiss(1,i)+fScale*randn*cos(psiSet(i));
                Swiss(2,i)=Swiss(2,i)+fScale*randn*sin(psiSet(i));
                NP=NP+1;  indx=[indx,i];
            end
        end
    end
   
%indx

if ShowFlg==1
    fprintf('NP=%d\n',NP);
   
    figure;
   
	colordef none;
    colormap jet;  

	markerSize=12;
    color=psiSet; 
   
    scatter3(Swiss(1,:),Swiss(2,:),Swiss(3,:),markerSize,color,'o','filled');
    rotate3d on;
    grid on;
    xlabel('x');
    ylabel('y');
    zlabel('z');
    fNo=gcf;
    set(fNo,'Position',[1 1 500 500]);
end

%set(fNo,'Color','White');
%set(fNo,'Position',[1 1 500 500]);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -