📄 udnoisyswiss.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 + -