淘宝网站建设没法上传怎么办,小商铺装修,自助网站建设 网易,泉州专业网站建设费用在数据科学和分析中#xff0c;理解高维数据集中的底层模式是至关重要的。t-SNE已成为高维数据可视化的有力工具。它通过将数据投射到一个较低维度的空间#xff0c;提供了对数据结构的详细洞察。但是随着数据集的增长#xff0c;标准的t-SNE算法在计算有些困难#xff0c;…在数据科学和分析中理解高维数据集中的底层模式是至关重要的。t-SNE已成为高维数据可视化的有力工具。它通过将数据投射到一个较低维度的空间提供了对数据结构的详细洞察。但是随着数据集的增长标准的t-SNE算法在计算有些困难所以发展出了Barnes-Hut t-SNE这个改进算法它提供了一个有效的近似允许在不增加计算时间的情况下扩展到更大的数据集。 Barnes-Hut t-SNE 是一种高效的降维算法适用于处理大规模数据集是 t-SNE (t-Distributed Stochastic Neighbor Embedding) 的一个变体。这种算法主要被用来可视化高维数据并帮助揭示数据中的内部结构。
基础概念
t-SNE 的基础是 SNEStochastic Neighbor Embedding一种概率性降维技术通过保持高维和低维空间中的概率分布相似来进行数据映射。而t-SNE 是由 Laurens van der Maaten 和 Geoffrey Hinton 于 2008 年提出的。它是一种非线性降维技术非常适合于将高维数据降维到二维或三维空间中用于数据可视化。
Barnes-Hut t-SNE 采用了在天体物理学中常用的 Barnes-Hut 算法来优化计算过程。这种算法最初是为了解决 N体问题即计算多个物体之间相互作用的问题而设计的。
传统的 t-SNE 算法的时间复杂度约为 O(N2)而 Barnes-Hut 版本的 t-SNE 则将时间复杂度降低到 O(NlogN)这使得算法能够更加高效地处理大规模数据集。
工作原理
Barnes-Hut t-SNE改进了原来的t-SNE算法加入了空间划分的数据结构以降低点之间相互作用的复杂性。首先我们先简单介绍 t-SNE因为理解 t-SNE 的基本工作原理对于理解 Barnes-Hut t-SNE 是必要的
t-SNE 的主要步骤包括
相似度计算在高维空间中t-SNE 首先计算每对数据点之间的条件概率这种概率反映了一个点选择另一个点作为其邻居的可能性。这种计算基于高斯分布并且对于每个点会有不同的标准差高斯分布的宽度以保证每个点的有效邻居数大致相同。低维映射在低维空间通常是 2D 或 3D中t-SNE 同样为数据点之间定义了一个概率分布但这里使用的是 t 分布自由度为1的学生 t-分布这有助于在降维过程中避免“拥挤问题”即多个高维点映射到相同的低维点。梯度下降t-SNE 通过最小化高维和低维空间中概率分布的 Kullback-Leibler 散度来找到最佳的低维表示。这个过程通过梯度下降算法进行优化。
在处理大型数据集时直接计算所有点对之间的相互作用非常耗时。Barnes-Hut 算法通过以下步骤优化这个过程
构建空间索引树在二维空间中构建四叉树在三维空间中构建八叉树。每个节点表示一个数据点而每个内部节点则表示它的子节点的质心即子节点的平均位置。近似相互作用在计算点之间的作用力即梯度下降中的梯度时Barnes-Hut 算法不是计算每一对点之间的相互作用而是使用树来估计远距离的影响。对于每个点如果一个节点或其包含的数据点的区域距离足够远根据预设的阈值如节点的宽度与距离的比率则该节点内的所有点可以被视为一个单一的质心从而简化计算。有效的梯度计算通过这种近似算法只需要计算与目标点近邻的实际点以及远处质心的影响极大地减少了必须执行的计算量。
通过这种方法Barnes-Hut t-SNE 将复杂度从 O(N2) 降低到 O(NlogN)使其能够有效地处理数万到数十万级别的数据点。但是这种效率的提升是以牺牲一定的精确度为代价的因为远距离的相互作用是通过质心近似来实现的而不是精确计算。
代码示例
Barnes-Hut t-SNE已经被集成到scikit-learn库种所以我们直接可以拿来使用
首先我们生成一些简单的数据 importnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.manifoldimportTSNEfromsklearn.datasetsimportmake_blobsfromsklearn.model_selectionimporttrain_test_splitfromsklearn.preprocessingimportStandardScalerfromsklearn.metricsimportsilhouette_score# Generate synthetic dataX, ymake_blobs(n_samples1000, centers4, n_features50, random_state42)生成4个簇每个样本包含50个特征总计1000个样本。
然后我们分割数据集进行聚类 # Split data into training and testing setsX_train, X_test, y_train, y_testtrain_test_split(X, y, test_size0.3, random_state42)# Standardize features by removing the mean and scaling to unit variancescalerStandardScaler()X_train_scaledscaler.fit_transform(X_train)X_test_scaledscaler.transform(X_test)# Hyperparameter tuning for t-SNEbest_silhouette-1best_params {}perplexities [5, 30, 50, 100] # Different perplexity values to trylearning_rates [10, 100, 200, 500] # Different learning rates to tryforperplexityinperplexities:forlearning_rateinlearning_rates:# Apply Barnes-Hut t-SNEtsneTSNE(n_components2, methodbarnes_hut, perplexityperplexity,learning_ratelearning_rate, random_state42)X_train_tsnetsne.fit_transform(X_train_scaled)# Calculate Silhouette scorescoresilhouette_score(X_train_tsne, y_train)# Check if we have a new best scoreifscorebest_silhouette:best_silhouettescorebest_params {perplexity: perplexity, learning_rate: learning_rate}best_embeddingX_train_tsne# Visualization of the best t-SNE embeddingplt.figure(figsize(8, 6))plt.scatter(best_embedding[:, 0], best_embedding[:, 1], cy_train, cmapviridis, edgecolork, s50)plt.title(fBarnes-Hut t-SNE Visualization\nPerplexity: {best_params[perplexity]}, Learning Rate: {best_params[learning_rate]})plt.colorbar(labelCluster Label)plt.xlabel(t-SNE Feature 1)plt.ylabel(t-SNE Feature 2)plt.grid(True)plt.show()# Interpretations and resultsprint(fBest Silhouette Score: {best_silhouette})print(Best Parameters:, best_params)print(Barnes-Hut t-SNE provided a clear visualization of the clusters, indicating good separation among different groups.)我们只要在sklearn的TSNE方法种传入参数methodbarnes_hut’即可。上面代码运行结果如下 Best Silhouette Score: 0.9504804611206055Best Parameters: {perplexity: 100, learning_rate: 500}Barnes-Hut t-SNE provided a clear visualization of the clusters, indicating good separation among different groups.可以看到
Barnes-Hut t-SNE算法已经有效地将高维数据分离成不同的簇。轮廓分数0.95说明聚类分离良好几乎没有重叠这个接近1的分数表明平均而言数据点离它们的集群中心比离最近的不同集群的中心要近得多。
通过观察可以看到到簇内的密度各不相同。例如图中底部的某个簇蓝色的看起来特别紧凑表明其点之间的相似度很高。相反顶部的另一个簇黄色的看起来更为分散意味着该组内的变异更大。
没有明显的异常值远离其各自的簇这表明原始高维空间中的簇结构定义良好。
高轮廓分数和清晰的视觉分离可以说明我们选择的超参数perplexity100学习率500非常适合这个数据集。这也表明算法可能已经很好地收敛找到了一个稳定的结构强调了簇之间的差异。
总结
Barnes-Hut t-SNE 是一种高效的数据降维方法特别适合于处理大型和复杂的数据集它通过引入四叉树或八叉树的结构来近似远距离作用从而大幅减少了计算量同时保持了良好的数据可视化质量。Barnes-Hut t-SNE优化了原始 t-SNE 算法的计算效率使其能够在实际应用中更为广泛地使用。
https://avoid.overfit.cn/post/ec11566be83d4f4fb7cf31d09197d8e4