Стандартизация или нормализация количественных признаков — стандартный шаг в проекте машинного обучения. Но мы редко беспокоимся о том, какую технику масштабирования функций использовать в нашем проекте.
В этой статье Шей Геллер подробно обсуждается, как выбор подходящего метода масштабирования может повысить точность наших моделей машинного обучения. В этой статье я покажу, как реализовать различные методы разработки функций в Python и их влияние на данные. Чтобы выполнить этот анализ, я использовал максимальные значения ускорения для разных моделей автомобилей и годов выпуска.
- Масштабирование максимального объема пресса
Это гарантирует, что максимальное значение в столбце равно 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
Рекомендации
- https://scikit-learn.org/stable/index.html
- https://towardsdatascience.com/normalization-vs-standardization-quantitative-analysis-a91e8a79cebf
- https://www.analyticsvidhya.com/
Подпишитесь на меня в LinkedIn по адресу:
Другие мои статьи вы можете найти здесь: