T.SNE vs PCA

本文比较了t-SNE和PCA在蘑菇分类任务中的性能。t-SNE展现出优于PCA的聚类能力,能将有毒和可食用蘑菇清晰区分开,而PCA的分类效果不佳。通过调整t-SNE的困惑度和n_iter参数,如困惑度为30,n_iter为5000,可获得稳定的聚类形状。结论是t-SNE在处理线性和非线性数据集时提供更优的可视化和聚类结果,但可能不保留数据的全局结构。
import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 
import seaborn as sns 
 
df= pd.read_csv(r'C:\Users\Vikipedia\Downloads\mushrooms.csv') 
df.head()

Calculate the unique number of each category of each column:

X = df.drop('class', axis=1) 
y = df['class'] 
y = y.map({'p':'Posionous','e': 'Edible'})
 
cat_cols= X.select_dtypes(include='object').columns.tolist()
for col in cat_cols: 
    print (f" col name : {col}, N Unique : {X[col].nunique()}")

 Compute and generate a table:

for col in cat_cols: 
    X[col]=X[col].astype('category') 
    X[col]=X[col].cat.codes 
X.head()

### t-SNE vs PCA 降维算法区别、原理与应用场景 t-SNE(t-分布随机邻域嵌入)和PCA(主成分分析)是两种常用的降维技术,但它们在原理、特点及适用场景上有显著差异。 #### 原理上的区别 PCA是一种**线性降维方法**,其核心思想是通过正交变换将原始数据投影到一个新的坐标系中,使得投影后的数据在前几个维度上具有最大的方差。具体来说,PCA计算数据的协方差矩阵,并找到其特征值和特征向量,其中特征值较大的特征向量对应的方向即为保留的主要成分。这种方法能够有效降低数据维度,同时尽可能保留原始数据的全局结构[^3]。 相比之下,t-SNE是一种**非线性降维方法**,特别适用于高维数据的可视化。它通过构建一个概率分布来表示数据点之间的相似性,在高维空间中使用高斯分布,在低维空间中使用t分布,并通过最小化这两个分布之间的KL散度来优化低维表示。t-SNE更关注于保持数据点之间的局部关系,因此在可视化聚类结构时表现尤为出色[^2]。 #### 特性对比 | 特性 | PCA | t-SNE | |--------------|----------------------------------|-----------------------------------| | 类型 | 线性 | 非线性 | | 计算复杂度 | 较低 | 较高 | | 结果可解释性 | 可以提供明确的主成分含义 | 结果通常难以直接解释 | | 保持结构 | 全局结构 | 局部结构 | | 应用方向 | 数据压缩、去噪 | 数据可视化、聚类 | #### 应用场景比较 PCA由于其计算效率高且能保留数据的全局结构,常用于以下场景: - **数据处理**:在进行机器学习建模之前,通过PCA去除噪声或冗余信息,提高模型训练效率。 - **图像压缩**:在计算机视觉领域,PCA可用于减少图像数据的维度,从而节省存储空间。 - **金融数据分析**:在金融市场分析中,PCA可以用来识别资产价格变动的主要驱动因素[^3]。 而t-SNE因其擅长捕捉数据的局部结构和复杂的非线性关系,广泛应用于: - **生物信息学**:用于基因表达数据的可视化,帮助研究人员发现潜在的生物学模式。 - **自然语言处理**:词向量的可视化,理解词语间的语义关系。 - **手写数字识别**:MNIST数据集的可视化,展示不同数字之间的分布情况[^2]。 ### 示例代码:使用Python实现PCA与t-SNE ```python import numpy as np from sklearn.decomposition import PCA from sklearn.manifold import TSNE from sklearn.datasets import load_digits import matplotlib.pyplot as plt # 加载数据集 digits = load_digits() X, y = digits.data, digits.target # PCA降维 pca = PCA(n_components=2) X_pca = pca.fit_transform(X) # t-SNE降维 tsne = TSNE(n_components=2, perplexity=30, n_iter=300) X_tsne = tsne.fit_transform(X) # 可视化结果 plt.figure(figsize=(12, 5)) plt.subplot(1, 2, 1) plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='tab10', s=10) plt.title('PCA') plt.subplot(1, 2, 2) plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y, cmap='tab10', s=10) plt.title('t-SNE') plt.show() ``` 上述代码展示了如何使用`sklearn`库中的PCA和t-SNE对MNIST手写数字数据集进行降维,并绘制出二维空间中的分布图。可以看到,t-SNE生成的图更能清晰地反映出不同数字之间的聚类情况。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值