NNS: есть ли способ опустить определенные особенности в прогнозе? - PullRequest
3 голосов
/ 30 января 2020

Я бы хотел обучить модель поиска ближайших соседей следующим образом:

        | feature_A | feature_B | feature_C |
---------------------------------------------
point_1 |       0.0 |       5.1 |      94.9 |
point_2 |      80.7 |      35.3 |      64.7 |

И так далее, с множеством других функций и точек данных.

Мы можем затем передайте точку для прогнозирования, такую ​​как [0.3, 5.0, 94.0] -> returns point_1, как это обычно бывает при поиске ближайшего соседа.

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

[None, 5.0, None] -> returns point_1

[80.0, None, 64.7] -> returns point_2

Проблема в том, что эти нули не могут быть переданы в модель, и они не могут быть выведены, чтобы быть 0,0, так как это не то, что просит прогноз. Эту функцию необходимо полностью исключить из расчета.

Есть ли способ сделать это изначально, используя библиотеки Sagemaker / Scikit-learn без необходимости создания нескольких моделей или написания пользовательской реализации NNS?

1 Ответ

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

В общем, проблема прогнозирования для данных с отсутствием является трудной и не решаемой.

С точки зрения статистики: прогнозируемый ближайший сосед для некоторой контрольной точки xₜ обозначается ŷ(xₜ) , Пусть некоторые компоненты xₜ отсутствуют, поэтому мы пишем xₜ=(zₜ,wₜ), где компоненты wₜ отсутствуют. Тогда уверенность в том, что модель предсказывает k, может быть записана как Pr(ŷ(xₜ)=k)=P(ŷ(zₜ)=k)= ∫I(k=ŷ(zₜ,w))p(w|zₜ)dw, где I(t)=1, если t=true и 0 в противном случае. Наконец, вы можете выбрать прогноз ỹ(xₜ) в качестве режима Pr(ŷ(xₜ)=k), то есть ỹ(xₜ) = argmax_k Pr(ŷ(xₜ)=k).

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

Если вы сделаете какое-то ограничивающее предположение, например, «Пропущено полностью случайно», тогда проблема упрощается, как p(w|zₜ)=p(w) от независимости. Ваши прогнозы, вероятно, ухудшатся. Простого способа решения этой проблемы не существует.

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

Я бы, вероятно, использовал бы knn-imputer в sklearn для вменения пропущенных значений, а затем просто go для поиска ближайшего соседа по вмененным данным.

...