Алгоритм заполнения поврежденной матрицы данных

у меня следующий вопрос:

я извлек набор данных, но часть этих данных либо недоступна, либо отсутствует; для разных элементов я определил 10 параметров:

       param1   param2    ...  param10
Item 1   1220     N/A            1000
Item 2   1300     200     ...    1000
..        ...      ...

item N    N/A      1000   ...     200

N ~ 1500 and half of the values are complete

в создании элементов есть неявная логика,поэтому я хотел бы заполнить эти значения наилучшим ожидаемым значением.

пример:

давайте представим, что у вас есть 2 параметра и 3 предметы.

       param1  param2
item1    400    200
item2    200    100
item3    100     N/A

С линейной интерполяцией вы легко получите param2 для item3 = 50.

мои мысли:

поскольку у меня есть 10 параметров и 1500 значений, я подумал о том, чтобы сделать PCA на матрица ковариации из 750 пунктов, которые являются полными (поиск основного направления набора данных).

PCA приведет меня к одному основному направлению для моих предметов (наибольшее собственное значение) и поднаправлению для подгрупп элементов (меньшие собственные значения).

Я хотел проецировать векторы с отсутствующими параметрами, например, на основное направление. получить приблизительное значение отсутствующих параметров.

из моего первого примера :

       param1  param2
item1    400    200
item2    200    100
item3    100     X ?

заполните матрицу:

param1  param2
item1    400    200
item2    200    100

матрица ковариации:

   1    0.5
   0.5  1 

собственные векторы и собственные значения:

V1 и l1:

1
1   associatedd to 1.5

V2 и l2:

1
-1  associated to 0.5

результат:

если я проецирую только на V1, я получаю X1=100.

если я проецирую на l1.V1 + l2.V2 Я X1=50. Это потому, что существует идеальная корреляция между первыми 2 элементами.


мой вопрос:

до сих пор это только теория, я не применял пока нет, но прежде чем я начну, я хотел бы знать, собираюсь ли я куда-то с этим.

могу ли я сделать лучше? (Я действительно верю, что да.) Что я могу сделать, если все элементы имеют один отсутствующий параметр? Откуда мне знать направление?

известны ли хорошие алгоритмы для заполнения поврежденных матриц или вы можете помочь мне завершить мою идею (рекомендуя мне хорошие чтения или методы)?

Я думаю, Netflix использует такой алгоритм для заполнения матрицы оценки фильма автоматически, например (проблема с долларом Netflix 1M).

если вы считаете, что это принадлежит другому сайту stackexchange, не стесняйтесь переносить его.

3 ответов


почему бы не использовать числовые прогнозы от машинное обучение? В первом примере параметры являются атрибутами, а элементы-экземплярами. С его помощью вы можете попробовать линейная регрессия или нейронные сети или что-нибудь еще в пару минут. После обучения вы получите следующее уравнение для своего первого примера (param2 здесь отмечен как класс):

param2 = 0 + 1/2 * param1

это именно то, что вы хотите.

Если вы не уверены, что отношения между парами линейны, вы всегда можете попробовать другие типы регрессии (ANN, SVM, что угодно).

для быстрого запуска используйте века. Преобразуйте данные в CSV, загрузите их в Weka и начните играть. Для числовых прогнозов посмотрите вкладку "классификация".


в этой статье Саймон фанк описывает его использование подхода, подобного Вашему, для призового вызова Netflix; возможно, это то, о чем вы думали, когда упоминали об этом. В отличие от вашего подхода, он обрабатывает недостающие данные. Суть заключается в замене простого использования матричных методов для определения сингулярной декомпозиции матрицы данных примерно эквивалентной оптимизационной задачей, которая более естественно учитывает отсутствующие данные.


попробуйте алгоритм NIPALS. Это стандартный метод из области "Хемометрика". Его метод PCA специально разработан для отсутствующих данных. Затем вы можете проецировать свои оценки и загрузку (t*p'), чтобы заполнить пробелы в соответствии с моделью данных. Красота этого подхода заключается в том, что вы не искажаете данные путем вменения, вы просто используете данные, которые у вас есть. Попробуйте найти документы Германа или Сванте Вольда, или есть реализации в R и Matlab. Очевидно, что больше недостающих данных чем менее надежны результаты, но для отсутствующих в случайном порядке вы можете иметь довольно большое количество отсутствующих данных.

легенда заключается в том, что Герман изобрел алгоритм ранжирования скаковых лошадей в США-массивная проблема недостающих данных (если подумать, не все лошади встречаются)!