Техники предобработки в Scikit-Learn

Machine LearningMachine LearningBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

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

Советы по использованию ВМ

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

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

Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/DataPreprocessingandFeatureEngineeringGroup(["Data Preprocessing and Feature Engineering"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/DataPreprocessingandFeatureEngineeringGroup -.-> sklearn/preprocessing("Preprocessing and Normalization") sklearn/DataPreprocessingandFeatureEngineeringGroup -.-> sklearn/impute("Impute") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/preprocessing -.-> lab-71130{{"Техники предобработки в Scikit-Learn"}} sklearn/impute -.-> lab-71130{{"Техники предобработки в Scikit-Learn"}} ml/sklearn -.-> lab-71130{{"Техники предобработки в Scikit-Learn"}} end

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

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

from sklearn.preprocessing import StandardScaler
import numpy as np

## Create a sample dataset
X = np.array([[1., -1., 2.],
              [2., 0., 0.],
              [0., 1., -1.]])

## Initialize the StandardScaler
scaler = StandardScaler()

## Fit the scaler on the training data
scaler.fit(X)

## Transform the training data
X_scaled = scaler.transform(X)

## Print the transformed data
print(X_scaled)

Масштабирование

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

from sklearn.preprocessing import MinMaxScaler, MaxAbsScaler
import numpy as np

## Create a sample dataset
X = np.array([[1., -1., 2.],
              [2., 0., 0.],
              [0., 1., -1.]])

## Initialize the MinMaxScaler
min_max_scaler = MinMaxScaler()

## Fit and transform the training data
X_minmax = min_max_scaler.fit_transform(X)

## Print the transformed data
print(X_minmax)

## Initialize the MaxAbsScaler
max_abs_scaler = MaxAbsScaler()

## Fit and transform the training data
X_maxabs = max_abs_scaler.fit_transform(X)

## Print the transformed data
print(X_maxabs)

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

Нормализация - это процесс масштабирования отдельных образцов так, чтобы они имели единичную норму. Она обычно используется, когда величина данных не имеет значения, и нас интересует только направление (или угол) данных. Мы можем использовать Normalizer из scikit-learn для выполнения нормализации.

from sklearn.preprocessing import Normalizer
import numpy as np

## Create a sample dataset
X = np.array([[1., -1., 2.],
              [2., 0., 0.],
              [0., 1., -1.]])

## Initialize the Normalizer
normalizer = Normalizer()

## Fit and transform the training data
X_normalized = normalizer.fit_transform(X)

## Print the transformed data
print(X_normalized)

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

Категориальные признаки необходимо закодировать в числовые значения, прежде чем их можно использовать в алгоритмах машинного обучения. Мы можем использовать OrdinalEncoder и OneHotEncoder из scikit-learn для кодирования категориальных признаков.

from sklearn.preprocessing import OrdinalEncoder, OneHotEncoder
import numpy as np

## Create a sample dataset
X = [['male', 'from US', 'uses Safari'],
     ['female', 'from Europe', 'uses Firefox']]

## Initialize the OrdinalEncoder
ordinal_encoder = OrdinalEncoder()

## Fit and transform the training data
X_encoded = ordinal_encoder.fit_transform(X)

## Print the transformed data
print(X_encoded)

## Initialize the OneHotEncoder
onehot_encoder = OneHotEncoder()

## Fit and transform the training data
X_onehot = onehot_encoder.fit_transform(X)

## Print the transformed data
print(X_onehot.toarray())

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

Пропущенные значения в наборе данных могут вызывать проблемы при использовании алгоритмов машинного обучения. Мы можем использовать методы, предоставляемые в модуле impute библиотеки scikit-learn, для обработки пропущенных значений. Здесь мы будем использовать SimpleImputer для замены пропущенных значений.

from sklearn.impute import SimpleImputer
import numpy as np

## Create a sample dataset with missing values
X = np.array([[1., 2., np.nan],
              [3., np.nan, 5.],
              [np.nan, 4., 6.]])

## Initialize the SimpleImputer
imputer = SimpleImputer()

## Fit and transform the training data
X_imputed = imputer.fit_transform(X)

## Print the transformed data
print(X_imputed)

Генерация полиномиальных признаков

Иногда полезно добавить сложность модели, учитывая нелинейные признаки входных данных. Мы можем использовать PolynomialFeatures из scikit-learn для генерации полиномиальных признаков.

from sklearn.preprocessing import PolynomialFeatures
import numpy as np

## Create a sample dataset
X = np.array([[0, 1],
              [2, 3],
              [4, 5]])

## Initialize the PolynomialFeatures
poly = PolynomialFeatures(2)

## Fit and transform the training data
X_poly = poly.fit_transform(X)

## Print the transformed data
print(X_poly)

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

В некоторых случаях мы можем захотеть преобразовать существующую функцию на Python в трансформер, чтобы помочь в очистке или обработке данных. Мы можем это сделать с использованием FunctionTransformer из scikit-learn.

from sklearn.preprocessing import FunctionTransformer
import numpy as np

## Create a custom function
def custom_function(X):
    return np.log1p(X)

## Initialize the FunctionTransformer
transformer = FunctionTransformer(custom_function)

## Create a sample dataset
X = np.array([[0, 1],
              [2, 3]])

## Transform the data using the custom function
X_transformed = transformer.transform(X)

## Print the transformed data
print

Резюме

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