这可能看起来像是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的情况一样)。0.2x
)。应该可以通过numba获得一些速度改进,但这不在这个问题的范围内。也许你可以将CUDA用于不同的算法,但它更是非常重要的任务。总而言之,PyTorch
适用于使用大量CUDA的深度学习计算。如果你需要神经网络,这个框架是最好的框架之一,否则就像sklearn
或other frameworks allowing incremental training一样。您可以随时使用numpy()
和pytorch
中的其他几个调用来轻松连接这两个。
编辑:我发现KNN实施可能符合您的要求in this github repository