답변:
아이디어의 뒤에은 StandardScaler
그것의 분포가 평균값 0과 1의 표준 편차해야합니다 있도록 데이터를 변환하는 것입니다
다변량 데이터의 경우를,이 (데이터의 각 열에 대해 독립적으로 즉) 완료 기능 현명하다 .
데이터의 분포가 주어지면 데이터 세트의 각 값은 평균값을 뺀 다음 전체 데이터 세트 (또는 다변량의 경우 특징)의 표준 편차로 나눕니다.
소개 :X
각 행 / 선 이 샘플 / 관찰 이고 각 열 이 변수 / 특성 인 행렬이 있다고 가정 합니다 (이것은 모든 sklearn
ML 함수에 대한 예상 입력입니다 - X.shape
이어야 함 [number_of_samples, number_of_features]
).
방법의 핵심 : 주요 아이디어는에 정상화 / 표준화 즉, μ = 0
및 σ = 1
당신의 기능 / 변수 / 열 X
, 개별적으로 , 전에 어떤 기계 학습 모델을 적용.
StandardScaler()
특성 즉, X의 각 열, INDIVIDUALLY 를 정규화하여 각 열 / 특성 / 변수가 μ = 0
및 을 갖도록 σ = 1
합니다.
추신 : 이 페이지에서 가장 많이 찬성 된 답변을 찾았습니다. 나는 "데이터 세트의 각 값이 샘플 평균값을 뺀다"라고 인용하고 있습니다. 이것은 사실이 아니며 정확하지도 않습니다.
참고 항목 : 데이터 표준화 방법 및 이유 : 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.])
각 기능 (열)의 표준이 1인지 확인합니다.
scaled_data.std(axis = 0)
array([1., 1.])
수학 :
UPDATE 08/2019 : 입력 매개 변수 Concering with_mean
와 with_std
에가 False
/ True
, 여기에 대한 답변 제공 한 : 사이 StandardScaler 차이를 "with_std = 허위 또는 사실"과 "with_mean = 거짓 또는 진정한"
[1.15, 1.15]
내가 pandas 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
, 기계 학습 알고리즘이 더 빨라지거나 더 정확한 결정을 내리는 데 도움 이되는지 궁금 합니다.
계산 방법 :
여기에서 자세한 내용을 읽을 수 있습니다.
이것은 다른 단위에 해당하는 데이터를 비교할 때 유용합니다. 이 경우 단위를 제거하려고합니다. 모든 데이터에 대해 일관된 방식으로이를 수행하려면 분산이 단일이고 계열의 평균이 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 문서 참조 ).
each value in the dataset will have the sample mean value subtracted
-이것은 사실이 아닙니다. 각 기능 / 열의 평균은 특정 열의 값에서 뺍니다. 이것은 열 단위로 수행됩니다. 없습니다sample mean value subtracted
-아래 내 대답 참조