You need to enable JavaScript to run this app. 如何使用TSNE可视化高维数据的类别可分性,解决出图全为直线的问题
优惠活动
大模型
产品
解决方案
定价
更多

如何使用TSNE可视化高维数据的类别可分性,解决出图全为直线的问题

导致输出全在直线上的核心错误点
  • 最核心逻辑漏洞:代码完全没有调用TSNE完成降维操作。你把标准化后的原始高维矩阵,同时作为散点图的x值和y值传入scatter()接口——传入的x和y完全一致,matplotlib必然把所有点渲染在y=x的对角直线上,和TSNE的实际可视化效果没有任何关联。
  • 绘图流程存在多处逻辑错误:
    • 逐样本遍历标签,每循环一次就把全量高维数据重新绘制一遍,同时把整组类别列表直接传入图例参数,会导致图层重叠、图例重复错乱
    • 将plt.show()写在循环内部,每处理一个样本就弹出一次绘图窗口,根本无法累积生成完整的散点图
    • 冗余导入不存在的自定义模块import label as label,这行代码执行时会直接抛出导入错误,根本无法走到后续绘图步骤
  • 导入的TSNE、PCA接口完全没有被实际调用,相当于工具准备齐全但没有执行任何降维操作。
修正后的实现逻辑
  1. 删除冗余的错误导入行,理顺数据加载、标签拆分的流程
  2. 保留数据标准化步骤,对维度超过50的高维数据集,先通过PCA预降到50维,解决直接跑TSNE计算慢、结果不稳定的问题
  3. 调用TSNE接口,将预处理后的高维数据映射到2维空间,得到每个样本对应的(x,y)坐标
  4. 按类别分组筛选样本,同一类别的所有样本一次性完成散点绘制,每个类别仅添加一次图例,所有绘图操作完成后再统一调用接口展示图像
修正后的完整可运行代码
import pandas as pd
from matplotlib import pyplot as plt
from sklearn.manifold import TSNE
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA

# 加载数据集
filename = 'Dataset/test.csv'
df = pd.read_csv(filename)
# 拆分标签列与特征列
label = df.pop('Activity')
label_counts = label.value_counts()

# 特征标准化
scale = StandardScaler()
scaled_data = scale.fit_transform(df)

# 高维数据PCA预降维(高维数据集标配步骤,提升TSNE稳定性)
pca = PCA(n_components=min(50, scaled_data.shape[1] - 1))
pca_data = pca.fit_transform(scaled_data)

# TSNE降维到2维空间
tsne = TSNE(n_components=2, random_state=42, perplexity=30)
tsne_2d = tsne.fit_transform(pca_data)

# 绘制散点图
plt.figure(figsize=(12, 8))
# 遍历所有类别绘制对应样本点
for class_name in label.unique():
    class_mask = (label == class_name)
    x_coord = tsne_2d[class_mask, 0]
    y_coord = tsne_2d[class_mask, 1]
    plt.scatter(x_coord, y_coord, label=class_name, alpha=0.7)

# 添加图像标注
plt.legend(title="Activity类别")
plt.title("TSNE高维数据可分性可视化")
plt.xlabel("TSNE第一维度")
plt.ylabel("TSNE第二维度")
# 所有绘图操作完成后展示图像
plt.show()

调试小提示:如果运行后发现样本点过度聚集、类间区分不明显,可以根据数据集的样本规模调整perplexity参数(一般取样本量平方根附近,取值范围5-50),不要直接套用默认参数适配所有数据集。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 19:27:03