使用邻域成分分析进行降维

Beginner

This tutorial is from open-source community. Access the source code

简介

本实验演示了如何使用 scikit-learn 库应用邻域成分分析(Neighborhood Components Analysis,NCA)进行降维。本实验将 NCA 与应用于数字数据集的其他(线性)降维方法进行比较。数字数据集包含 0 到 9 的数字图像,每个类别大约有 180 个样本。

虚拟机提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。

导入库

导入必要的库:

  • numpy
  • matplotlib.pyplot
  • datasets
  • train_test_split
  • PCA
  • 线性判别分析(LinearDiscriminantAnalysis)
  • K 近邻分类器(KNeighborsClassifier)
  • 邻域成分分析(NeighborhoodComponentsAnalysis)
  • make_pipeline
  • 标准缩放器(StandardScaler)

加载数字数据集

使用 scikit-learn 中的load_digits()函数加载数字数据集。

分割数据集

使用 scikit-learn 中的train_test_split()函数将数据集分割为训练集和测试集。

定义变量

定义分析所需的变量:

  • dim = 数据集中的特征数量
  • n_classes = 数据集中的类别数量
  • n_neighbors = K 近邻(KNN)分类器的邻居数量
  • random_state = 用于可重复性的随机状态

使用主成分分析(PCA)进行降维

通过创建一个包含StandardScaler()PCA(n_components=2, random_state=random_state)的管道,使用主成分分析(PCA)将数据集的维度降至 2。

使用线性判别分析(LDA)进行降维

通过创建一个包含StandardScaler()LinearDiscriminantAnalysis(n_components=2)的管道,使用线性判别分析(LDA)将数据集的维度降至 2。

使用邻域成分分析(NCA)进行降维

通过创建一个包含StandardScaler()NeighborhoodComponentsAnalysis(n_components=2, random_state=random_state)的管道,使用邻域成分分析(NCA)将数据集的维度降至 2。

使用 K 近邻(KNN)分类器评估方法

创建一个以n_neighbors为参数的 K 近邻分类器(KNeighborsClassifier)。

创建要比较的方法列表

使用步骤 5 至 7 中定义的方法,创建一个要与 K 近邻分类器(KNN classifier)进行比较的方法列表。

拟合模型并评估测试准确率

通过使用model.transform()对训练数据集和测试数据集进行转换,并在转换后的训练数据集上拟合 K 近邻分类器,来拟合每个模型并评估测试准确率。使用knn.score()计算转换后的测试数据集上的最近邻准确率。

绘制投影点并显示评估分数

使用plt.scatter()plt.title()绘制投影点,并显示每种方法的评估分数。

显示图表

使用plt.show()显示图表。

总结

本实验展示了如何使用邻域成分分析(Neighborhood Components Analysis,NCA)进行降维,并将其与应用于数字数据集的其他(线性)降维方法进行比较。结果表明,尽管维度大幅降低,但 NCA 仍能使数据聚类在视觉上具有意义。