t-sne降维的核心思想是保留高维数据点之间的局部邻近关系,通过在低维空间中模拟高维空间的概率分布,使相似点靠近、不相似点远离。它在数据可视化中受欢迎的原因包括:1. 擅长揭示非线性结构和聚类;2. 有效缓解“拥挤问题”,使不同簇更清晰区分;3. 可视化结果直观呈现数据内在结构。

Python中实现t-SNE降维,主要依赖
scikit-learn
TSNE

在Python中实现t-SNE降维,通常会经历数据准备、模型初始化、拟合转换和结果可视化几个步骤。这里我们用一个简单的例子来展示这个过程。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.manifold import TSNE
from sklearn.datasets import make_blobs # 用来生成一些带聚类的数据
# 1. 生成一些示例数据
# 假设我们有1000个样本,每个样本有50个特征,分成3个聚类
n_samples = 1000
n_features = 50
n_clusters = 3
X, y = make_blobs(n_samples=n_samples, n_features=n_features, centers=n_clusters, random_state=42)
print(f"原始数据维度: {X.shape}")
# 2. 初始化t-SNE模型
# 关键参数:
# n_components: 目标维度,通常是2或3
# perplexity: 困惑度,可以理解为每个点“邻居”的数量,通常在5到50之间
# learning_rate: 学习率,太小收敛慢,太大可能发散,需要尝试
# n_iter: 迭代次数,足够多才能让结果稳定
# init: 初始化方式,'pca'通常比'random'好,能加速收敛并避免局部最优
tsne = TSNE(n_components=2, perplexity=30, learning_rate=200, n_iter=1000, init='pca', random_state=42)
# 3. 拟合并转换数据
# 这一步计算量比较大,需要耐心等待
X_tsne = tsne.fit_transform(X)
print(f"降维后数据维度: {X_tsne.shape}")
# 4. 可视化降维结果
plt.figure(figsize=(8, 6))
# 按照原始数据的类别(如果有的话)给点上色,这样可以直观地看到t-SNE是否能区分这些类别
scatter = plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y, cmap='viridis', s=10, alpha=0.7)
plt.colorbar(scatter, label='Cluster ID')
plt.title('t-SNE Dimensionality Reduction of Synthetic Data')
plt.xlabel('t-SNE Dimension 1')
plt.ylabel('t-SNE Dimension 2')
plt.grid(True, linestyle='--', alpha=0.6)
plt.show()
# 实际应用中,你可能需要对真实数据集进行预处理,比如标准化或归一化。
# t-SNE对数据的尺度敏感性不像PCA那么强,但良好的预处理总是有益的。t-SNE降维的核心思想是什么?它为什么在数据可视化中如此受欢迎?
立即学习“Python免费学习笔记(深入)”;

t-SNE(t-distributed Stochastic Neighbor Embedding)的核心思想在于,它试图在低维空间中保留高维数据点之间的局部邻近关系。它不像PCA那样关注全局方差最大化,而是更侧重于将高维空间中“相似”的点在低维空间中也放置得很近,而将“不相似”的点放置得很远。这个过程分两步:首先,它构建一个高维空间中数据点之间相似度的概率分布(通常是高斯分布);然后,它在低维空间中构建一个类似的概率分布(使用t-分布),并通过优化,让这两个分布尽可能地接近。这个优化过程有点像“吸引”和“排斥”的舞蹈:相似的点相互吸引,不相似的点相互排斥,直到达到一个平衡。
t-SNE之所以在数据可视化中如此受欢迎,主要有几个原因。首先,它非常擅长揭示数据中非线性的结构和聚类。很多真实世界的数据集,其内在结构并非简单的线性可分,而t-SNE能够很好地捕捉到这些复杂的、嵌套的或弯曲的簇。其次,它在处理“拥挤问题”(crowding problem)上表现出色。在传统的降维方法中,当高维数据被映射到低维时,很多不相关的点可能会挤在一起,使得可视化结果模糊不清。t-SNE通过使用t-分布(其尾部比高斯分布更重)来模拟低维相似度,有效地缓解了这个问题,使得不同簇之间的距离在视觉上更清晰,更容易区分。所以,当你看到t-SNE图上的一个个“岛屿”,那通常就意味着原数据中存在着自然的聚类。

选择t-SNE参数时有哪些常见误区和实践建议?
选择t-SNE的参数确实是门艺术,因为它对结果的影响非常大,而且没有一套放之四海而皆准的规则。最常见的参数误区和实践建议主要围绕
perplexity
learning_rate
n_iter
perplexity
perplexity
perplexity
perplexity
perplexity
learning_rate
learning_rate
n_iter
此外,
init
'pca'
'random'
t-SNE降维结果如何解读?它有哪些局限性?
解读t-SNE降维结果时,最重要的一点是:簇(clusters)的含义很重要,但簇之间的距离和大小通常不那么重要。如果t-SNE图中出现了一组紧密聚集的点,那意味着这些点在高维空间中是高度相似的,形成了一个自然的聚类。不同的簇在图上分隔开来,表明它们在高维空间中是不同的类别或子群。你可以通过给点上色(如果知道原始类别信息的话)来验证t-SNE是否成功地将相同类别的点聚集在一起,并将不同类别的点分开。簇的内部结构,比如它们的形状或密度,有时也能提供一些信息,比如一个细长的簇可能表示数据在某个方向上具有连续的变化。
然而,t-SNE的局限性也不容忽视:
perplexity
learning_rate
以上就是如何用Python实现数据的t-SNE降维?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号