Классификация с частично «неизвестными» данными


11

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

Тем не менее, когда я прихожу к тестированию на некоторых новых данных, эти данные, как правило, только частично завершены. Например, если входной вектор имеет длину 100, только 30 из элементов могут иметь заданные значения, а остальные являются «неизвестными».

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

Мне интересно, как я могу узнать классификатор, который будет работать для такого рода данных? Я мог бы просто установить «неизвестные» элементы на случайное число, но, учитывая, что часто неизвестных элементов больше, чем известных, это не похоже на хорошее решение. Или я мог бы произвольно изменить элементы в обучающих данных на «неизвестные» и тренироваться с этими, а не с полными данными, но это может потребовать исчерпывающей выборки всех комбинаций известных и неизвестных элементов.

В частности, я думаю о нейронных сетях, но я открыт для других классификаторов.

Любые идеи? Благодаря!


en.m.wikipedia.org/wiki/Missing_data может быть местом для начала.
Хатшепсут

Я думаю, что обучение под наблюдением в большей степени относится к случаю, когда данные обучения не полностью помечены. В моем случае все мои тренировочные данные помечены, но отдельные части тестовых данных «неизвестны».
Карнивавр

Ответы:


2

Я думаю, что есть разумный способ заставить его работать с нейронными сетями.

p

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


1

Я думаю, что есть несколько вариантов, которые работают с любым классификатором:

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

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

p(x,y)xyxxи усреднить результаты, взвешенные по вероятности этого вменения. Это может быть сделано либо в аналитическом, в закрытом виде для некоторых классификаторов, например, модели линейного дискриминантного анализа, либо приблизительно путем выборки неизвестных, например, для ограниченной машины Больцмана или ее глубоких вариантов (которые связаны с нейронными сетями прямой связи).


Я не думаю, что это сработает. Используйте типичный пример из компьютерного зрения, каждый пиксель изображения может быть связан с другой частью объекта. Например, пиксель (50, 50) изображения 1 - это глаз кошки, но кошка немного смещена на изображении 2, поэтому (50, 50) - это просто пиксель фона. Если расположение НС, т.е. случайная окклюзия, зависит от наблюдения, ваш вменение не будет работать.
horaceT
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.