Может ли кто-нибудь объяснить мне StandardScaler?

Я не могу понять страницу StandardScaler в документации по sklearn.

Кто-нибудь может объяснить мне это простыми словами?

Ответ 1

Идея StandardScaler заключается в том, что он преобразует ваши данные таким образом, что его распределение будет иметь среднее значение 0 и стандартное отклонение 1. Учитывая распределение данных, каждое значение в наборе данных будет вычтено из среднего значения выборки, а затем разделено по стандартному отклонению всего набора данных.

Ответ 2

Основная идея состоит в том, чтобы нормализовать/стандартизировать (mean = 0 и standard deviation = 1) ваши функции перед применением методов машинного обучения.

Важно помнить, что большинство (если не все) моделей/классов/функций scikit-learn ожидают в качестве входных данных матрицу X с размерами/формой [number_of_samples, number_of_features]. Это очень важно. Некоторые другие библиотеки ожидают в качестве входных данных обратное.

StandardScaler() нормализует объекты (каждый столбец X, ИНДИВИДУАЛЬНО !!!), так что каждый столбец/функция/переменная будет иметь mean = 0 и standard deviation = 1.


Пример:

from sklearn.preprocessing import StandardScaler
import numpy as np

data = np.array([[0, 0], [1, 0], [0, 1], [1, 1]])
scaler = StandardScaler()
scaled_data = scaler.fit_transform(data)

print(data)
[[0 0]
 [0 0]
 [1 1]
 [1 1]]

print(scaled_data)
[[-1. -1.]
 [-1. -1.]
 [ 1.  1.]
 [ 1.  1.]]

Убедитесь, что среднее значение каждого объекта (столбца) равно 0:

scaled_data.mean(axis = 0)
array([0., 0.])

Убедитесь, что стандартное значение каждой функции (столбца) равно 1:

scaled_data.std(axis = 0)
array([1., 1.])

Математика:

enter image description here

Ответ 4

StandardScaler выполняет задачу стандартизации. Обычно набор данных содержит переменные разного масштаба. Например, набор данных Employee будет содержать столбец AGE со значениями по шкале 20-70 и столбец SALARY со значениями по шкале 10000-80000.
Поскольку эти два столбца отличаются по масштабу, они стандартизированы, чтобы иметь общий масштаб при построении модели машинного обучения.

Ответ 5

Это полезно, если вы хотите сравнить данные, соответствующие различным единицам. В этом случае вы хотите удалить блоки. Чтобы сделать это согласованным образом всех данных, вы преобразуете данные таким образом, чтобы дисперсия была унитарной, а среднее из рядов было равно 0.

Ответ 6

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

КОД

import pandas as pd
import scipy.stats as ss
from sklearn.preprocessing import StandardScaler


data= [[1, 1, 1, 1, 1],[2, 5, 10, 50, 100],[3, 10, 20, 150, 200],[4, 15, 40, 200, 300]]

df = pd.DataFrame(data, columns=['N0', 'N1', 'N2', 'N3', 'N4']).astype('float64')

sc_X = StandardScaler()
df = sc_X.fit_transform(df)

num_cols = len(df[0,:])
for i in range(num_cols):
    col = df[:,i]
    col_stats = ss.describe(col)
    print(col_stats)

ВЫХОД

DescribeResult(nobs=4, minmax=(-1.3416407864998738, 1.3416407864998738), mean=0.0, variance=1.3333333333333333, skewness=0.0, kurtosis=-1.3599999999999999)
DescribeResult(nobs=4, minmax=(-1.2828087129930659, 1.3778315806221817), mean=-5.551115123125783e-17, variance=1.3333333333333337, skewness=0.11003776770595125, kurtosis=-1.394993095506219)
DescribeResult(nobs=4, minmax=(-1.155344148338584, 1.53471088361394), mean=0.0, variance=1.3333333333333333, skewness=0.48089217736510326, kurtosis=-1.1471008824318165)
DescribeResult(nobs=4, minmax=(-1.2604572012883055, 1.2668071116222517), mean=-5.551115123125783e-17, variance=1.3333333333333333, skewness=0.0056842140599118185, kurtosis=-1.6438177182479734)
DescribeResult(nobs=4, minmax=(-1.338945389819976, 1.3434309690153527), mean=5.551115123125783e-17, variance=1.3333333333333333, skewness=0.005374558840039456, kurtosis=-1.3619131970819205)

Ответ 7

После применения StandardScaler() каждый столбец в X будет иметь среднее значение 0 и стандартное отклонение 1.

Формулы перечислены другими на этой странице.

Обоснование: некоторые алгоритмы требуют, чтобы данные выглядели так (см. Документацию sklearn).

Ответ 8

Ниже приведен простой рабочий пример, объясняющий, как работает стандартизация. Часть теории уже хорошо объяснена в других ответах.

>>>import numpy as np
>>>data = [[6, 2], [4, 2], [6, 4], [8, 2]]
>>>a = np.array(data)

>>>np.std(a, axis=0)
array([1.41421356, 0.8660254 ])

>>>np.mean(a, axis=0)
array([6. , 2.5])

>>>from sklearn.preprocessing import StandardScaler
>>>scaler = StandardScaler()
>>>scaler.fit(data)
>>>print(scaler.mean_)

#Xchanged = (X−μ)/σ  WHERE σ is Standard Deviation and μ is mean
>>>z=scaler.transform(data)
>>>z

расчет

Как вы можете видеть на выходе, среднее значение равно [6. , 2.5] и стандартное отклонение [1.41421356, 0.8660254]

Данные (0,1) - это позиция 2 Стандартизация = (2 - 2,5)/0,8660254 = -0.57735027

Данные в позиции (1,0): 4 Стандартизация = (4-6)/1,41421356 = -1.414

Результат после стандартизации

enter image description here

Проверьте среднее и стандартное отклонение после стандартизации

enter image description here

Примечание: -2.77555756e -1 7 очень близко к 0.

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

  1. Сравните влияние разных скейлеров на данные с выбросами

  2. В чем разница между нормализацией и стандартизацией?

  3. Среднее значение данных, масштабированных с помощью sklearn StandardScaler, не равно нулю