Как работать с пропущенными значениями?

Ответ на жуткий вопрос о том, что делать с отсутствующими значениями

Почему нам нужно иметь дело с отсутствующими значениями в наших данных? Почему нам нужно беспокоиться об этом? Не будет ли модель просто игнорировать их?

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

Pandasпредлагает нам способ быстро проверить отсутствующие значения с помощью метода .isna(), удалить столбцы с помощью .dropna() и заполните пропущенные значения методом .fillna().

Работа с отсутствующими значениями с помощью SimpleImputer из Scikit-learn

«SimpleImputer — это пакет от scikit-learn, который обеспечивает статическое вменение отсутствующих значений, используя либо постоянное значение, либо среднее значение столбца, медиану или даже наиболее распространенное значение».

Простая логикаImputer

Логика SimpleImputer очень проста. Он берет среднее значение столбца и применяет его к результату. В примере ниже он будет принимать среднее значение всех значений в столбце C, которые являются; 1 + 2 + 9 + 20. Здесь пропущенное значение будет 8.

Он реализуется с помощью метода SimpleImputer(), который принимает следующие аргументы:

Подробнее читайте в Руководстве пользователя.

В строках 15 и 18 он выполняется отдельно. Но есть метод scikit-learn, использующий .fit_transform, который может выполнять и подгонку, и трансформацию одновременно, как показано в строке 24.

Примечание: ИСПОЛЬЗУЙТЕ fit_transform ТОЛЬКО для обучающих данных, поскольку вы хотите, чтобы ваши правила импутации основывались на ваших обучающих данных. Если вы подгоните свои правила вменения в наборы обучающих и тестовых данных по отдельности, вы в конечном итоге получите разные правила вменения, и это будет означать, что ваши результаты обучения и тестирования не будут полностью сопоставимы. Если вы хотите использовать одну и ту же логику или правила для тестовых данных и новых данных, используйте подгонку и преобразование отдельно.

Работа с отсутствующими значениями с помощью KNNImputer от Scikit-learn

«KNNImputer из библиотеки scikit-learn использует алгоритм k ближайших соседей для динамического вменения отсутствующих числовых значений, используя другие точки данных, которые кажутся похожими в других доступных числовых функциях.

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

Логика KNNImputer

Логика KNNImputer, в отличие от SimpleImputer, учитывает значения из других числовых столбцов. В том же предыдущем примере вместо того, чтобы просто брать значения из столбца C, KNNImputer также будет брать значения из столбцов A и B.

Что происходит под капотом, так это то, что он отображает значения в пространстве на основе их значений. (см. рисунки ниже)

На левом рисунке нанесены точки данных из строки 3, столбца A и строки 3, столбца B. Он также записал значение столбца C, которое равно 9 на графике и делает то же самое для всех, как показано на рисунке справа.

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

Если мы используем k со значением 4. Он возьмет 4 ближайших точки данных и усреднит их, чтобы получить отсутствующее значение (*см. левый рисунок ниже) Если мы используем k со значением 2, он возьмет две ближайшие точки данных (*см. правый рисунок ниже).

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

Есть много вопросов о том, как присвоить или решить, какое значение присвоить k. В Scikit-learn значение по умолчанию равно 5, но вы можете изменить это значение на любое другое. Предпосылка для этого алгоритма для целей вменения заключается в том, что более близкие точки данных с большей вероятностью будут лучше представлять неизвестные или отсутствующие значения. Таким образом, значение 14,5, как вы видите на правом рисунке выше, вероятно, является более реалистичным значением для вменения, чем 8 на левом рисунке, поскольку оно использует точки данных, которые более похожи на другие функции или столбцы данных.

Метод KNNImputer() принимает следующие аргументы:

Подробнее читайте в Руководстве пользователя.

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

Ссылки:

Чтобы узнать больше о Data Science, ознакомьтесь с Data Science Infinity от Эндрю Джонса по ссылке ниже: