Python 3.x 如何在Pytorch中使用KNN随机森林模型?

Python 3.x 如何在Pytorch中使用KNN随机森林模型?,python-3.x,scikit-learn,pytorch,Python 3.x,Scikit Learn,Pytorch,这看起来像是一个X-Y问题,但最初我有大量数据,无法在给定资源的RAM问题中进行训练。所以我想我可以使用Pytorch的批处理功能。但除了深度学习,我想使用KNN、随机森林、聚类等方法。那么,我是否可以在Pytorch中使用scikit库呢?是的,这是可能的,但您必须自己实现它们。Pytorch拥有这些方法的原语,因为它实现了自己的类型,而不是什么;然而,该库只为深度学习方法提供了一个抽象层。例如,从矢量距离当前点生成的矩阵的非常简单的KNN实现将是 def KNN(X, k): X =

这看起来像是一个X-Y问题,但最初我有大量数据,无法在给定资源的RAM问题中进行训练。所以我想我可以使用Pytorch的批处理功能。但除了深度学习,我想使用KNN、随机森林、聚类等方法。那么,我是否可以在Pytorch中使用scikit库呢?

是的,这是可能的,但您必须自己实现它们。Pytorch拥有这些方法的原语,因为它实现了自己的类型,而不是什么;然而,该库只为深度学习方法提供了一个抽象层。例如,从矢量距离当前点生成的矩阵的非常简单的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拥有这些方法的原语,因为它实现了自己的类型,而不是什么;然而,该库只为深度学习方法提供了一个抽象层。例如,从矢量距离当前点生成的矩阵的非常简单的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。

更新 目前,有一些使用GPU的sklearn替代方案,最突出的是rapidsai提供的cuML链路

先前的答复 我建议不要仅为了批量使用而使用Pytork

论证如下:

scikit了解在哪里可以找到,还有其他选项,如部分拟合方法或温暖的开始参数,就像RandomForest一样。 如果没有手工实现的磁盘缓存,KNN将很难使用,因为它将整个数据集存储在内存中,并且缺少RAM。无论哪种方式,这种方法都会非常低效,不要尝试。 您很可能无法创建与scikit相同的算法,至少不是单独创建的,也不是没有大量工作的。您最好的选择是使用经过战斗测试的解决方案,即使它目前仍然是0.2倍。这应该是可能的,通过一些速度的提高,但这超出了这个问题的范围。也许你可以将CUDA用于不同的算法,但这是一项更为复杂的任务。 总之,Pytork适用于CUDA大量使用的深度学习计算。如果你需要神经网络,这个框架是最好的框架之一,否则就使用类似sklearn或。在pytorch中,您可以通过numpy和其他几个调用轻松地连接这两个方面

编辑:我发现KNN实现可能符合您的要求

更新 目前,有一些使用GPU的sklearn替代方案,最突出的是rapidsai提供的cuML链路

先前的答复 我建议不要仅为了批量使用而使用Pytork

论证如下:

scikit了解在哪里可以找到,还有其他选项,如部分拟合方法或温暖的开始参数,就像RandomForest一样。 如果没有手工实现的磁盘缓存,KNN将很难使用,因为它将整个数据集存储在内存中,并且缺少RAM。无论哪种方式,这种方法都会非常低效,不要尝试。 您很可能无法创建与scikit相同的算法,至少不是单独创建的,也不是没有大量工作的。您最好的选择是使用经过战斗测试的解决方案,即使它目前仍然是0.2倍。这应该是可能的,通过一些速度的提高,但这超出了这个问题的范围。也许你可以将CUDA用于不同的算法,但这是一项更为复杂的任务。 总之,Pytork适用于CUDA大量使用的深度学习计算。如果你需要神经网络,这个框架是最好的框架之一,否则就使用类似sklearn或。在pytorch中,您可以通过numpy和其他几个调用轻松地连接这两个方面


编辑:我发现KNN实现可能符合您的要求

我投票将此问题作为离题题结束,因为它属于我。我投票将此问题作为离题结束,因为它属于