Предварительная обработка данных — это первая часть любого проекта машинного обучения, которым мы занимаемся. Этот пост в блоге, мой первый, начнет обсуждать предварительную обработку данных в python. Я использовал Jupyter Notebook/lab в качестве предпочтительной IDE наряду с Python 3.

Зачем нужна предварительная обработка данных?

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

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

  • Отсутствующие данные. В некоторых строках могут отсутствовать некоторые столбцы.
  • Неверные данные. Некоторые данные могли быть неверными из-за ручного ввода или несовместимого источника данных.
  • Масштабирование признаков. Алгоритмы, такие как KNN, SVM, предпочитают равномерное распределение в наборе данных, поскольку они используют расстояние или сходство между наборами данных.

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

Предпосылки

Мы используем следующие библиотеки, чтобы упростить наш процесс.

Панды:

  • Чтобы установить, запустите это на консоли Python:
import numpy as np import pandas as pd

Нумпи:

  • Чтобы установить, запустите это на консоли Python:
import numpy as np import pandas as pd

Простой Google может решить проблему, если у вас возникнут проблемы с установкой этих пакетов.

Этапы предварительной обработки

Сначала мы должны импортировать наши необходимые пакеты

import numpy as np import pandas as pd

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

Получение списка отсутствующих значений

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

def get_missing_valued_columns_list(dataset): 
   return dataset.columns[dataset,isnull().any()]

Это дает список столбцов, в которых отсутствуют значения.

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

Получение списка столбцов с отсутствующим количеством

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

def get_missing_valued_column_details(dataset):
   sum_of_missing_values = dataset.isnull().sum(axis=0) 
   return sum_of_missing_values[sum_of_missing_values > 0]

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

Получить ярлыки, для которых недостаточно данных

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

def get_low_variance_columns(dataset): 
   from sklearn.feature_selection import VarianceThreshold 
   columns = dataset.iloc[:,:-1].columns 
   selector = VarianceThreshold(.8 * (1-.8))
   selector.fit(dataset.iloc[:,:-1]) 
   labels = [columns[x] for x in selector.get_support(indices=True) if x] 
   return labels

Здесь мы выбираем все столбцы, кроме последнего, поскольку последний столбец обычно является столбцом вывода или прогноза. Затем мы используем функцию VarianceThreshold, которая является частью библиотеки обучения scikit, чтобы указать пороговое значение (.8) для получения списка столбцов.

Я планирую добавить другие часто используемые функции в свой следующий пост в блоге. Прокомментируйте свои взгляды.

Первоначально опубликовано на nareshr8.github.io 21 мая 2018 г.