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

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

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

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

Здесь мы будем использовать демонстрационный набор данных для предварительной обработки данных, а для практики его можно скачать отсюда, https://www.superdatascience.com/pages/machine-learning. Для решения реальных задач мы можем загружать наборы данных онлайн из различных источников, таких как https://www.kaggle.com/uciml/datasets, https://archive.ics.uci.edu/ml/index.php. ", и т. д.

Он включает в себя следующие шаги:

18M

407

Как найти N-ю самую высокую зарплату в SQL

  • Получение набора данных
  • Импорт библиотек
  • Импорт наборов данных
  • Поиск недостающих данных
  • Кодирование категориальных данных
  • Разделение набора данных на обучающий и тестовый наборы
  • Масштабирование функций

2) Импорт библиотек

Чтобы выполнить предварительную обработку данных с помощью Python, нам нужно импортировать некоторые предопределенные библиотеки Python. Эти библиотеки используются для выполнения определенных заданий. Есть три конкретные библиотеки, которые мы будем использовать для предварительной обработки данных:

NumPy: библиотека Numpy Python используется для включения в код математических операций любого типа. Это основной пакет для научных вычислений в Python. Он также поддерживает добавление больших многомерных массивов и матриц. Итак, в Python мы можем импортировать его как:

  1. импортировать NumPy как nm

Matplotlib: вторая библиотека — matplotlib, представляет собой библиотеку двухмерных графиков Python, и с этой библиотекой нам нужно импортировать подбиблиотеку pyplot. Эта библиотека используется для построения любого типа диаграммы в Python для кода. Он будет импортирован, как показано ниже:

  1. импортировать matplotlib.pyplot как mpt

Pandas. Последняя библиотека — это библиотека Pandas, которая является одной из самых известных библиотек Python и используется для импорта наборов данных и управления ими. Это библиотека для обработки и анализа данных с открытым исходным кодом. Он будет импортирован, как показано ниже:

Здесь мы использовали pd как короткое имя для этой библиотеки. Рассмотрим изображение ниже:

3) Импорт наборов данных

Теперь нам нужно импортировать наборы данных, которые мы собрали для нашего проекта машинного обучения. Но перед импортом набора данных нам нужно установить текущий каталог в качестве рабочего каталога. Чтобы установить рабочий каталог в Spyder IDE, нам необходимо выполнить следующие шаги:

  1. Сохраните файл Python в каталоге, содержащем набор данных.
  2. Перейдите к опции File Explorer в Spyder IDE и выберите нужный каталог.
  3. Нажмите на кнопку F5 или запустите опцию для выполнения файла.

Примечание. Мы можем установить любой каталог в качестве рабочего каталога, но он должен содержать необходимый набор данных.

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

функция read_csv():

Теперь, чтобы импортировать набор данных, мы будем использовать функцию read_csv() библиотеки pandas, которая используется для чтения CSV-файла и выполнения над ним различных операций. Используя эту функцию, мы можем читать файл CSV локально, а также через URL-адрес.

Мы можем использовать функцию read_csv, как показано ниже:

  1. data_set= pd.read_csv('Набор данных.csv')

Здесь data_set — это имя переменной для хранения нашего набора данных, а внутри функции мы передали имя нашего набора данных. Как только мы выполним указанную выше строку кода, он успешно импортирует набор данных в наш код. Мы также можем проверить импортированный набор данных, щелкнув раздел обозреватель переменных, а затем дважды щелкнув набор_данных. Рассмотрим изображение ниже:

Извлечение зависимых и независимых переменных:

В машинном обучении важно различать матрицу признаков (независимых переменных) и зависимых переменных из набора данных. В нашем наборе данных есть три независимые переменные: Страна, Возраст и Зарплата, а одна — зависимая переменная — Куплено.

Извлечение независимой переменной:

Чтобы извлечь независимую переменную, мы будем использовать метод iloc[ ] библиотеки Pandas. Он используется для извлечения необходимых строк и столбцов из набора данных.

  1. x= data_set.iloc[:,:-1].значения

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

Извлечение зависимой переменной:

Чтобы извлечь зависимые переменные, мы снова будем использовать метод Pandas .iloc[].

  1. y= набор_данных.iloc[:,3].значения

Здесь мы взяли все строки только с последним столбцом. Это даст массив зависимых переменных.

4) Обработка отсутствующих данных:

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

Способы обработки отсутствующих данных:

В основном есть два способа обработки отсутствующих данных:

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

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

Для обработки пропущенных значений мы будем использовать в нашем коде библиотеку Scikit-learn, которая содержит различные библиотеки для построения моделей машинного обучения. Здесь мы будем использовать класс Imputer библиотеки sklearn.preprocessing. Ниже приведен код для него:

# обработка отсутствующих данных (замена отсутствующих данных средним значением)

  1. из sklearn.preprocessing import Imputer
  2. imputer = Imputer (missing_values ​​= 'NaN', стратегия = 'среднее', ось = 0)

# Подгонка объекта импутера к независимым переменным x.

  1. импутер = импутер.подгонка (х[:, 1:3])

# Замена отсутствующих данных рассчитанным средним значением

  1. х[:, 1:3]= импьютер.преобразование(х[:, 1:3])

5) Кодирование категориальных данных:

Категориальные данные — это данные, которые имеют некоторые категории, например, в нашем наборе данных; есть две категориальные переменные: Страна и Куплено.

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

Для переменной страны:

Во-первых, мы преобразуем переменные страны в числовые данные. Поэтому для этого мы будем использовать класс LabelEncoder() из библиотеки preprocessing.

#категориальные данные

#для переменной страны

из sklearn.preprocessing импортировать LabelEncoder

label_encoder_x= LabelEncoder()

х [:, 0] = label_encoder_x.fit_transform (х [:, 0])

Пояснение:

В приведенном выше коде мы импортировали класс LabelEncoder из библиотеки sklearn. Этот класс успешно закодировал переменные в цифры.

Но в нашем случае есть три переменные страны, и, как мы видим в приведенном выше выводе, эти переменные закодированы в 0, 1 и 2. По этим значениям модель машинного обучения может предположить, что существует некоторая корреляция между этими значениями. переменные, которые будут давать неверный результат. Поэтому, чтобы устранить эту проблему, мы будем использовать фиктивную кодировку.

Фиктивные переменные:

Фиктивные переменные — это те переменные, которые имеют значения 0 или 1. Значение 1 указывает на присутствие этой переменной в определенном столбце, а остальные переменные становятся равными 0. При фиктивном кодировании у нас будет количество столбцов, равное количеству категорий. .

В нашем наборе данных у нас есть 3 категории, поэтому он создаст три столбца со значениями 0 и 1. Для фиктивного кодирования мы будем использовать класс OneHotEncoder библиотеки предварительной обработки.

#для переменной страны

из sklearn.preprocessing импортировать LabelEncoder, OneHotEncoder

label_encoder_x= LabelEncoder()

х [:, 0] = label_encoder_x.fit_transform (х [:, 0])

#Кодирование фиктивных переменных

onehot_encoder = OneHotEncoder (categorical_features = [0])

х = onehot_encoder.fit_transform(x).toarray()

Как видно из приведенного выше вывода, все переменные закодированы числами 0 и 1 и разделены на три столбца.

Это можно увидеть более четко в разделе обозревателя переменных, нажав на опцию x как:

или приобретенная переменная:

  1. labelencoder_y= LabelEncoder()
  2. y = labelencoder_y.fit_transform (y)

Для второй категориальной переменной мы будем использовать только объект labelencoder класса LableEncoder. Здесь мы не используем класс OneHotEncoder, потому что купленная переменная имеет только две категории да или нет, и они автоматически кодируются в 0 и 1.

Вывод:

Выход[17]: массив([0, 1, 0, 0, 1, 1, 0, 1, 0, 1])

6) Разделение набора данных на обучающий набор и тестовый набор

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

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

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

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

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

Для разделения набора данных мы будем использовать следующие строки кода:

  1. из sklearn.model_selection импорта train_test_split
  2. x_train, x_test, y_train, y_test= train_test_split(x, y, test_size= 0,2, random_state=0)

Пояснение:

  • В приведенном выше коде первая строка используется для разделения массивов набора данных на случайные поезда и тестовые подмножества.
  • Во второй строке мы использовали четыре переменные для нашего вывода, которые
  • x_train: функции для обучающих данных.
  • x_test: функции для тестирования данных.
  • y_train: зависимые переменные для обучающих данных.
  • y_test: независимая переменная для проверки данных.
  • В функцию train_test_split() мы передали четыре параметра, первые два из которых предназначены для массивов данных, а test_size — для указания размера набора тестов. test_size может быть 0,5, 0,3 или 0,2, что говорит о коэффициенте деления наборов для обучения и тестирования.
  • Последний параметр random_state используется для установки начального числа для генератора случайных чисел, чтобы вы всегда получали один и тот же результат, и наиболее часто используемое значение для этого — 42.

7) Масштабирование функций

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

Как мы видим, значения столбцов возраста и зарплаты не совпадают. Модель машинного обучения основана на евклидовом расстоянии, и если мы не масштабируем переменную, это вызовет некоторые проблемы в нашей модели машинного обучения.

]

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

Существует два способа масштабирования функций в машинном обучении:

Здесь мы будем использовать метод стандартизации для нашего набора данных.

Для масштабирования функций мы импортируем класс StandardScaler библиотеки sklearn.preprocessing как:

из sklearn.preprocessing импортировать StandardScaler

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

  1. st_x= Стандартный масштаб()
  2. x_train = st_x.fit_transform (x_train)

Для тестового набора данных мы будем напрямую применять функцию transform() вместо fit_transform(), потому что это уже сделано в тренировочном наборе.

  1. x_test = st_x.transform (x_test)

Вывод:

Выполнив приведенные выше строки кода, мы получим масштабированные значения для x_train и x_test как:

Объединение всех шагов:

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

# импорт библиотек

  1. импортировать numpy как nm
  2. импортировать matplotlib.pyplot как mtp
  3. импортировать панд как pd

#импорт наборов данных

  1. data_set= pd.read_csv('data.csv')

#Извлечение независимой переменной

  1. x= data_set.iloc[:, :-1].значения

#Извлечение зависимой переменной

  1. y= data_set.iloc[:, 3].значения

# обработка отсутствующих данных (замена отсутствующих данных средним значением)

  1. из sklearn.preprocessing import Imputer
  2. imputer = Imputer (missing_values ​​= 'NaN', стратегия = 'среднее', ось = 0)

# Подгонка объекта импутера к независимым переменным x.

  1. imputerimputer= imputer.fit(x[:, 1:3])

# Замена отсутствующих данных рассчитанным средним значением

  1. х[:, 1:3]= импьютер.преобразование(х[:, 1:3])

#для переменной страны

  1. из sklearn.preprocessing импортировать LabelEncoder, OneHotEncoder
  2. label_encoder_x= LabelEncoder()
  3. х [:, 0] = label_encoder_x.fit_transform (х [:, 0])

#Кодирование фиктивных переменных

  1. onehot_encoder = OneHotEncoder (categorical_features = [0])
  2. х = onehot_encoder.fit_transform(x).toarray()

#кодировка купленной переменной

  1. labelencoder_y= LabelEncoder()
  2. y = labelencoder_y.fit_transform (y)

# Разделение набора данных на обучающий и тестовый наборы.

  1. из sklearn.model_selection импорта train_test_split
  2. x_train, x_test, y_train, y_test= train_test_split(x, y, test_size= 0,2, random_state=0)

#Feature Масштабирование наборов данных

  1. из sklearn.preprocessing импортировать StandardScaler
  2. st_x= Стандартный масштаб()
  3. x_train = st_x.fit_transform (x_train)
  4. x_test = st_x.transform (x_test)

Спасибо

Удачного обучения!