如何在具有 5,000 个样本和 500,000 个特征的数据集上加载和运行特征选择?

数据挖掘 机器学习 平行线
2022-02-23 02:31:00

我有一个包含 5000 个样本和 500,000 个特征的数据集(所有类别的基数为 3)。

我试图解决的两个问题:

  1. 加载数据集 - 尽管使用了计算集群,但我无法将其加载到内存中,所以我假设我应该使用像 Dask、Spark 或 Vaex 这样的并行化库。这是最好的主意吗?
  2. 特征选择 - 如何在并行化库中运行特征选择?这可以用 Dask、Spark、Vaex 完成吗?
2个回答

5000 个样本和 500,000 个并没有那么大——这完全取决于你有多少内存。还要记住,您可以始终优化您的数据格式。例如,如果他们是 float64 - 他们需要吗?如果它们是分类的,它们是如何编码的?(一个字符还是 20 个字符的单词?)等等。所以是的,如果你可以将数据加载到内存中对你有好处,如果不是这里是建议:

  1. 如果您只有并且只有 5K 个样本 - 您不能将所有样本都用于特征选择。
  2. 您可以删除方差非常低的特征 - 在极端情况下,如果列的方差为 0 - 肯定它是无用的。
  3. Fan et 提出了一种叫做特征筛选的东西。来自普林斯顿的人https://orfe.princeton.edu/abstracts/feature-screening-distance-correlation-learning - 简而言之:您可以通过使用单变量模型来降低维度,然后使用多变量特征选择模型。

对于第一部分,我猜你的矩阵应该是稀疏的。您可以将矩阵转换为稀疏矩阵,然后将其读入内存。

对于第二部分,这取决于矩阵的稀疏性以及要选择的特征数量。一种方法是获取前 n 个变量特征,运行 PCA 并获取前 m 个 PC。n 和 m 取决于矩阵的稀缺性。n 可以是 5000 到 50000 之间的值,您可以通过绘制每台 PC 的方差并找到拐点来定义 m。