Я не можу зрозуміти сторінку з StandardScaler
в документації sklearn
.
Хто-небудь може пояснити мені це простими словами?
Я не можу зрозуміти сторінку з StandardScaler
в документації sklearn
.
Хто-небудь може пояснити мені це простими словами?
Відповіді:
Ідея StandardScaler
полягає в тому, що він перетворить ваші дані таким чином, що їх розподіл матиме середнє значення 0 і стандартне відхилення 1.
У випадку багатовимірних даних це робиться з особливими ознаками (іншими словами, незалежно для кожного стовпця даних) .
Враховуючи розподіл даних, кожне значення в наборі даних відніме середнє значення, а потім поділить на стандартне відхилення цілого набору даних (або функції у багатовимірному випадку).
Вступ: Я припускаю, що у вас є матриця, X
де кожен рядок / рядок є зразком / спостереженням, а кожен стовпець - змінною / ознакою (це sklearn
, до речі, очікуваний вхід для будь-якої функції ML - X.shape
повинен бути [number_of_samples, number_of_features]
).
Основний метод : Основна ідея полягає в тому, щоб нормалізувати / гостірована тобто μ = 0
і σ = 1
ваші функції / змінні / стовпці X
, по окремо , перед застосуванням будь-якої машини моделі навчання.
StandardScaler()
буде нормалізувати функції , тобто кожен стовпець X, ІНДИВІДУАЛЬНО , так що кожен стовпець / функція / змінна буде мати μ = 0
і σ = 1
.
PS: Я знайшов найбільш прихильну відповідь на цій сторінці, неправильно. Я цитую "кожне значення в наборі даних буде віднімати середнє значення вибірки" - це не відповідає дійсності та правильності.
Дивіться також: Як і чому стандартизувати ваші дані: Підручник з Python
Приклад:
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.])
Переконайтеся, що std кожної функції (стовпця) дорівнює 1:
scaled_data.std(axis = 0)
array([1., 1.])
Математика:
ОНОВЛЕННЯ 08/2019 : Concering вхідних параметрів with_mean
і with_std
до False
/ True
, я дала відповідь тут: різниця між StandardScaler «with_std = False або True» і «with_mean = False або True»
[1.15, 1.15]
коли обчислюю як панду df pd.DataFrame(scaled_data).std(0)
:?
pd.DataFrame(scaled_data)[0]
я отримую серію з Name: 0, dtype: float64
і значеннями [-1.0, 1.0, -1.0, 1.0]
. Вибачте за форматування
StandardScaler
, чи змушує це алгоритм машинного навчання йти швидше, чи допомагає приймати більш точні рішення, чи щось інше?
Як його розрахувати:
Детальніше ви можете прочитати тут:
StandardScaler виконує завдання стандартизації . Зазвичай набір даних містить різні за масштабом змінні. Наприклад, набір даних працівника міститиме стовпець AGE зі значеннями за шкалою 20-70 та стовпець SALARY зі значеннями за шкалою 10000-80000 .
Оскільки ці дві колонки відрізняються за масштабом, вони стандартизовані, щоб мати загальний масштаб під час побудови моделі машинного навчання.
Це корисно, коли потрібно порівняти дані, що відповідають різним одиницям виміру. У такому випадку ви хочете видалити блоки. Щоб зробити це послідовно для всіх даних, ви перетворюєте дані таким чином, що дисперсія є унітарною, а середнє значення ряду - 0.
Наведені вище відповіді чудові, але мені потрібен був простий приклад, щоб полегшити деякі проблеми, які були у мене в минулому. Я хотів переконатися, що це справді трактує кожну колонку окремо. Зараз я заспокоєний і не можу знайти, який приклад викликав у мене занепокоєння. Усі стовпці АС масштабуються окремо, як описано вище.
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)
Далі наведено простий робочий приклад, який пояснює, як працює розрахунок стандартизації. Теоретична частина вже добре пояснена в інших відповідях.
>>>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
Результат після стандартизації
Перевірте середнє та стандартне відхилення після стандартизації
Примітка: -2,77555756e-17 дуже близький до 0.
Список літератури
Після нанесення StandardScaler()
, кожен стовпець в X буде мати середнє значення 0 і стандартне відхилення 1.
Формули перераховані іншими на цій сторінці.
Обґрунтування: деякі алгоритми вимагають даних, щоб виглядати так (див. Sklearn docs ).
each value in the dataset will have the sample mean value subtracted
-- це не правда. Середнє значення КОЖНОЇ ознаки / стовпця буде віднято від значень конкретного стовпця. Це робиться по колонці. Немаєsample mean value subtracted
- Дивіться мою відповідь нижче