如何在Pytorch中使用KNN,Random Forest模型?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Pytorch中使用KNN,Random Forest模型?相关的知识,希望对你有一定的参考价值。
这可能看起来像是X Y问题,但最初我有大量数据,而且我无法在给定资源(RAM问题)中进行训练。所以我认为我可以使用batch
的Pytorch
功能。但我想使用KNN,随机森林,聚类等方法,除了深度学习。那么有可能或者我可以在Pytorch中使用scikit库吗?
答案
是的,这是可能的 - 但你必须自己实施它们。 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
。
另一答案
我建议不要仅仅为了使用批次而使用PyTorch
。
论证如下:
scikit-learn
has docs about scaling在哪里可以找到MiniBatchKMeans,还有其他选项,如partial_fit
方法或warm_start
参数(与RandomForest,check this approach的情况一样)。- 如果没有磁盘缓存的手工实现,KNN就不能轻易使用,因为它将整个数据集存储在内存中(而且你没有RAM)。无论哪种方式,这种方法都会非常低效,不要尝试。
- 你最有可能无法创建与scikit相同的算法(至少不是独奏,也不是没有相当多的工作)。你最好的选择是采用经过实战考验的解决方案(尽管目前仍然是
0.2x
)。应该可以通过numba获得一些速度改进,但这不在这个问题的范围内。也许你可以将CUDA用于不同的算法,但它更是非常重要的任务。
总而言之,PyTorch
适用于使用大量CUDA的深度学习计算。如果你需要神经网络,这个框架是最好的框架之一,否则就像sklearn
或other frameworks allowing incremental training一样。您可以随时使用numpy()
和pytorch
中的其他几个调用来轻松连接这两个。
编辑:我发现KNN实施可能符合您的要求in this github repository
以上是关于如何在Pytorch中使用KNN,Random Forest模型?的主要内容,如果未能解决你的问题,请参考以下文章