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

基于Matplotlib的特征可视化:高维特征降维绘图问题咨询

解决高维特征散点图可视化的维度不匹配问题

刚好遇到过类似的情况,Matplotlib的散点图要求每个样本对应一个二维坐标点(x,y),而你的2048维特征直接用的话维度完全不匹配,所以核心思路是先把高维特征降维到2维,再按标签着色绘制散点图。下面给你两种最常用的实现方案:

方法1:PCA线性降维(快速,保留全局结构)

PCA是线性降维方法,计算速度快,适合大规模数据,能保留数据的全局分布结构。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA

# 替换成你的真实数据:X是(200, 2048)的特征矩阵,y是(200,)的标签数组
X = np.random.rand(200, 2048)  # 模拟特征数据
y = np.random.randint(0, 10, size=200)  # 模拟标签(假设是0-9的整数)

# 初始化PCA,将特征降到2维
pca = PCA(n_components=2)
X_2d = pca.fit_transform(X)

# 绘制按标签着色的散点图
plt.figure(figsize=(10, 8))
# c=y 表示用标签值映射颜色,cmap选你喜欢的配色方案
scatter_plot = plt.scatter(X_2d[:, 0], X_2d[:, 1], c=y, cmap='viridis', alpha=0.7)
# 添加颜色条说明标签对应颜色
plt.colorbar(scatter_plot, label='标签')
plt.title('PCA降维后的特征散点图')
plt.xlabel('主成分1')
plt.ylabel('主成分2')
plt.show()

方法2:t-SNE非线性降维(可视化效果更好,适合聚类)

t-SNE是非线性降维方法,能更好地保留样本间的局部聚类关系,可视化效果更直观,但计算速度比PCA慢一点(200样本完全没问题)。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.manifold import TSNE

# 同样替换成你的真实数据
X = np.random.rand(200, 2048)
y = np.random.randint(0, 10, size=200)

# 初始化t-SNE,perplexity参数建议设为5-50(样本数200的话30很合适)
tsne = TSNE(n_components=2, perplexity=30, random_state=42)
X_2d_tsne = tsne.fit_transform(X)

# 绘制散点图
plt.figure(figsize=(10, 8))
scatter_plot = plt.scatter(X_2d_tsne[:, 0], X_2d_tsne[:, 1], c=y, cmap='tab10', alpha=0.7)
plt.colorbar(scatter_plot, label='标签')
plt.title('t-SNE降维后的特征散点图')
plt.xlabel('t-SNE维度1')
plt.ylabel('t-SNE维度2')
plt.show()

一些小提示

  • 如果你的标签是字符串类型(比如分类名称),可以先用sklearn.preprocessing.LabelEncoder把它转换成数值再传入c参数
  • t-SNE的random_state参数建议固定,这样每次运行得到的降维结果一致,方便对比
  • 可以调整cmap参数更换配色,比如'rainbow'、'tab20'都是常用的多分类配色
  • 如果样本量很大,优先选PCA;如果更关注样本间的聚类关系,选t-SNE

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:08:38