Как я могу использовать модели KNN, Random Forest в Pytorch? - PullRequest
0 голосов
/ 13 апреля 2019

Это может показаться проблемой XY, но изначально у меня были огромные данные, и я не мог тренироваться в данных ресурсах (проблема с ОЗУ).Поэтому я подумал, что могу использовать batch функцию Pytorch.Но я хочу использовать такие методы, как KNN, Случайный лес, Кластеризация, кроме глубокого обучения.Так возможно ли это, или я могу использовать Scikit библиотеки в Pytorch?

Ответы [ 2 ]

1 голос
/ 13 апреля 2019

Я бы посоветовал против , используя PyTorch исключительно для целей использования партий.

Аргументация выглядит следующим образом :

  1. scikit-learn содержит документы о масштабировании , где можно найти MiniBatchKMeans и есть другие опции, такие как partial_fit метод или warm_start аргументы (как в случае с RandomForest, проверьте этот подход ).
  2. KNN не может быть легко использован без ручной реализациис кэшированием диска, поскольку он хранит весь набор данных в памяти (и вам не хватает оперативной памяти).Этот подход был бы ужасно неэффективным в любом случае, не пробовать.
  3. Скорее всего, вы не сможете создавать алгоритмы наравне с таковыми из Scikit (по крайней мере, не соло и не беззначительный объем работы).Лучше всего идти с довольно проверенными в бою решениями (хотя в настоящее время это все еще 0.2x).Должно быть возможно получить некоторые улучшения скорости через numba , но это выходит за рамки этого вопроса.Возможно, вы могли бы использовать CUDA для различных алгоритмов, но это еще более нетривиальная задача.

В целом PyTorch подходит для глубоких вычислений с интенсивным использованием CUDA.Если вам нужны нейронные сети, этот фреймворк является одним из лучших, в противном случае используйте что-то вроде sklearn или других фреймворков, позволяющих инкрементное обучение .Вы всегда можете легко соединить эти два с numpy() и несколькими другими вызовами в pytorch.

РЕДАКТИРОВАТЬ: Я обнаружил, что реализация KNN, возможно, соответствует вашим требованиям в этом хранилище GitHub

0 голосов
/ 13 апреля 2019

Да, это возможно, но вы должны реализовать их самостоятельно. У 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, если хотите просто, готовые решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...