Рубрики
Без рубрики

Наказание от пропущенных ценностей в науке данных

Автор оригинала: FreeCodeCapm Team.

Tanveer Sawyed.

И используя «мягкий» метод, чтобы вменять то же самое.

Этот пост больше ориентирован на концептуальный уровень, а не навыки кодирования и разделен на две части. Часть – я описывает проблемы со пропущенными значениями и когда и почему мы должны использовать среднее/медиану/режим. Часть II Репудаты Часть-я и утверждает, почему мы не должны использовать ни один из них и использовать мягкий Метод вместо случайный, но пропорциональное представление.

Часть – я: Почему мы удаляем недостающие значения? Когда использовать среднее, медиану, режим? И почему?

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

Различные недостающие значения могут быть:

1. NAN 2. Нет 3. 4. «NULL» 5. «Отсутствует» 6. «Недоступно» 7. «Na»

Хотя последние четыре являются строковыми значениями, Pands по умолчанию идентифицируют NAN (нет назначенного номера) и нет. Однако оба не одинаковы; Фрагмент кода ниже показывает почему.

Проблема в том, что если мы не удалим назы, то тогда мы находимся на двойную опасность. Во-первых, мы уже страдаем от потери истинных данных, а во-вторых, если не обрабатываются с уходом, Nans Start ‘ Пожирание «Наши истинные данные и могут распространяться на протяжении всего набора данных, как мы продолжаем. Давайте создать две серии и посмотреть.

Теперь давайте посмотрим, что произойдет, когда мы выполним определенные операции в этих списках.

Мы можем видеть, как истинные данные (целые числа 1, 2) были потеряны при выполнении операций (OUT: 21, 22). Другое, что следует отметить, являются противоречивыми результатами в встроенном методе Python и серии методом из-за наличия Nans (OUT: 23, 24).

Теперь давайте создадим кадр данных, которая имеет все недостающие значения, указанные выше, а также значение мусора («# $%»). Мы удалим пропущенные значения, сделанные Whangling с помощью этого крошечного набора данных игрушек.

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

Выше мы можем видеть, что последний срок в C3 должен быть «правдивым» (для «недоступных»). Чтобы сделать это так, чтобы мы снова придется прочитать рамку данных. На этот раз мы сила Pandas для определения «отсутствующих»/«недоступных»/«NA» как назы.

Все недостающие значения были идентифицированы, должны ли мы избавиться от них, отбросив их в целом?

Похоже, мы потеряли все ценности! .DROPNA () Удаляет полную строку (индекс), даже если «однократное» значение отсутствует. Следовательно, .DROPNA () Поставляется с ценой потери данных, которые могут быть ценными.

Как поступить?

Теперь можно предположить, чтобы вменять все недостающие значения с нолью. Но есть фундаментальная проблема с таким подходом: Связанность/правдивость наших данных теряется, так как в реальном мире недостающий термин может принять любую ценность. Но мы заставляем его принимать только одно жесткое значение, то есть 0.

Официальный документ of Skblen упоминается: (упор мой)

Так что мы должны делать сейчас? Лучший вариант – использовать Среднее Как минимум, лучше «представитель» особенности, чем ноль. Почему? Поскольку для непрерывных/числовых функций независимо от того, сколько раз мы добавляем среднее, это все еще сохраняется. Вот как:

Но есть проблемы со средним. Во-первых, он сильно влияет выбросы, означающие (2 + 6 + 7+ 55 ) .5! Во-вторых, хотя это делает « представлять ‘ Особенность, это также худший Отражая центральную тенденцию нормальных данных (см. Ниже пуль B & C [соответственно для правильных перекошенных и левых перекошенных данных]).

Как мы можем четко наблюдать в пулях B & C, режим лучше всего отражает центральную тенденцию. Режим является наиболее частым значением в нашем наборе данных. Но когда дело доходит до непрерывных данных, то режим может создать Несмысленность Отказ Там может быть не более одного режима или (редко) ни одного, если ни одно из значений не повторяется. Таким образом, режим используется для вменяемых недостатков в столбцах, которые являются категорично в природе.

После режима, это медиана, которая отражает центральную тенденцию лучшим. Который подразумевает, что для непрерывный данные, использование медиана лучше чем значит! Медиана это средняя оценка точек данных, когда расположены в порядке. И в отличие от среднего, медиана не зависит от выбросов набора данных – медиана уже расположенных номеров (2, 6, 7, 55 ) составляет 6,5!

Наследие

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

Но опять же, жесткость остается, так как мы все еще используем одинокий Значение – значит/средний/режим. Мы обсудим больше об этом в следующем разделе в ближайшее время. На данный момент давайте заменим значения со средним (в C0), средней (в C1) и режиме (в C3). Раньше, давайте борьбе с значением мусора «# $%» на («I2», «C3»).

Соответствующие значения:

Мы будем использовать 3 разных метода для замены нанов.

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

Мы наконец избавились от всех недостающих ценностей!

Часть-II: случайная, но пропорциональная замена (RBPR)

Вышеуказанные методы, Я думаю , можно описать как тяжелые вменения подходы , так как они жестко принимают только одно значение. Теперь давайте сосредоточимся на « мягким» вмешательный подход. Мягкий, потому что это использует вероятности Отказ Вот мы не принудительно выбрать одно значение. Мы заменим Нанс случайным образом в соотношении, который «пропорционален» населению без называний (Пропорция рассчитывается с использованием вероятностей, но с прикосновением случайности).

Объяснение с примером было бы лучше. Предположим, список 15 элементов с Один треть данные отсутствуют :

[1, 1, 1, 1, 2, 2, 2, 2, 3, 3, Нан, Нэн, Нэн, Нан, Нэн ] – – – ( Оригинал )

Теперь обратите внимание в Оригинал Список Есть наборы 4 те, кем, 4 TWOS, 2 тройки и 5 Нанс. Таким образом, те и твоего в Большинство в то время как трикс в меньшинство Отказ Теперь давайте начнем с расчета вероятностей и ожидаемых значений.

  • проб (1 происходит в нанах) = (№ 1с)/(население без назыров) = 4/10 = 2/5
  • Ожидаемая стоимость/счет 1 = (Проб) * (Всего № NANS) = (2/5) * (5) = 2.

Точно так же ожидаемая стоимость проб (2 происходит в Nans) – 2 и проб (3 встречаются в нанах) 1 (Обратите внимание, что 2 + 2 + 1 = 5 , равен числу Nans). Таким образом, наш список теперь будет выглядеть так:

[1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 1, 1, 2, 2, 3 ] – – – ( Заменены_by_propoatort )

Таким образом, соотношение одинаковых, двойных и тройков, заменяющих назы назы 2: 2: 1 Отказ То есть когда у нас есть « Ничего «Это очень вероятно Это «одни» и «двойные» формируют основную часть этого, чем «тройки», а не один жесткий Среднее значение/режим/медиана.

Если мы просто вменяемся называющиеся как (1.8), то наш список выглядит как:

[1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 1.8, 1.8, 1,8, 1,8, 1.8 ] – – – ( заменил_by_mean )

Давайте Участок коробки Эти три списка и рисовать Выводы От того же:

Первый Список с пропорциональной заменой имеет гораздо лучше Распределение данных чем среднее заменено. Второй Наблюдайте, как означает, что значит распределение с «3» (меньшинство): Это было изначально не Выброс, внезапно повернулся так в сюжете-2, но восстановил свой первоначальный статус на участке-3. Это показывает, что распределение сюжета-3 меньше предвзятый Отказ Третий Этот подход также является справедливым, он дал «3» ( меньшинство ) А ” шанс” во пропущенных ценностях, которые в противном случае это было бы никогда не получил. Четвертый Красота этого подхода заключается в том, что мы все еще успешно сохранили среднее!

Пятый , распределение (на основе вероятности) гарантирует, без сомнения, что шансы на этот метод чрезмерно установленным моделью определенно меньше, чем намывание с тяжело подход. Шестой , если назы заменяются «Случайно» Затем применяя небольшую логику, мы можем легко рассчитать, что есть: разные договоренности (перестановки) возможны:

… 1, 1, 2, 2, 3], … 1, 1, 2, 3, 2], … 1, 1, 3, 2, 2], … 1, 3, 1, 2, 2], … 3 , 1, 1, 2, 2] и еще 25!

Чтобы этот динамизм даже более четким и интуитивным видеть этот GIF с 4 нанами. Каждый цвет представляет собой другое значение NAN.

Обратите внимание, как разные договоренности генерируют разные Взаимодействие S между столбцами каждый раз, когда мы запускаем код. SE, мы не «генерируем» новые данные здесь, так как мы находятся только находки, используя уже доступные данные. Мы создаем только новые и новые взаимодействия. И эти колеблющиеся взаимодействия являются реальными Наказание навца Отказ

Код:

Теперь давайте код этой концепции и связанным об этом. Можно найти код для решения численных функций здесь А для категорических функций здесь Отказ (Я намеренно избегаю отображения кода здесь, так как фокус находится на концепции, также это без необходимости сделать статью длину. Если вы найдете код полезным и [алгоритмически] Greedy достаточно оптимизировать его, я буду рад Если вы вернетесь). Как использовать код?

random.seed = 0 np.random.seed = 0# important so that results are reproducible
# The df_original is free of impurities(eg. no '$' or ',' in price   # field) and df_original.dtypes are all set.
1. df = df_original.copy()2. Call the CountAll() function given in the code3. categorical list = [all categorical column names in df]4. numerical list = [all numerical column names in df]5. run a for loop to fill NaNs through numerical list, using the   Fill_NaNs_Numeric() function6. run a for loop to fill NaNs through categorical list, using the Fill_NaNs_Catigorical() function7. perform a train test split and check for the accuracy(do not specify the random_state)
(After step 7 we require a bit of imputation tuning. Ensuring steps 1-7 are in a single cell, repeatedly run it 15-20 times manually to get an idea of the 'range' of accuracies as it'll keep fluctuating due to randomness. 7th step helps one get an estimate of the limits of accuracies and helps us to boil down to the "best accuracy")
8.("skip" this step if df is extremely huge) run a conditioned while loop again through 1 to 7 this time to directly get our desired(tuned) accuracy.
(One may want to write down and save this 'updated'-df for future use to save oneself from repeating this process).

Здесь является полным примером, со всеми шагами только что упомянуты, в знаменитой ирис-наборе данных, включенном в библиотеку Sklearn. 20% значений из каждого столбца, включая цель, были удалены случайным образом. Тогда Nans в этом наборе данных вменяется, используя это подход. На шаге-7 его легко идентифицируемо, что после вменения мы можем мелодия наше Напомним по крайней мере ≥ 0,7 для « каждый« класс растира ириса и то же самое состояние на 8-м шаге. После запуска несколько раз несколько отчетов следующие:

Далее, для второго подтверждения, мы с участием PR-кривых пост-тюнинг, на этот раз с помощью RandomFortClassifier). [ Классы {0: ‘Setosa’, 1: «Versicolor», 2: «Виргинца»}].

Эти цифры выглядят хорошо. Теперь сдвигая наше внимание на тяжело вменение. Один Из множества классификационных отчетов показано ниже: [Соблюдайте 1с (для обсуждения вскоре) в Точность и Напомним вместе с Дисбаланс класса в Поддержка Несомненно

               precision  recall   f1-score   support
setosa           1.00      0.52      0.68        25versicolor       0.45      1.00      0.62         9virginica        0.67      0.73      0.70        11

Закон большого количества

Теперь давайте будем использовать Закон большого количества Используя PhiefTreeClassifier, чтобы выполнить 500 итераций, каждый с другим случайно удаленным набором значений, над одинаковым набором данных IRIS без тюнинга импутаны; То есть мы пропускаем стадию тюнинга на « сознательно » «Получить худший мягкий баллы. Код это здесь Отказ Окончательные сравнения с точки зрения точностью и результатов отзыва, как для твердых, так и для мягкого вменения, следующие:

Точность и Напомним Примитесь в основном, когда мы наблюдаем дисбаланс класса. Хотя изначально у нас было хорошо сбалансированная цель, но тяжело Имеясь с этим с режимом, сделанным его несбалансированным. Соблюдайте большое количество тяжело вспоминает и тяжело Предложения, имеющие. Вот использование слова «Перевернутая» Было бы неверно, поскольку эти баллы тестов не обучают. Так что правильный способ поставить: пророческий тяжело Модель уже знала, что предсказать, или использование режима гарантировало две баллы для превышения.

Теперь соблюдайте мягкий баллы. Несмотря на любой тюнинг а также намного меньше ценностей, мягкий баллы – это все еще в состоянии догнать/сходятся с тяжело Оценки (кроме двух случаев – versicolor-thisall и Stetosa-precision – по очевидным причинам, когда огромное количество пророчества 1s, насильственно подтянутую среднее). Также соблюдайте Софт-Стетоса-Напомним (Несмотря на присутствие крупных 1s в твердый аналог), и увеличенный S oft-versicolor-precision Отказ Последнее следует отметить, является общий снижение вариации и стандартного отклонения в мягкий подход.

Для справки баллов F1 и точность баллов: (снова обратите внимание на уменьшенное изменение и стандартное отклонение в Soft подход)

Заключение

Почему мы это делаем? Единственная причина – улучшить наши шансы Работа с неопределенностью Отказ Мы никогда не наказываем себе за пропущенные значения! Всякий раз, когда мы находим недостающее значение, мы просто закрепляем наш корабль в «середине» моря, ложно предполагаемое, что наш якорь успешно охватил самый глубокий траншею «неопределенности». Попытка здесь заключается в том, чтобы держать корабль, плавать, используя ресурсы, имеющиеся под рукой – скорость и направление ветра, расположение звезд, энергию волн и прилив и т. Д. Для получения лучшего « диверсифицировано «поймать, для Лучше возвращаться.

(Если вы идентифицируете что-то неверное/неверное, пожалуйста, ответите. Критика приветствуется).