% 清空工作区,关闭所有图窗,清除命令窗口
clear; close all; clc;
% 生成一组随机数据,假设有100个点,每个点在5维空间中
data = rand(100, 5);
% 计算数据点之间的欧氏距离矩阵
% 该距离矩阵用于MDS进行降维
distance_matrix = pdist2(data, data, 'euclidean');
% 使用经典MDS方法,将高维数据降维到2维
% cmdscale函数用于执行经典MDS,并返回降维后的坐标
[Y, eigenvals] = cmdscale(distance_matrix, 2);
% 绘制降维后的数据点散点图
figure;
scatter(Y(:,1), Y(:,2), 'filled');
title('MDS降维到2维空间的结果');
xlabel('第一维');
ylabel('第二维');
grid on;
% 可视化原始数据点之间的距离与降维后数据点之间的距离的比较
% 绘制原始距离矩阵和降维后距离矩阵的关系图
figure;
D_original = squareform(pdist(data)); % 原始高维数据的距离矩阵
D_reduced = pdist2(Y, Y, 'euclidean'); % 降维后的数据点距离矩阵
% 将距离矩阵转为向量形式
D_original_vec = D_original(tril(true(size(D_original)), -1));
D_reduced_vec = D_reduced(tril(true(size(D_reduced)), -1));
% 绘制原始距离与降维后距离的关系散点图
scatter(D_original_vec, D_reduced_vec, 'filled');
title('原始距离与降维后距离的关系');
xlabel('原始距离');
ylabel('降维后距离');
grid on;
% 在图上添加一条y=x的参考线
hold on;
plot([0 max(D_original_vec)], [0 max(D_original_vec)], 'r--');
legend('距离点', 'y = x参考线');
hold off;
% 降维结果分析
figure;
plot(cumsum(eigenvals) / sum(eigenvals), 'o-');
title('特征值累积贡献率');
xlabel('维数');
ylabel('累积贡献率');
grid on;
运行结果