Ошибка с sklearn.decomposition.NMF, когда матрица W передается методу fit_transform().Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка с sklearn.decomposition.NMF, когда матрица W передается методу fit_transform().

Сообщение Anonymous »

Сообщение об ошибке:

ValueError: Ожидаемый двумерный массив, вместо этого получен скалярный массив:
array=None.
Изменить форму ваши данные либо используют array.reshape(-1, 1), если ваши данные содержат один объект, либо > array.reshape(1, -1), если они содержат один образец.

В сообщении об ошибке указано, что массив имеет значение None, тогда как массив, передаваемый в метод fit_transform(), имеет размер (8, 2).< /p>
Обратите внимание, что в sklearn массив W содержит состав компонентов каждого экземпляра (строки данных) в виде матрицы строк данных по компонентам. (Терминология sklearn для матриц W и H противоположна общепринятому использованию и потенциально может сбивать с толку.)
Массив W, возвращаемый NMF.fit_transform() не показывает состав экземпляра как долю каждого компонента в экземпляре. Однако это желаемый (и наиболее значимый) результат. Но метод fit_transform() позволяет получить начальное предположение для матрицы W. Итак, процесс, описанный здесь (в примере кода), заключается в следующем: 1) Запустить NMF, чтобы получить начальную оценку W; 2) Сумма строк стандартизирует матрицу W; и 3) повторно запустить NMF, указав использование стандартизированной версии W для суммы строк, чтобы получить соответствующую матрицу H.
Этот процесс показан в примере ниже. Набор входных данных D был построен таким образом, что он имеет точное решение с двумя компонентами. Первоначальная версия W, стандартизованная по сумме строк ( ниже) не совпадает с матрицей W, используемой для построения D, но это не должно иметь отношения к возникающей ошибке.

Код: Выделить всё

import numpy as np
from sklearn.decomposition import NMF

D = np.array([[435.1 , 287.1 , 501.9 , 804.1 , 541.5 ],
[200.6 , 382.6 , 261.4 , 509.6 , 494.  ],
[130.25, 411.25, 189.25, 421.25, 479.75],
[341.3 , 325.3 , 405.7 , 686.3 , 522.5 ],
[ 36.45, 449.45,  93.05, 303.45, 460.75],
[411.65, 296.65, 477.85, 774.65, 536.75],
[317.85, 334.85, 381.65, 656.85, 517.75],
[270.95, 353.95, 333.55, 597.95, 508.25]])

nmf_model = NMF(n_components=2)
W = nmf_model.fit_transform(D)

# Set W1 by row-sum standardizing W.
W1 = W / np.sum(W, axis=1)[:, np.newaxis]

# Re-do matrix factorization with W fixed at W1.
nmf_model = NMF(n_components=2, init='custom')
W2 = nmf_model.fit_transform(D, W=W1)
Ошибка возникает при выполнении последней строки этого кода.
Среда: версия Python: 3.10.12; версия sklearn: 1.5.1.
** РЕДАКТИРОВАНИЕ: РЕШЕНО
Я оставлю это на случай, если это будет полезно кому-то еще.
Решение состоит в том, что при init='custom' первоначальные оценки должны быть предоставлены как для W, так и для H-матриц. Матрица H, соответствующая стандартизированной матрице W по сумме строк, может быть получена путем умножения строк матрицы H на отношение сумм столбцов матрицы W до и после стандартизации суммы строк.
Когда предоставлены оценки для матриц W и H, еще один запуск процесса NMF даст лучшую матрицу, но все же не обязательно такую, в которой суммы строк W равны 1,0. Если процесс повторяется, результат сходится к W-матрице с желаемым свойством. Для используемого здесь примера набора данных порог MSE 0,00001 для сумм строк W был достигнут за 16 итераций.

Подробнее здесь: https://stackoverflow.com/questions/787 ... -fit-trans
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Sklearn NMF соответствует порядку категорий ввода
    Anonymous » » в форуме Python
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Sklearn NMF соответствует порядку категорий ввода
    Anonymous » » в форуме Python
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Простые графики собственных векторов для sklearn.decomposition.PCA
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Простые участки собственных векторов для sklearn.decomposition.pca
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Простые участки собственных векторов для sklearn.decomposition.pca
    Anonymous » » в форуме Python
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»