MDS-Machine Learning de escalamiento dimensional múltiple

Escalado multidimensional (escalamiento multidimensional) aprendizaje automático MDS matlab combat

1 propósito del algoritmo

Generalmente, los datos son de alta dimensión, pero lo que está relacionado con la tarea de aprendizaje es generalmente una distribución de baja dimensión, es decir, una incrustación de baja dimensión.
Inserte la descripción de la imagen aquíComo se muestra en la FIG.

2 Derivación del algoritmo

  • El principio del algoritmo es: la distancia entre las muestras en el espacio original se puede mantener en dimensiones reducidas
  • El objetivo del algoritmo: obtener las coordenadas de la muestra en el espacio de baja dimensión, y la distancia euclidiana de dos muestras arbitrarias en el espacio de baja dimensión es igual a la distancia en el espacio original.

Para la derivación de algoritmos específicos, puede consultar otros blogs, muchos de ellos son muy buenos, así que no diré mucho aquí.

3 Implementación de algoritmos

  1. Primero genera una serie de puntos
clear;
clc;
a = 10; %%%%% 长
b = 5; %%%%% 宽
n = 100; %%%%% 点数量
% cxd1 = a*rand(n,1); %%%%%% 产生横坐标0-10
cxd11=4*rand(50,1);  %0-4范围内随产生点
cxd12=6+4*rand(n-50,1);%6-10范围内随机产生点
cxd1=[cxd11;cxd12];
cxd2 = b*rand(n,1); %%%%%% 产生纵坐标
cxd = [cxd1 cxd2]; %%%%%% 生产随机点
z=sin(cxd(:,1)+cxd(:,2));
scatter3(cxd1,cxd2,z,'k'); 

Inserte la descripción de la imagen aquí
Parece irregular, pero si cambia el ángulo,
Inserte la descripción de la imagen aquí
en realidad es una función sinusoidal.

Otro ángulo: (mirando de arriba a abajo)

fig2

Luego usamos MDS para reducir la dimensionalidad mientras aseguramos:

  • La distancia euclidiana de los dos puntos antes y después de la reducción de dimensionalidad no cambia
    . Código completo
clear;
clc;
a = 10; %%%%% 长
b = 5; %%%%% 宽
n = 100; %%%%% 点数量
% cxd1 = a*rand(n,1); %%%%%% 产生横坐标0-10
cxd11=4*rand(50,1);  %0-4范围内随产生点
cxd12=6+4*rand(n-50,1);%6-10范围内随机产生点
cxd1=[cxd11;cxd12];
cxd2 = b*rand(n,1); %%%%%% 产生纵坐标
cxd = [cxd1 cxd2]; %%%%%% 生产随机点
z=sin(cxd(:,1)+cxd(:,2));
scatter3(cxd1,cxd2,z,'k'); 
dist = zeros(n,n);
for i =1:n
    for j =1:n
        a = cxd(i,:); b=cxd(j,:);
        dist(i,j)=sqrt((a-b)*(a-b)');
    end
end
m=n;
DSquare=dist.^2;
for i = 1:m
    DSquare_j(i) = 1/m*sum(DSquare(i,:));
end
%求各列的和
for j = 1:size(DSquare,1)
    DSquare_i(j) = 1/m*sum(DSquare(:,j));
end
%求矩阵的总和
DSquare_ij = 1/m^2*sum(sum(DSquare(:,:)));
%求内积矩阵
for i = 1:m
    for j = 1:m
        B(i,j) = -1/2*(DSquare(i,j) - DSquare_j(i) - DSquare_i(j) + DSquare_ij);
    end
end
 % 特征值分解,保留最大的值
 [V,D] = lun6(B,2);
 % 把D转化为对角阵
 D = diag(D);
 Z=D.^0.5*V';
 figure(2)
 plot(Z(1,:),Z(2,:),'o');

La función lun6 es la siguiente (conservando los valores propios más grandes y sus vectores propios)

function [v,d] = lun6(A, k)

if nargin == 0
    A = [1 3 7;3 8 9;5 4 6];
    k = 2;
end
[V, D] = eig(A);
D = diag(D);
[D, I] = sort(D, 'descend');
if k > length(D)
    k = length(D);
end
d = D(1 : k);
v = V(:, I(1 : k));

Resultado final: de 3D a 2D,
Inserte la descripción de la imagen aquí
mapee los datos 3D originales a 2D a figure3

Esto completa el MDS y conserva la distancia euclidiana original mientras se completa la reducción de dimensionalidad.
¿Cuál es el significado de esto? La dispersión calculada en el espacio euclidiano no es necesariamente útil, pero sí en el plano expandido.


Actualización el 20 de marzo de 2020

1 Superficie de sillín tridimensional -> MDS -> reducción de dimensionalidad

%%%%%%程序目录
% %% 画马鞍面
% %% 使用PCA进行降维
% %% 判断降维效果
% %% 使用MDS
% %% 判断降维效果
%%%%%%%


%% 画马鞍面
clc;clear;close all;
x=-5:0.5:5;
y=-5:0.5:5;
% 加入噪声
x = x + 0.2*rand(1,length(x));
y = y + 0.2*rand(1,length(x));
[X,Y]=meshgrid(x,y); %确定作图的范围
X = X + rand(length(x),length(y));
Y = Y + rand(length(x),length(y));
Z=X.^2-Y.^2+0.1*rand(length(x),length(y)); %一定要加 '.' 号,因为X、Y是矩阵
C = X+Y;
% axis equal
% surf(X,Z,Y,C)
x1 = reshape(X,[],1);
y1 = reshape(Y,[],1);
z1 = reshape(Z,[],1);
c1 = reshape(C,[],1);
data_pca = [x1,y1,z1];
% 画图
figure(1)
axis equal
scatter3(x1,y1,z1,5,c1)
%% 使用PCA进行降维
[pc,scores] = pcaa(data_pca,2);
figure(2)
axis equal
scatter(pc(:,1),pc(:,2),5,c1)
%% 判断降维效果
% 计算原距离
x_dis = L2_distance(data_pca',data_pca');
y_dis = L2_distance(pc',pc');
x_re_dis = reshape(x_dis,1,[]);
y_re_dis = reshape(y_dis,1,[]);
scatter(x_re_dis,y_re_dis,2)
%% 使用MDS
new_MDS = MDS(data_pca,3);
scatter3(new_MDS(1,:),new_MDS(2,:),new_MDS(3,:),5,c1)
%% 判断降维效果
% 计算原距离
x_dis = L2_distance(data_pca',data_pca');
y_dis = L2_distance(new_MDS,new_MDS);
x_re_dis = reshape(x_dis,1,[]);
y_re_dis = reshape(y_dis,1,[]);
scatter(x_re_dis,y_re_dis,2)

La superficie lisa del sillín original
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
estaba doblada así, pero para el bidimensional: peor, tal vez simplemente no se vea bien.
Inserte la descripción de la imagen aquí
A juzgar por el efecto, parece que la diferencia en la distancia local es mayor y el efecto es mejor en el distancia. Por supuesto, cuando la dimensionalidad se reduce a 3, puede satisfacer completamente la condición de que la distancia sea la misma que el espacio euclidiano original.
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_43110298/article/details/104178354
Recomendado
Clasificación