Sklearn.preprocessing.StandardScaler: примеры (PYTHON)
sklearn.preprocessing.StandardScaler(copy: bool=True, with_mean: bool=True, with_std: bool=True): sklearn.preprocessing.StandardScalerОбщая информация о StandardScaler
Функция StandardScaler из модуля sklearn.preprocessing выполняет стандартизацию данных путем удаления среднего значения и масштабирования до единичной дисперсии. Этот метод часто применяется как этап предобработки данных для многих алгоритмов машинного обучения, особенно чувствительных к масштабу признаков, таких как линейные модели, методы на основе расстояний и нейронные сети.
Стандартизация преобразует данные так, чтобы они имели нулевое среднее и единичное стандартное отклонение. Вычисляется по формуле: z = (x - u) / s, где x - исходное значение, u - среднее значение признака, s - стандартное отклонение.
Параметры класса StandardScaler:
- copy (bool, по умолчанию True) - создает копию входных данных или работает с исходным массивом.
- with_mean (bool, по умолчанию True) - центрирование данных путем вычитания среднего значения.
- with_std (bool, по умолчанию True) - масштабирование данных до единичной дисперсии.
Основные методы и возвращаемые значения:
fit(X[, y])- вычисляет среднее и стандартное отклонение для последующего масштабирования.fit_transform(X[, y])- вычисляет параметры и сразу преобразует данные.transform(X)- применяет стандартизацию к новым данным.inverse_transform(X)- преобразует масштабированные данные обратно в исходный формат.get_feature_names_out([input_features])- возвращает имена выходных признаков.- Атрибуты:
mean_,var_,scale_,n_features_in_,feature_names_in_.
Базовые примеры использования
Простой пример стандартизации числового массива:
from sklearn.preprocessing import StandardScaler
import numpy as np
data = np.array([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]])
scaler = StandardScaler()
transformed = scaler.fit_transform(data)
print('Исходные данные:')
print(data)
print('\nСреднее значение:')
print(scaler.mean_)
print('\nМасштаб:')
print(scaler.scale_)
print('\nПреобразованные данные:')
print(transformed)Исходные данные: [[1. 2.] [3. 4.] [5. 6.]] Среднее значение: [3. 4.] Масштаб: [1.63299316 1.63299316] Преобразованные данные: [[-1.22474487 -1.22474487] [ 0. 0. ] [ 1.22474487 1.22474487]]
Пример с отключением центрирования:
scaler_no_mean = StandardScaler(with_mean=False)
data = [[1, 2], [3, 4], [5, 6]]
transformed = scaler_no_mean.fit_transform(data)
print('Без центрирования:')
print(transformed)Без центрирования: [[0.26726124 0.53452248] [0.80178373 1.06904497] [1.33630621 1.60356745]]
Обратное преобразование данных:
original = scaler.inverse_transform(transformed)
print('Восстановленные данные:')
print(original)Восстановленные данные: [[1. 2.] [3. 4.] [5. 6.]]
Альтернативные методы масштабирования в Python
Библиотека scikit-learn предлагает несколько альтернативных методов предобработки числовых данных:
- MinMaxScaler - масштабирует данные до заданного диапазона (по умолчанию [0, 1]). Подходит, когда важно сохранить нулевые значения или когда распределение не нормальное.
- RobustScaler - использует медиану и межквартильный размах, устойчив к выбросам. Применяется при наличии аномальных значений в данных.
- MaxAbsScaler - масштабирует данные по максимальному абсолютному значению, сохраняя разреженность данных. Работает в диапазоне [-1, 1].
- Normalizer - нормализует каждую строку данных отдельно до единичной нормы. Используется в текстовых данных или когда важен относительный вклад признаков.
Выбор метода зависит от распределения данных, наличия выбросов и требований алгоритма машинного обучения.
Реализации в других языках программирования
Аналоги стандартизации данных существуют в большинстве языков программирования:
JavaScript (использование библиотеки ml.js):
const { StandardScaler } = require('ml-preprocessing');
const scaler = new StandardScaler();
const data = [[1, 2], [3, 4], [5, 6]];
const transformed = scaler.fitTransform(data);
console.log(transformed);[[-1.2247, -1.2247], [0, 0], [1.2247, 1.2247]]
R (встроенные функции):
data <- matrix(c(1, 2, 3, 4, 5, 6), ncol=2, byrow=TRUE)
scaled_data <- scale(data)
print(scaled_data)[,1] [,2] [1,] -1.2247 -1.2247 [2,] 0.0000 0.0000 [3,] 1.2247 1.2247
Java (библиотека Smile):
import smile.preprocessing.Standardizer;
double[][] data = {{1, 2}, {3, 4}, {5, 6}};
Standardizer scaler = Standardizer.fit(data);
double[][] transformed = scaler.apply(data);Основные отличия от реализации в Python: различные названия методов, поддержка типов данных, возможность потоковой обработки и интеграция с экосистемой языка.
Типичные ошибки применения
1. Попытка преобразования данных с разным количеством признаков:
scaler = StandardScaler()
train_data = [[1, 2, 3], [4, 5, 6]]
scaler.fit(train_data)
test_data = [[7, 8]] # Только 2 признака
try:
scaler.transform(test_data)
except ValueError as e:
print(f'Ошибка: {e}')Ошибка: X has 2 features, but StandardScaler is expecting 3 features as input.
2. Преобразование разреженных матриц без указания параметра with_mean:
from scipy import sparse
scaler = StandardScaler()
sparse_data = sparse.csr_matrix([[1, 0, 3], [0, 5, 0]])
try:
scaler.fit(sparse_data)
except TypeError as e:
print(f'Ошибка: {e}')Ошибка: Cannot center sparse matrices: pass `with_mean=False` instead.
3. Использование масштабировщика на данных с константными признаками:
data = [[1, 5], [1, 6], [1, 7]] # Первый признак постоянный
scaler = StandardScaler()
transformed = scaler.fit_transform(data)
print('Масштаб для постоянного признака:', scaler.scale_)Масштаб для постоянного признака: [0. 1.]
История изменений функции
В версии scikit-learn 1.0 были добавлены следующие изменения:
- Появилась поддержка имен признаков через параметр
feature_names_in_. - Добавлен метод
get_feature_names_outдля согласованного получения имен преобразованных признаков. - Улучшена обработка разреженных матриц и предупреждения о константных признаках.
В версии 0.24 были улучшены производительность и стабильность вычислений для больших наборов данных. Добавлена более точная обработка числовых погрешностей.
Расширенные сценарии использования
Стандартизация в конвейере обработки данных:
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=100, n_features=5, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
pipeline = Pipeline([
('scaler', StandardScaler()),
('classifier', LogisticRegression())
])
pipeline.fit(X_train, y_train)
score = pipeline.score(X_test, y_test)
print(f'Точность модели: {score:.3f}')Точность модели: 0.900
Обработка отдельных столбцов с ColumnTransformer:
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
import pandas as pd
df = pd.DataFrame({
'число1': [1, 2, 3, 4, 5],
'число2': [10, 20, 30, 40, 50],
'категория': ['A', 'B', 'A', 'C', 'B']
})
preprocessor = ColumnTransformer([
('num', StandardScaler(), ['число1', 'число2']),
('cat', OneHotEncoder(), ['категория'])
])
transformed = preprocessor.fit_transform(df)
print(f'Размерность после преобразования: {transformed.shape}')Размерность после преобразования: (5, 6)
Инкрементальное обучение с partial_fit:
scaler = StandardScaler()
chunks = [np.array([[1, 2], [3, 4]]), np.array([[5, 6], [7, 8]])]
for chunk in chunks:
scaler.partial_fit(chunk)
print('Среднее после обработки чанков:', scaler.mean_)
print('Масштаб после обработки чанков:', scaler.scale_)Среднее после обработки чанков: [4. 5.] Масштаб после обработки чанков: [2.23606798 2.23606798]
Работа с разреженными данными:
from scipy import sparse
sparse_matrix = sparse.csr_matrix([[0, 1, 0], [2, 0, 3], [0, 0, 4]])
scaler = StandardScaler(with_mean=False)
scaled_sparse = scaler.fit_transform(sparse_matrix)
print('Разреженная матрица после масштабирования:')
print(scaled_sparse.toarray())Разреженная матрица после масштабирования: [[0. 1.41421356 0. ] [2.82842712 0. 2.12132034] [0. 0. 2.82842712]]
питон sklearn.preprocessing.StandardScaler function comments
- питон sklearn.preprocessing.StandardScaler - аргументы и возвращаемое значение
- Функция python sklearn.preprocessing.StandardScaler - описание
- sklearn.preprocessing.StandardScaler - примеры
- sklearn.preprocessing.StandardScaler - похожие методы на python
- sklearn.preprocessing.StandardScaler на php, c#, sql, java
- sklearn.preprocessing.StandardScaler изменения python
- Примеры sklearn.preprocessing.StandardScaler на питон