Неотрицательная матричная факторизация

В предыдущих статьях рассматривался алгоритм неотрицательной матричной факторизации (NMF), который разбивает набор числовых наблюдений на компоненты. Этот метод был применен к задаче тематической классификации новостей и к задаче обнаружения событий, повлиявших на объемы торгов отдельными акциями или группами акций. Алгоритм не нуждается в учителе, поскольку применяется для того, чтобы охарактеризовать данные, а не для прогнозирования значений или принадлежности к категории.

Чтобы понять, как работает алгоритм NMF, рассмотрим набор значений в табл. 12.10.

Таблица 12.10. Простые данные для алгоритма NMF

Номер наблюдения

A

B

1

29

29

2

43

33

3

15

25

4

40

28

5

24

11

6

29

29

7

37

23

8

21

6

Предположим, что наблюдения A и B – это некоторые комбинации двух пар чисел (признаков), но вы не знаете, что это за пары и каков вклад каждой пары (вес) в каждом наблюдении. Алгоритм NMF способен отыскать возможные значения признаков и весов. В примере с новостями ранее, наблюдения представляли собой новости, а столбцы – слова, встречающиеся в текстах новостей. В примере с объемом торгов акциями в качестве наблюдений брались даты, а в качестве столбцов – символы различных акций. В обоих случаях алгоритм пытался найти как можно меньшее количество частей, скомбинировав которые с различными весами, можно получить исходные наблюдения.

Одно из возможных решений для приведенной выше таблицы – пары (3,5) и (7,2). Из этих частей наблюдения можно реконструировать следующим образом:

Рис. 12.17. Факторизация набора данных на признаки и веса

5 x (3, 5) + 2 x (7, 2) = (29, 29) 5 x (3, 5) + 4 x (7, 2) = (43, 33) Эти формулы можно рассматривать как умножение матриц, показанное на рис. 12.17.

Цель алгоритма NMF заключается в том, чтобы автоматически найти матрицы признаков и весов. Для этого он начинает с матриц, выбранных случайным образом, и модифицирует их по правилам обновления. Согласно этим правилам генерируются четыре новые матрицы. В описании исходная матрица называется матрицей данных: hn

Произведение транспонированной матрицы весов и матрицы данных.

hd

Произведение транспонированной матрицы весов, самой матрицы весов и матрицы признаков.

wn

Произведение матрицы данных и транспонированной матрицы признаков.

wd

Произведение матрицы весов, матрицы признаков и транспонированной матрицы признаков.

Для обновления матриц признаков и весов все эти матрицы преобразуются в массивы. Каждый элемент матрицы признаков умножается на соответственный элемент hn и делится на соответственный элемент hd. Аналогично, каждый элемент матрицы весов умножается на соответственный элемент wn и делится на элемент wd.

Процесс повторяется, пока произведение матриц весов и признаков не окажется достаточно близко к матрице данных. Зная матрицу признаков, можно сказать, какие факторы – например, темы новостей или события на фондовом рынке – в различных сочетаниях привели к образованию именно такого набора данных.

Использование ранее написанного кода

Для применения алгоритма NMF достаточно вызвать функцию factorize, передав ей список наблюдений и количество искомых признаков: >>> from numpy import * >>> import nmf

>>> data=matrix([[ 29., 29.],

… [ 43., 33.], … [ 15., 25.], … [ 40., 28.], … [ 24., 11.], … [ 29., 29.], … [ 37., 23.], … [ 21., 6.]])

>>> weights,features=nmf.factorize(data,pc=2) >>> weights

matrix([[ 0.64897525, 0.75470755], [ 0.98192453, 0.80792914],

[ 0.31602596,  0.70148596],

[ 0.91871934,  0.66763194],

[ 0.56262912,  0.22012957],

[ 0.64897525,  0.75470755],

[ 0.85551414,  0.52733475],

[ 0.49942392,  0.07983238]]) >>> features

matrix([[ 41.62815416, 6.80725866],

[ 2.62930778,  32.57189835]])

Возвращаются веса и признаки. При разных прогонах могут получаться различные результаты, потому что для небольшого набора наблюдений возможно несколько разных наборов признаков. Чем больше набор наблюдений, тем вероятнее, что результаты будут примерно одинаковы, хотя признаки могут возвращаться в разном порядке.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100