0


AI学习指南机器学习篇-t-SNE的参数与调优

AI学习指南机器学习篇-t-SNE的参数与调优

在机器学习领域,t-SNE(t-distributed stochastic neighbor embedding)是一种常用的降维算法,它可以将高维数据映射到低维空间中,从而帮助我们发现数据的内在结构。然而,要想获得理想的降维效果,就需要对t-SNE中的参数进行合理的调优。本文将介绍t-SNE中的重要参数,如困惑度(perplexity)和学习率等,并解释如何通过调节参数来优化t-SNE的降维效果。

t-SNE简介

t-SNE是由Geoffrey Hinton和Laurens van der Maaten在2008年提出的一种非线性降维算法,它在可视化高维数据方面具有出色的表现。t-SNE通过优化一个损失函数,将高维空间中的数据点映射到低维空间中,使得在高维空间中相似的数据点在低维空间中仍然保持相近的距离。

t-SNE参数介绍

困惑度(Perplexity)

困惑度是t-SNE中一个非常重要的参数,它决定了每个数据点周围的邻域大小。具体来说,困惑度指定了t分布的自由度,它可以被理解为一个数据集的有效邻域大小,通常取值在5到50之间。在选择困惑度时,我们需要根据具体的数据集来进行调整,一般来说,较大的困惑度可以提供一个更加全局的视角,而较小的困惑度则可以提供更加局部的视角。

学习率(Learning Rate)

学习率在t-SNE中控制了数据点在每一次迭代中更新的幅度,它直接影响了t-SNE算法的收敛速度和最终的降维效果。较大的学习率可以加快算法的收敛速度,但可能导致数据点之间的距离无法准确地被保持,而较小的学习率则可以更加准确地保持数据点之间的距离,但可能导致收敛速度过慢。因此,我们需要通过实验来选择一个适合的学习率。

t-SNE参数调优

在实际应用中,我们通常需要对t-SNE的参数进行调优,以获得最佳的降维效果。下面将介绍如何通过调节困惑度和学习率来优化t-SNE的降维效果。

调优困惑度

步骤一:准备数据

首先,我们需要准备好要进行降维的数据集。在这个示例中,我们使用sklearn自带的手写数字数据集MNIST来进行演示。

from sklearn.datasets import load_digits

# 加载手写数字数据集
digits = load_digits()
X = digits.data
y = digits.target
步骤二:初始降维

我们先使用默认的困惑度参数来进行初始的降维处理。

from sklearn.manifold import TSNE

# 使用默认参数进行t-SNE降维
tsne = TSNE(n_components=2, random_state=42)
X_tsne_default = tsne.fit_transform(X)
步骤三:调节困惑度

接下来,我们尝试不同的困惑度参数,观察降维效果的变化。

import matplotlib.pyplot as plt

# 不同困惑度下的t-SNE降维效果
perplexities =[5,30,50,100]
fig, axs = plt.subplots(1,len(perplexities), figsize=(15,4))for i, perplexity inenumerate(perplexities):
    tsne = TSNE(n_components=2, perplexity=perplexity, random_state=42)
    X_tsne = tsne.fit_transform(X)
    
    ax = axs[i]
    ax.scatter(X_tsne[:,0], X_tsne[:,1], c=y, cmap="tab10")
    ax.set_title(f"Perplexity={perplexity}")
    ax.axis("off")

plt.show()

通过观察不同困惑度下的降维效果,我们可以选择一个合适的困惑度参数,使得数据点在降维后能够保持良好的局部结构。在这个示例中,我们可以选择困惑度为30。

调优学习率

步骤一:固定困惑度

在选择了合适的困惑度之后,我们可以固定困惑度参数,尝试不同的学习率参数。

# 不同学习率下的t-SNE降维效果
learning_rates =[10,100,1000]
fig, axs = plt.subplots(1,len(learning_rates), figsize=(15,4))for i, learning_rate inenumerate(learning_rates):
    tsne = TSNE(n_components=2, perplexity=30, learning_rate=learning_rate, random_state=42)
    X_tsne = tsne.fit_transform(X)
    
    ax = axs[i]
    ax.scatter(X_tsne[:,0], X_tsne[:,1], c=y, cmap="tab10")
    ax.set_title(f"Learning Rate={learning_rate}")
    ax.axis("off")

plt.show()

通过观察不同学习率下的降维效果,我们可以选择一个合适的学习率参数,使得算法在较短的时间内能够收敛,并且保持数据点之间的相对距离。在这个示例中,我们可以选择学习率为100。

结语

通过本文的介绍,我们了解了t-SNE中的重要参数困惑度和学习率,并通过具体的示例演示了如何通过调节参数来优化t-SNE的降维效果。在实际应用中,我们需要结合数据集的特点和实际需求,选择合适的参数值,以获得最佳的降维效果。希望本文能够帮助读者更加深入地理解t-SNE算法,并在实践中取得更好的成果。

标签: ai

本文转载自: https://blog.csdn.net/zhaopeng_yu/article/details/139869633
版权归原作者 俞兆鹏 所有, 如有侵权,请联系我们删除。

“AI学习指南机器学习篇-t-SNE的参数与调优”的评论:

还没有评论