ULTIMATE DATA SCIENCE GUIDE

Руководство по предварительной обработке данных для каждого специалиста по данным

Понять концепции предварительной обработки данных и реализовать их с помощью библиотеки scikit learn.

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

Что такое предварительная обработка данных

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

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

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

Процесс предварительной обработки данных состоит из нескольких этапов:

  • Очистка данных: используемые нами данные могут иметь некоторые недостающие точки (например, строки или столбцы, которые не содержат никаких значений) или содержать зашумленные данные (нерелевантные данные, которые трудно интерпретировать машиной). Чтобы решить вышеуказанные проблемы, мы можем удалить пустые строки и столбцы или заполнить их некоторыми другими значениями, и мы можем использовать такие методы, как регрессия и кластеризация для зашумленных данных.
  • Преобразование данных: это процесс преобразования необработанных данных в готовый формат, подходящий для модели. Он может включать такие шаги, как категориальное кодирование, масштабирование, нормализация, стандартизация и т. Д.
  • Сокращение данных: это помогает уменьшить размер данных, над которыми мы работаем (для облегчения анализа), при сохранении целостности исходных данных.

Библиотека Scikit-learn для предварительной обработки данных

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

Мы можем использовать следующий код для импорта библиотеки в рабочую область:

import sklearn

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

from sklearn import preprocessing

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

Итак, теперь давайте приступим к этим функциям!

Стандартизация

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

Рассмотрим следующий пример:

from sklearn import preprocessing
import numpy as np
x = np.array([[1, 2, 3],
[ 4,  5,  6],
[ 7,  8, 9]])
y_scaled = preprocessing.scale(x)
print(y_scaled)

Здесь у нас есть входной массив размером 3x3 со значениями от одного до девяти. Используя scaleфункцию, доступную в preprocessing, мы можем быстро масштабировать наши данные.

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

Если мы хотим масштабировать наши функции в заданном диапазоне, мы можем использовать MinMaxScaler (с использованием параметра feature_range=(min,max)) или MinAbsScaler (разница в том, что максимальное абсолютное значение каждой функции масштабируется до размера единицы в MinAbsScaler)

from sklearn.preprocessing import MinMaxScaler
import numpy as np
x = MinMaxScaler(feature_range=(0,8))
y = np.array([[1, 2, 3],
[ 4,  -5,  -6],
[ 7,  8, 9]])
scale = x.fit_transform(y)
scale

Здесь значения массива размером 3x3 масштабируются в заданном диапазоне (0,8), и мы использовали функцию .fit_transform(), которая поможет нам позже применить то же преобразование к другому набору данных.

Нормализация

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

from sklearn import preprocessing
import numpy as np
X = [[1,2,3],
[4,-5,-6],
[7,8,9]]
y = preprocessing.normalize(X)
y

Этот модуль также предоставляет нам альтернативу для Transformer API, используя функцию Normalizer, которая реализует ту же операцию.

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

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

В этом модуле доступны две функции, с помощью которых мы можем кодировать наши категориальные особенности:

  • OrdinalEncoder: это преобразование категориальных характеристик в целочисленные значения, чтобы функция преобразовывала каждую категориальную характеристику в одну новую характеристику целых чисел (от 0 до n_categories - 1).
import sklearn.preprocessing
import numpy as np
enc = preprocessing.OrdinalEncoder()
X = [['a','b','c','d'], ['e', 'f', 'g', 'h'],['i','j','k','l']]
enc.fit(X)
enc.transform([['a', 'f', 'g','l']])

Здесь три категории закодированы как 0,1,2, а результат вывода для вышеуказанного ввода:

  • OneHotEncode: эта функция кодировщика преобразует каждую категориальную функцию с n_categories возможными значениями в n_categories двоичных функций, одна из которых равна 1, а все остальные 0. Для лучшего понимания проверьте следующий пример.
import sklearn.preprocessing
import numpy as np
enc = preprocessing.OneHotEncoder()
X = [['a','b','c','d'], ['e', 'f', 'g', 'h'],['i','j','k','l']]
enc.fit(X)
enc.transform([['a', 'f', 'g','l']]).toarray().reshape(4,3)

Дискретность

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

import sklearn.preprocessing 
import numpy as np
X = np.array([[ 1,2,3],
              [-4,-5,6],
              [7,8,9]])
dis = preprocessing.KBinsDiscretizer(n_bins=[3, 2, 2], encode='ordinal')
dis.fit_transform(X)

Используя KBinsDiscretizer(), функция разбивает объекты на k бункеров. По умолчанию на выходе выполняется горячая кодировка, которую мы можем изменить с помощью параметра encode.

Вменение пропущенных значений

Этот процесс используется для обработки недостающих значений в данных (NaN, пробелы и т. Д.) Путем присвоения им значения (импутация - на основе известной части набора данных), чтобы данные могли обрабатываться моделью. Давайте разберемся с этим на примере:

from sklearn.impute import SimpleImputer
import numpy as np
impute = SimpleImputer(missing_values=np.nan, strategy='mean')
X = [[np.nan, 1,2], [3,4, np.nan], [5, np.nan, 6]]
impute.fit_transform(X)

Здесь мы использовали функцию SimpleImputer() для подстановки пропущенных значений. Параметры, используемые в этой функции: missing_values, чтобы указать пропущенные значения, которые должны быть вменены, strategy, чтобы указать, как мы хотим вменять значение, как в приведенном выше примере мы использовали mean, это означает, что отсутствующие значения будут заменены средним значений столбца. Мы можем использовать другие параметры для strategy, такие как медиана, режим, most_frequent (в зависимости от частоты появления определенного значения в столбце) или constant (постоянное значение).

Создание полиномиальных признаков

Чтобы добиться большей точности результатов нашей модели машинного обучения, иногда полезно добавить в модель сложность (добавив нелинейность). Мы можем просто реализовать это с помощью функции PolynomialFeatures().

import numpy as np
from sklearn.preprocessing import PolynomialFeatures
x = np.array([[1,2],
              [3,4]])
nonl = PolynomialFeatures(2)
nonl.fit_transform(x)

В приведенном выше примере мы указали степень нелинейной модели, требуемую для 2 в функции PolynomialFeatures(). Значения характеристик входного массива преобразуются из (X1, X2) в (1, X1, X2, X1², X1 * X2, X2²).

Трансформаторы на заказ

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

import sklearn.preprocessing 
import numpy as np
transformer = preprocessing.FunctionTransformer(np.log1p, validate=True)
X = np.array([[1,2,3],
              [4,5,6],
              [7,8,9]])
transformer.transform(X)

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

Заключение

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

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

Если у вас есть какие-либо вопросы или комментарии, оставьте их в разделе комментариев.

Ознакомьтесь с полным руководством по визуализации данных и основными функциями NumPy:





Первоначально опубликовано на: www.patataeater.blogspot.com

Resources:
https://scikit-learn.org/stable/modules/preprocessing.html#