62
задан 7 January 2019 в 12:02

8 ответов

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

71
ответ дан 31 October 2019 в 13:13

основная идея состоит в том, чтобы нормализовать/стандартизировать (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

# 4 samples/observations and 2 variables/features
data = np.array([[0, 0], [1, 0], [0, 1], [1, 1]])
scaler = StandardScaler()
scaled_data = scaler.fit_transform(data)

print(data)
[[0, 0],
 [1, 0],
 [0, 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

08/2019 ОБНОВЛЕНИЯ: Concering входные параметры with_mean и with_std к [1 113] / True, я предоставил ответ здесь: https://stackoverflow.com/a/57381708/5025009

54
ответ дан 31 October 2019 в 13:13

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

17
ответ дан 31 October 2019 в 13:13

Как вычислить его:

enter image description here

можно читать больше здесь:

25
ответ дан 31 October 2019 в 13:13

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

7
ответ дан 31 October 2019 в 13:13

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

КОД

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)
6
ответ дан 31 October 2019 в 13:13

Следующее является простым рабочим примером, чтобы объяснить, как standarization вычисление работает. Часть теории уже хорошо объяснена в других ответах.

>>>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-17 очень близко к 0.

Ссылки

  1. Сравнивают эффект различных счетчиков на данных с выбросами

  2. , Каково различие между Нормализацией и Стандартизацией?

  3. Средний из данных, масштабируемых с sklearn StandardScaler, не нуль

4
ответ дан 31 October 2019 в 13:13

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

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

Объяснение: некоторые алгоритмы требуют, чтобы данные были похожи на это (см. sklearn документы ).

3
ответ дан 31 October 2019 в 13:13

Другие вопросы по тегам:

Похожие вопросы: