You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无运行错误但鸢尾花数据集PCA绘图结果异常求助

排查鸢尾花PCA分析绘图错误的关键点

先看你给出的代码片段,第一个非常明显的问题是方法名拼写错误:你写的model.fit_tran...应该是model.fit_transform(irisdf[varnames])——少写了一个s,这会直接导致scores变量无法正确生成,后续绘图自然会出问题。

除了这个拼写失误,还有两个常见的坑也可能让PCA绘图结果不符合预期:

  • 忘记标准化特征:PCA对特征的尺度极度敏感,鸢尾花数据里的花瓣长度(PL)、花瓣宽度(PW)数值范围远小于花萼长度(SL)、花萼宽度(SW),如果不先做标准化处理,PCA会被数值大的特征主导,导致主成分的解释性和可视化结果出现偏差。
  • 绘图时未正确关联类别标签:哪怕生成了正确的主成分得分,要是绘图时没把Species列和得分对应绑定,也会得到混乱的可视化结果。

下面是修正后的完整可运行代码,我标注了关键修正点:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn import datasets
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler  # 新增:用于标准化特征

# 加载鸢尾花数据并构建DataFrame
iris = datasets.load_iris()
varnames = ['SL', 'SW', 'PL', 'PW']
irisdf = pd.DataFrame(data=iris.data, columns=varnames)
irisdf['Species'] = [iris.target_names[a] for a in iris.target]

# 关键步骤1:标准化特征(必须执行!)
scaler = StandardScaler()
scaled_features = scaler.fit_transform(irisdf[varnames])

# 关键步骤2:修正方法名拼写错误
model = PCA(n_components=2)
scores = model.fit_transform(scaled_features)  # 这里修正了fit_tran...为fit_transform

# 将主成分得分合并到原DataFrame,方便后续绘图
irisdf['PC1'] = scores[:, 0]
irisdf['PC2'] = scores[:, 1]

# 绘制PCA散点图
plt.figure(figsize=(8,6))
sns.scatterplot(data=irisdf, x='PC1', y='PC2', hue='Species', palette='Set2', s=80)
plt.title('PCA of Iris Dataset (Standardized Features)')
plt.xlabel(f'Principal Component 1 ({model.explained_variance_ratio_[0]:.2%} variance)')
plt.ylabel(f'Principal Component 2 ({model.explained_variance_ratio_[1]:.2%} variance)')
plt.legend()
plt.show()

你可以对照自己的代码逐一检查:

  1. 是否修正了fit_transform的拼写错误?
  2. 是否对特征做了标准化处理?
  3. 绘图时是否将主成分得分和Species类别正确关联?

如果之前的绘图错误是因为拼写导致scores未生成,修正后应该能得到类别清晰分离的散点图;如果是因为没标准化,修正后你会看到三个鸢尾花品种在主成分空间里的区分度会更合理。

内容的提问来源于stack exchange,提问作者rnso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:24:46