Как найти точечное произведение двух очень больших матриц, чтобы избежать ошибки памяти? - PullRequest
0 голосов
/ 06 июля 2018

Я пытаюсь выучить ML, используя наборы данных Kaggle. В одной из задач (с использованием логистической регрессии) матрицы входов и параметров имеют размеры (1110001, 8) и (2122640, 8) соответственно.

Я получаю ошибку памяти при выполнении этого в python. Это было бы то же самое для любого языка, я думаю, так как он слишком большой. Мой вопрос заключается в том, как они умножают матрицы в реальных реализациях ML (так как обычно они бывают такими большими)?

Что меня беспокоит:

  1. Некоторые госзакупки в СО предложили рассчитать точечное произведение по частям и затем объединить Но даже тогда матрица была бы все еще слишком большой для оперативной памяти (в данном случае 9,42 ТБ)
  2. И если я запишу его в файл, не будет ли слишком медленным чтение алгоритмов оптимизации из файла и сведение к минимуму функции?
  3. Даже если я запишу его в файл, как fmin_bfgs (или любая дополнительная функция) будет читать из файла?
  4. Также ноутбук Kaggle показывает только 1 ГБ доступного хранилища. Я не думаю, что кто-то разрешил бы ТБ дискового пространства.
  5. В моей входной матрице многие строки имеют похожие значения для некоторых столбцов. Могу ли я использовать это мое преимущество для экономии места? (как разреженная матрица для нулей в матрице)

    Может ли кто-нибудь указать мне на реальный пример реализации таких случаев. Спасибо!

1 Ответ

0 голосов
/ 21 июля 2018

Я перепробовал много вещей. Я буду упоминать их здесь, если они кому-нибудь понадобятся в будущем:

  • Я уже очистил данные, такие как удаление дубликатов и не относящиеся к делу записи в зависимости от данной проблемы и т. д.
  • Я сохранил большие матрицы, которые в основном содержат 0 как разреженную матрицу.
  • Я реализовал градиентный спуск, используя метод мини-партии вместо простого старого метода Пакет (theta.T dot X).

Теперь все работает нормально.

...