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

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

  1. Масштабирование максимального объема пресса

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

from sklearn.preprocessing import MaxAbsScaler
accel_transformed = MaxAbsScaler().fit(accel)
transform_data = accel_transformed.transform(accel)
print("Mean of original data = {}".format(accel.mean()))
print("Standard deviation of original data = {}".format(accel.std()))
print("Max of original data = {}".format(accel.max()))
print("\n")
print("Mean of transformed data = {}".format(transform_data.mean()))
print("Standard deviation of transformed data = {}".format(transform_data.std()))
print("Max of transformed data = {}".format(transform_data.max()))
Mean of original data = 15.568090452261307
Standard deviation of original data = 2.7542223175940177
Max of original data = 24.8


Mean of transformed data = 0.6277455827524719
Standard deviation of transformed data = 0.1110573515158878
Max of transformed data = 1.0

2. Минимальное максимальное масштабирование

Масштабирование Min Max или используется для масштабирования значений таким образом, чтобы они находились в диапазоне от 0 до 1 после преобразования.

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
accel_transformed = scaler.fit(accel)
transform_data = accel_transformed.transform(accel)
print("Mean of original data = {}".format(accel.mean()))
print("Standard deviation of original data = {}".format(accel.std()))
print("Max of original data = {}".format(accel.max()))
print("\n")
print("Mean of transformed data = {}".format(transform_data.mean()))
print("Standard deviation of transformed data = {}".format(transform_data.std()))
print("Max of transformed data = {}".format(transform_data.max()))
Mean of original data = 15.568090452261307
Standard deviation of original data = 2.7542223175940177
Max of original data = 24.8


Mean of transformed data = 0.45048157453936344
Standard deviation of transformed data = 0.1639418046186915
Max of transformed data = 0.9999999999999999

3. Нормализатор

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

from sklearn.preprocessing import Normalizer
transformer = Normalizer(norm='l1').fit(accel)
transform_data = transformer.transform(accel)
print("Mean of original data = {}".format(accel.mean()))
print("Standard deviation of original data = {}".format(accel.std()))
print("Max of original data = {}".format(accel.max()))
print("\n")
print("Mean of transformed data = {}".format(transform_data.mean()))
print("Standard deviation of transformed data = {}".format(transform_data.std()))
print("Max of transformed data = {}".format(transform_data.max()))
Mean of original data = 15.568090452261307
Standard deviation of original data = 2.7542223175940177
Max of original data = 24.8


Mean of transformed data = 1.0
Standard deviation of transformed data = 0.0
Max of transformed data = 1.0

4. Силовой трансформатор (Йео-Джонсон)

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

from sklearn.preprocessing import PowerTransformer
pt = PowerTransformer('yeo-johnson')
transform = pt.fit(accel)
transform_data = pt.transform(accel)
print("Mean of original data = {}".format(accel.mean()))
print("Standard deviation of original data = {}".format(accel.std()))
print("Max of original data = {}".format(accel.max()))
print("\n")
print("Mean of transformed data = {}".format(transform_data.mean()))
print("Standard deviation of transformed data = {}".format(transform_data.std()))
print("Max of transformed data = {}".format(transform_data.max()))
Mean of original data = 15.568090452261307
Standard deviation of original data = 2.7542223175940177
Max of original data = 24.8

Mean of transformed data = -1.0711699534071861e-15
Standard deviation of transformed data = 0.9999999999999999
Max of transformed data = 3.043039377098009

5. Квантильное преобразование — нормальное

Нормальное квантильное преобразование — это еще один метод преобразования набора данных в нормальное распределение.

from sklearn.preprocessing import quantile_transform
transform_data = quantile_transform(accel, n_quantiles=398, random_state=1, copy=True, output_distribution='normal')
print("Mean of original data = {}".format(accel.mean()))
print("Standard deviation of original data = {}".format(accel.std()))
print("Max of original data = {}".format(accel.max()))
print("\n")
print("Mean of transformed data = {}".format(transform_data.mean()))
print("Standard deviation of transformed data = {}".format(transform_data.std()))
print("Max of transformed data = {}".format(transform_data.max()))
Mean of original data = 15.568090452261307
Standard deviation of original data = 2.7542223175940177
Max of original data = 24.8


Mean of transformed data = 0.0008961428054773563
Standard deviation of transformed data = 1.050687337227496
Max of transformed data = 5.19933758270342

6. Квантильное преобразование — Равномерное

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

from sklearn.preprocessing import quantile_transform
transform_data = quantile_transform(accel, n_quantiles=398, random_state=1, copy=True, output_distribution='uniform')
print("Mean of original data = {}".format(accel.mean()))
print("Standard deviation of original data = {}".format(accel.std()))
print("Max of original data = {}".format(accel.max()))
print("\n")
print("Mean of transformed data = {}".format(transform_data.mean()))
print("Standard deviation of transformed data = {}".format(transform_data.std()))
print("Max of transformed data = {}".format(transform_data.max()))
Mean of original data = 15.568090452261307
Standard deviation of original data = 2.7542223175940177
Max of original data = 24.8

Mean of transformed data = 0.5001329063453287
Standard deviation of transformed data = 0.28934184755702674
Max of transformed data = 1.0

7. Надежный масштабатор

Этот метод масштабирования сначала удаляет выбросы, а затем применяет стандартный масштабатор для масштабирования набора данных.

from sklearn.preprocessing import RobustScaler
transformer = RobustScaler(with_centering = True, with_scaling = True).fit(accel)
transform_data = transformer.transform(accel)
print("Mean of original data = {}".format(accel.mean()))
print("Standard deviation of original data = {}".format(accel.std()))
print("Max of original data = {}".format(accel.max()))
print("\n")
print("Mean of transformed data = {}".format(transform_data.mean()))
print("Standard deviation of transformed data = {}".format(transform_data.std()))
print("Max of transformed data = {}".format(transform_data.max()))
Mean of original data = 15.568090452261307
Standard deviation of original data = 2.7542223175940177
Max of original data = 24.8

Mean of transformed data = 0.020325508137703445
Standard deviation of transformed data = 0.8221559156997077
Max of transformed data = 2.776119402985078

8. Стандартный масштабатор

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

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(accel)
transform_data = scaler.transform(accel)
print("Mean of original data = {}".format(accel.mean()))
print("Standard deviation of original data = {}".format(accel.std()))
print("Max of original data = {}".format(accel.max()))
print("\n")
print("Mean of transformed data = {}".format(transform_data.mean()))
print("Standard deviation of transformed data = {}".format(transform_data.std()))
print("Max of transformed data = {}".format(transform_data.max()))
Mean of original data = 15.568090452261307
Standard deviation of original data = 2.7542223175940177
Max of original data = 24.8


Mean of transformed data = -2.6779248835179653e-16
Standard deviation of transformed data = 0.9999999999999998
Max of transformed data = 3.351911531892361

Рекомендации

  1. https://scikit-learn.org/stable/index.html
  2. https://towardsdatascience.com/normalization-vs-standardization-quantitative-analysis-a91e8a79cebf
  3. https://www.analyticsvidhya.com/

Подпишитесь на меня в LinkedIn по адресу:



Другие мои статьи вы можете найти здесь: