使用 PCA 进行维度扩展

数据挖掘 主成分分析 降维
2022-02-20 20:47:03

我试图使用 t-SNE 算法进行降维,我知道这不是该算法的主要用途,因此不推荐。我在这里看到了一个实现。我不相信 t-SNE 上的这种实现。

该算法的工作原理如下:

  1. 给定一个训练数据集和一个测试数据集,将两者组合成一个完整的数据集
  2. 在整个数据集上运行 t-SNE(不包括目标变量)
  3. 获取 t-SNE 的输出并将其作为K个新列添加到完整数据集中,K是 t-SNE 的映射维数。
  4. 将整个数据集重新拆分为训练和测试
  5. 将训练数据集拆分为N
  6. 在N折上训练您的机器学习模型并进行N交叉验证
  7. 在测试数据集上评估机器学习模型

我的主要问题不是关于 t-SNE,而是;

  • 我可以通过在转换数据之前将数据集拆分为训练集和测试集,将下面的这个算法用于其他降维算法,例如 PCA?
  • 这会有效吗?

维度对我的数据集来说不是问题,因为它已经很小了。具有高度相关的特征也不重要。

2个回答

这种方法在我看来是一种不好的做法,因为它立即破坏了拥有任何独立测试数据以对算法性能进行公正测量的希望。通过组合所有数据并执行 t-SNE,您生成的 t-SNE 特征在训练和测试数据中都具有解释力。之后无论你如何分割数据,都不可能有真正独立的测试数据,因为所有的数据都是用来定义特征的。

从这种方法中看到性能统计数据的明显改善,我一点也不感到惊讶,因为它是一种有偏见的方法,它“窥视”了测试数据,并且可能会过于乐观。在拆分为训练/测试数据集之前,您永远不应该执行特征选择/降维,否则您会用测试数据污染过程,这些测试数据应该只在模型构建后的最后使用。将测试数据用于测试以外的任何事情(在这种情况下,降维)会给您的评估带来偏差。

只有当流形学习 (T-SNE) 创建的嵌入捕获了特征本身无法捕获的信息时,您的算法才可能起作用。

正如评论中提到的,如果您使用 T-SNE,您将不得不拟合和预测相同的数据,从而导致泄漏。另一种方法是使用UMAP,因此您的方法是:

为了Knumber_of_folds

  1. 在训练集上拟合 UMAP,不包括目标变量。

  2. 获取 UMAP 的输出并将其添加为U完整数据集的新列,U是UMAP的映射维度。

  3. K1折叠。

  4. 评估机器学习模型K折叠。