Наука о данных

Концепции предварительной обработки данных с помощью Python

Надежный метод подготовки данных для оценщиков машинного обучения

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

Темы для обсуждения:

  1. Стандартизация
  2. Масштабирование с разреженными данными и выбросами
  3. Нормализация
  4. Категориальное кодирование
  5. Вменение

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

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

Формула стандартизации показана ниже:

z = (feature_value - среднее) / стандартное отклонение

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

В библиотеке sklearn есть метод стандартизации набора данных с помощью StandardScaler в классе предварительной обработки.

Мы используем команду import, чтобы использовать эту функцию в Python.

#Before modeling our estimator we should always some preprocessing scaling.
# Feature Scaling
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)


Масштабирование с использованием разреженных данных и выбросов

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

Масштабирование данных - это еще один способ сделать значения признаков в некотором диапазоне от «0» до «1». Это можно сделать двумя способами: MinMaxScaler и MaxAbsScaler.

Пример с питоном

import numpy as np
X_train = np.array([[ 1., 0.,  2.], [ 2.,  0.,  -1.], [ 0.,  2.,
                                                             -1.]])
from sklearn.preprocessing import MinMaxScaler
min_max_scaler = MinMaxScaler()
X_train_minmax = min_max_scaler.fit_transform(X_train)
print(X_train_minmax)
#output:
array([[0.5, 0. , 1. ],
       [1. , 0. , 0. ],
       [0. , 1. , 0. ]])

Как мы видим, входное значение находится в диапазоне от «0» до «1».

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

Масштабирование с использованием выбросов:

Когда необработанные данные имеют много выбросов, масштабирование со средним значением и дисперсией не подходит для этих данных. Итак, мы должны использовать более надежный метод, такой как межквартильный метод (IQR), потому что на выбросы влияют среднее значение и дисперсия. Диапазон IQR составляет от 25% до 75%, в котором медиана удаляется и масштабируется квантильный диапазон.

RobustScaler принимает некоторые параметры для масштабирования.

  • Первый параметр - это with_centering, который центрирует данные перед масштабированием, если он истинен.
  • Второй параметр - with_scaling, если он истинен, то он масштабирует данные в диапазоне квантилей.

Пример с питоном

from sklearn.preprocessing import RobustScaler
X = [[ 1., 0.,  2.], [ 2.,  0.,  -1.], [ 0.,  2., -1.]]
transformer = RobustScaler().fit(X)
transformer.transform(X)
#output:
array([[ 0.,  0.,  2.],
       [ 1.,  0.,  0.],
       [-1.,  2.,  0.]])

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

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

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

Происходит два типа нормализации, как показано ниже:

  • Нормализовать: масштабирование входных векторов до единичной нормы. Параметр norm используется для нормализации всех ненулевых значений. Он принимает три аргумента: L1, L2 и max, где L2 - норма по умолчанию.
  • Нормализатор: он также выполняет ту же операцию, но в этом процессе метод подгонки является необязательным.

Пример с Python:

from sklearn.preprocessing import normalize
X = [[ 1., 0., 2.], [ 2., 0., -1.], [ 0., 2., -1.]]
X_normalized = normalize(X, norm=’l2')
print(X_normalized)
#output:
array([[ 0.4472136 ,  0.        ,  0.89442719],
       [ 0.89442719,  0.        , -0.4472136 ],
       [ 0.        ,  0.89442719, -0.4472136 ]])

Пример с нормализатором:

from sklearn.preprocessing import Normalizer
X = [[ 1., 0., 2.], [ 2., 0., -1.], [ 0., 2., -1.]]
normalizer = preprocessing.Normalizer().fit(X)
normalizer.transform(X)
#output:
array([[ 0.4472136 ,  0.        ,  0.89442719],
       [ 0.89442719,  0.        , -0.4472136 ],
       [ 0.        ,  0.89442719, -0.4472136 ]])

Нормализатор полезен в конвейере обработки данных вначале.

Когда мы используем разреженный ввод, важно преобразовать его, а не формат CSR, чтобы избежать множественных копий памяти. CSR сжат. Разреженные строки находятся в scipy.sparse.csr_matrix.



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

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

  • Получить макеты:. Он используется для получения нового столбца функций с 0 и 1, кодирующими категории, с помощью библиотеки панд.
  • Label Encoder: используется для кодирования двоичных категорий в числовые значения в библиотеке sklearn.
  • One Hot Encoder. Библиотека sklearn предоставляет еще одну функцию для преобразования класса категорий в новые числовые значения 0 и 1 с новыми столбцами функций.
  • Хеширование. Это более полезно, чем горячее кодирование в случае больших размеров. Он используется, когда в объекте используется высокая мощность.

Существует множество других методов кодирования, таких как среднее кодирование, кодирование Гельмерта, порядковое кодирование, кодирование отношения вероятностей и т. д.

Пример с Python:

df1=pd.get_dummies(df['State'],drop_first=True)

Вменение

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

Создание случайного фрейма данных.

# import the pandas library
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(4, 3), index=['a', 'c', 'e',
'h'],columns=['First', 'Second', 'Three'])
df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print (df)

Теперь заменяем на нулевое значение.

print ("NaN replaced with '0':")
print (df.fillna(0))

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

from sklearn.impute import SimpleImputer
imp = SimpleImputer(missing_values=np.nan, strategy='mean')

Sklearn предоставляет простой импьютер для нахождения значений NAN и заполнения их средним значением.

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



Заключение:

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

Надеюсь, статья вам понравилась. Свяжитесь со мной в моих LinkedIn и twitter.

Рекомендуемые статьи

  1. НЛП - от нуля до героя с Python

2. Структуры данных Python, типы данных и объекты

3. Python: от нуля до героя с примерами

4. Полностью объясненная классификация SVM с помощью Python

5. Полностью объясненная кластеризация K-средних с использованием Python

6. Полностью объясненная линейная регрессия с помощью Python

7. Полностью объясненная логистическая регрессия с помощью Python

8. Основы временных рядов с Python

9. NumPy: от нуля до героя с Python

10. Матрица неточностей в машинном обучении