Ошибка расчета SVD из функции Лапака при использовании класса линейного дискриминантного анализа scikit-learn - PullRequest
0 голосов
/ 09 февраля 2019

Я классифицирую 2-классные, 1-D данные, используя классификатор scikit-learn LDA в конвейере машинного обучения, который я создал.Произошло следующее исключение:

ValueError: Ошибка расчета размера внутреннего рабочего массива: -10

в следующей строке:

LinearDiscriminantAnalysis.fit (X, y)

, где X = [-5e15, -5e15, -5e15, 5.7e16] и y = [0, 0, 0, 1], оба типа данных float64

Кроме того, на консоль была выведена следующая ошибка:

Intel MKL ОШИБКА: неверный параметр 10 при входе в DGESDD

После быстрого поиска в Google,dgesdd - это функция в LAPACK , на которую scikit-learn опирается .Документация dgesdd сообщает нам, что функция вычисляет декомпозицию сингулярных значений (SVD) реальной матрицы M-N A.

Возвращаясь к оригиналуисключение, я обнаружил, что это было поднято в scipy.linalg.lapack.py в функции _compute_lwork.Эта функция принимает в качестве входных данных функцию, которая в данном случае, на мой взгляд, является функцией dgesdd.CTRL-F "-10" на странице документации dgesdd дает логику для этого кода ошибки, но я не знаю Fortran, поэтому я не совсем уверен, что это значит.

Хочу поспорить, чтоРасчет SVD не выполняется из-за (1) больших значений в массиве X или (2) того факта, что 3 значения в массиве X являются точно такими же числами.

Я буду продолжать читать SVD и его ограничения.Любая идея о том, как избежать этой ошибки, будет чрезвычайно полезна.

Вот скриншот ошибки

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

относительно Intel MKL ERROR: параметр 10 был неверным при входе в проблему DGESDD.На самом деле эта проблема была исправлена ​​в MKL v.2018 u4 (сентябрь 2018).Вот ссылка на список исправлений ошибок MKL 2018 .Вы можете проще проверить версию MKL, которую вы используете, установив переменную env MKL_VERBOSE = 1 в системные среды и посмотреть на вывод, который будет содержать такую ​​добрую информацию.Пример: MKL_VERBOSE Intel (R) MKL 2019.0 Обновление 2 Сборка продукта 20190118 для архитектуры Intel (R) 64 с процессорами Intel (R) с расширенными векторными расширениями (Intel (AV)), Lnx 2,80 ГГц lp64 intel_thread MKL_VERBOSE ZGETRF (85,85,0x13e66f0,85,0x13e1080,0) 6,18 мс CNR: OFF Dyn: 1 FastMM: 1 TID: 0 NThr: 20

0 голосов
/ 19 февраля 2019

Это определение DGESDD:

subroutine  dgesdd (JOBZ, M, N, A, LDA, S, U, LDU, VT, LDVT, WORK, LWORK, IWORK, INFO)

Ошибка, которая у вас есть, указывает, что значение, переданное реализации MKL подпрограммы для 10-го параметра, LDVT, ведущего измеренияматрица V**T не соответствует ожиданиям указанной маршрутизации.

Это может быть ошибкой в ​​реализации Intel, довольно маловероятно, если предположить, что при тестировании на стресс-тестирование этой подпрограммы есть батарея, но это не невозможно.Какая версия MKL это?Или это ошибка в коде LDA, скорее всего:

LDVT is INTEGER
      The leading dimension of the array VT.  LDVT >= 1;
      if JOBZ = 'A' or JOBZ = 'O' and M >= N, LDVT >= N;
      if JOBZ = 'S', LDVT >= min(M,N).

Не могли бы вы напечатать M, N, LDA, LDU и LDVT?

Если вы правильно установите LDVT, анализ рабочей области будетбеги просто отлично.

...