今天决定用Matlab来画点高逼格的图,PCA(主成分分析)+累积贡献率+置信椭圆的组合,以经典的鸢尾花数据集为例,看起来应该挺有意思的。好,咱们一步一步来
最后,我觉得自己写代码还挺有成就感的,从数据处理、分析到可视化,每一步都需要仔细思考和调整,最终呈现出的结果确实让人满意。总之,今天这个PCA结合置信椭圆的绘图练习很有趣,也让我进一步理解了如何更高效、美观地展示数据的内在结构。嗯,三种鸢尾花各自聚成三个团,置信椭圆则清晰地展示了数据的分布,特别是不同类别的分离程度。再看看累计贡献率,前两个主成分已经解释了84.51%的方差,已经相当不错了,说明数
Matlab高逼格绘图之PCA+累积贡献率+置信椭圆-鸢尾花数据集为案例。

首先,导入鸢尾花数据集。这数据集里有三种鸢尾花,每种有50个样本,4个特征:花萼长度、花萼宽度、花瓣长度、花瓣宽度。嗯,我记得Matlab里有自带的load fisheriris函数可以加载这个数据,方便得很。

那接下来,我得标准化数据,因为PCA对特征的尺度很敏感。标准化之后,每个特征的均值为0,方差为1。代码大概是这样:
load fisheriris;
X = meas;
y = species;
X_norm = zscore(X); % 标准化
然后,进行PCA分析。用Matlab的pca函数,可以得到主成分、特征值、累计方差率等等。这里我只用前两个主成分,因为二维图最容易画。
[coeff,score,latent,~,explained] = pca(X_norm);
% coeff是loadings
% score是主成分得分
% latent是特征值
% explained是累计方差贡献率
现在,看看累积贡献率。累积贡献率可以帮助我们确认用前几个主成分已经能解释大部分的方差了。比如,这里前两个主成分的累计方差贡献率是多少呢?
cumulative_contribution = explained(1:2)
% 这可能输出类似:[0.7296, 0.8451]
% 也就是说,前两个主成分解释了约84.51%的方差
这样看来,只用前两个主成分足够了,可以进行可视化了。

接下来是绘制PCA图。先画出前两个主成分的分布,然后加上置信椭圆。置信椭圆能展示数据在主成分空间中的分布情况,这里我可以设95%的置信水平。

首先,按类别分离数据:
idx1 = y == 'setosa';
idx2 = y == 'versicolor';
idx3 = y == 'virginica';
然后分别计算每类数据在前两个主成分上的置信椭圆:
figure;
hold on;
gscatter(score(:,1), score(:,2), y, 'rgb', 'osd', 'filled');
title('PCA of Iris Dataset with Confidence Ellipses');
grid on;
% 画置信椭圆,95%置信水平
alpha = 0.05;
for i = 1:3
idx = y == species(i);
X = score(idx,:);
n = sum(idx); % 类别i的数据个数
mu = mean(X,1); % 该类在主成分空间的均值
S = cov(X); % 该类的协方差矩阵
[V,D] = eig(S);
t = sqrt(chi2inv(1 - alpha, 2)) * diag(sqrt(D)); % 椭圆轴
t = t * V';
ellipse = zeros(2, 200); % 200个点定义椭圆
theta = linspace(0, 2*pi, 200);
ellipse(1,:) = mu(1) + t(1,:)*sin(theta);
ellipse(2,:) = mu(2) + t(2,:)*cos(theta);
plot(ellipse(1,:), ellipse(2,:), '-k', 'LineWidth', 1.5); % 画椭圆
end
这样,我们得到了一个带有置信椭圆的PCA图。看起来这个图是不是很高大上?嗯,三种鸢尾花各自聚成三个团,置信椭圆则清晰地展示了数据的分布,特别是不同类别的分离程度。

不过,可能有人会问,为什么选择95%的置信水平?其实这个是惯例,当然也可以换成其他水平,比如99%,这样椭圆会更大会更保守。不过95%是比较常用的,能很好地平衡数据覆盖和展示美观。

再看看累计贡献率,前两个主成分已经解释了84.51%的方差,已经相当不错了,说明数据在这两个主成分上分布的集中程度很高,这也为我们的图增强了说服力。
有没有感觉,这种图既展示了数据之间的关系,又有统计学上的意义,还能直观地区分不同类别?嗯,这样子的可视化效果,绝对算得上是高逼格了。
最后,我觉得自己写代码还挺有成就感的,从数据处理、分析到可视化,每一步都需要仔细思考和调整,最终呈现出的结果确实让人满意。或许以后还可以尝试更多不同数据集和方法,进一步提升自己的绘图技巧。
总之,今天这个PCA结合置信椭圆的绘图练习很有趣,也让我进一步理解了如何更高效、美观地展示数据的内在结构。下次或许可以试试三维的PCA,再加上交互功能,应该会更酷吧!
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)