Введение
В этом лабораторном занятии мы изучим методы предварительной обработки данных, доступные в scikit-learn. Предварительная обработка является важным этапом в любом процессе машинного обучения, так как помогает преобразовать исходные данные в формат, подходящий для алгоритма обучения. Мы рассмотрим различные методы предварительной обработки, такие как стандартизация, масштабирование, нормализация, кодирование категориальных признаков, заполнение пропущенных значений, генерация полиномиальных признаков и создание пользовательских трансформеров.
Советы по использованию ВМ
После запуска ВМ перейдите в левый верхний угол и переключитесь на вкладку Notebook, чтобы приступить к практике с использованием Jupyter Notebook.
Иногда может потребоваться подождать несколько секунд, пока Jupyter Notebook полностью загрузится. Проверка операций не может быть автоматизирована из-за ограничений Jupyter Notebook.
Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Стандартизация
Стандартизация является распространенным этапом предварительной обработки для многих алгоритмов машинного обучения. Она преобразует признаки так, чтобы они имели нулевое среднее значение и единичную дисперсию. Мы можем использовать 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, чтобы улучшить свои навыки.