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

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

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

  1. Импортировать библиотеки
  2. Импортировать набор данных
  3. Уход за недостающими данными
  4. Кодирование категориальных данных
  5. Разделение данных на тестовые данные и обучающие данные
  6. Масштабирование функций

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

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

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

  1. Pandas: Pandas - отличная библиотека Python с открытым исходным кодом, которая помогает в манипулировании данными. Он используется для импорта наборов данных и управления ими.
  2. Numpy: это фундаментальный пакет для научных вычислений с использованием Python. Он используется для выполнения математических операций с данными.
  3. Scikit-Learn: Scikit learn - это пакет, который используется в качестве основного пакета для создания всех видов моделей машинного обучения. Мы используем пакет предварительной обработки для выполнения задач предварительной обработки данных.

Код для импорта библиотек.

import numpy as np 
import pandas as pd

Сначала сохраните файл кода и набор данных в одном каталоге. Используя pandas, мы можем импортировать набор данных с помощью функции «read_csv ()».

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

ds = pd.read_csv("Data.csv")

В приведенном выше коде «ds» обозначает имя переменной, в которой мы храним набор данных. Из импортированного набора данных мы должны разделить объекты как X и подписать как y, используя функцию iloc [] 'из pandas. Перед тем как это сделать, мы должны проверить набор данных и найти столбцы, принадлежащие компонентам и меткам, обычно метки являются последним столбцом, а функции - оставшимися столбцами. Их можно разделить с помощью кода, показанного ниже.

X = ds.iloc[:, :-1].values #Features 
y = ds.iloc[:, -1].values #Labels

iloc [:,: -1] выберет все строки и все столбцы, кроме последнего столбца.

iloc [:, -1] выберет все строки и только последний столбец.

Уход за недостающими данными

Эту проблему можно решить двумя способами:

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

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

print(ds.isnull().sum())

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

from sklearn.impute import SimpleImputer

Создайте объект для класса Imputer и присвойте ему имя imputer. Класс imputer принимает некоторые параметры, введите значения в соответствии с вашими требованиями. Измененные данные должны соответствовать набору данных с использованием функции соответствия импутерного класса.

si = SimpleImputer(missing_values=np.nan, strategy='mean') si.fit(X[:,1:3])

X [:, 1: 3] выбирает все строки и столбцы 2-й и 3-й, поскольку индексирование начинается с 0, а 3 не будет включаться.

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

X[:, 1:3] = si.transform(X[:, 1:3])

Мы можем сравнить значения X из этого изображения с первым изображением значений X.

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

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

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

from sklearn.compose import ColumnTransformer 
from sklearn.preprocessing import OneHotEncoder 
ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [0])], remainder='passthrough') 
X = np.array(ct.fit_transform(X))

Как показано на выходном изображении, названия стран преобразуются в двоичные числа, они известны как фиктивные значения. В этом примере мы использовали класс научного обучения One Hot Encoder. Есть также другой способ сделать это с помощью Label Encoder, но у Label Encoder есть недостаток: он продолжает присваивать номера всем категориям, не останавливаясь на 0 и 1, что усложняет задачу. Один Hot Encoder разбивает все категории на отдельные столбцы и присваивает им 0 и 1.

Пример кодировщика этикеток

from sklearn.preprocessing import LabelEncoder 
le = LabelEncoder() 
y = le.fit_transform(y)

Мы видим, что метки True и False преобразуются в 0 и 1.

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

Модель машинного обучения требует 2 отдельных фрейма данных для завершения процесса обучения и прогнозирования. Набор данных разделен на 2 части: данные тестирования и данные обучения. Обычно процент разделения составляет 80% для обучения и 20% для тестирования. Данные обучения помогают машине изучать функции и их метки. Тестовые данные похожи на экзамен для модели, при этом модель обучающих знаний предсказывает имена меток с данными ей функциями. Мы можем рассчитать точность модели, посмотрев на результаты тестовых данных. Мы используем класс разделения тестового поезда библиотеки предварительной обработки sckit для разделения данных.

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 1)

random_state используется для получения одинаковых случайных значений каждый раз.

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

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

Масштабирование функций можно выполнить двумя способами:

Для масштабирования функций мы используем класс Standard Scaler из библиотеки предварительной обработки sckit.

from sklearn.preprocessing import StandardScaler 
sc = StandardScaler() 
X_train[:, 3:] = sc.fit_transform(X_train[:, 3:]) 
X_test[:, 3:] = sc.transform(X_test[:, 3:])

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

Первоначально опубликовано на http://thelastbyteblog.wordpress.com 15 июня 2020 г.