如何在Pytorch中使用KNN,Random Forest模型?

问题描述 投票:0回答:2

这可能看起来像是X Y问题,但最初我有大量数据,而且我无法在给定资源(RAM问题)中进行训练。所以我认为我可以使用batchPytorch功能。但我想使用KNN,随机森林,聚类等方法,除了深度学习。那么有可能或者我可以在Pytorch中使用scikit库吗?

python-3.x scikit-learn pytorch
2个回答
0
投票

是的,这是可能的 - 但你必须自己实施它们。 Pytorch有这些方法的原语,因为它实现了自己的tensors,什么不是;但是,该库仅为深度学习方法提供了一个抽象层。例如,一个非常天真的KNN实现(从矢量距离当前点产生的矩阵)将是

def KNN(X, k):
    X = X.float()
    mat_square = torch.mm(mat, mat.t())
    diag = torch.diagonal(mat_square)
    diag = diag.expand_as(mat_square)
    dist_mat = diag + diag.t() - 2*mat_square
    dist_col = dist_mat[-1, :-1]
    val, index = dist_col.topk(k, largest=False, sorted=True)
    return val, index

如果你想要简单易用的解决方案,你应该使用scikit-learn


0
投票

我建议不要仅仅为了使用批次而使用PyTorch

论证如下:

  1. scikit-learn has docs about scaling在哪里可以找到MiniBatchKMeans,还有其他选项,如partial_fit方法或warm_start参数(与RandomForest,check this approach的情况一样)。
  2. 如果没有磁盘缓存的手工实现,KNN就不能轻易使用,因为它将整个数据集存储在内存中(而且你没有RAM)。无论哪种方式,这种方法都会非常低效,不要尝试。
  3. 你最有可能无法创建与scikit相同的算法(至少不是独奏,也不是没有相当多的工作)。你最好的选择是采用经过实战考验的解决方案(尽管目前仍然是0.2x)。应该可以通过numba获得一些速度改进,但这不在这个问题的范围内。也许你可以将CUDA用于不同的算法,但它更是非常重要的任务。

总而言之,PyTorch适用于使用大量CUDA的深度学习计算。如果你需要神经网络,这个框架是最好的框架之一,否则就像sklearnother frameworks allowing incremental training一样。您可以随时使用numpy()pytorch中的其他几个调用来轻松连接这两个。

编辑:我发现KNN实施可能符合您的要求in this github repository

© www.soinside.com 2019 - 2024. All rights reserved.