IT Share you

누구든지 StandardScaler를 설명 할 수 있습니까?

shareyou 2020. 12. 13. 11:26
반응형

누구든지 StandardScaler를 설명 할 수 있습니까?


나는 이해할 수 없습니까 페이지 의을 StandardScaler의 문서에 sklearn.

누구든지 이것을 간단한 용어로 설명 할 수 있습니까?


기본 개념 StandardScaler은 분포가 평균 값 0과 표준 편차 1을 갖도록 데이터를 변환한다는 것입니다. 데이터 분포가 주어지면 데이터 세트의 각 값은 표본 평균 값을 뺀 다음 전체 데이터 세트의 표준 편차입니다.


주요 아이디어는 기계 학습 기술을 적용하기 전에 기능 을 정규화 / 표준화 ( mean = 0standard deviation = 1)하는 것입니다.

명심해야 할 중요한 사항 중 하나는 대부분의 scikit-learn모델 / 클래스 / 함수 X가 dimension / shape 의 행렬 입력으로 기대한다는 것 [number_of_samples, number_of_features]입니다. 이건 매우 중요합니다. 일부 다른 라이브러리는 역을 입력으로 기대합니다.

StandardScaler()특성 (X의 각 열, 개별적으로 !!!)을 정규화하여 각 열 / 특성 / 변수가 mean = 0standard 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.])

수학 :

여기에 이미지 설명 입력

UPDATE 08/2019 : 입력 매개 변수 Concering with_meanwith_std로는 False/ True, 여기에 대한 답변을 제공 한 : https://stackoverflow.com/a/57381708/5025009


계산 방법 :

여기에 이미지 설명 입력

여기에서 자세한 내용을 읽을 수 있습니다.


StandardScaler performs the task of Standardization. Usually a dataset contains variables that are different in scale. For e.g. an Employee dataset will contain AGE column with values on scale 20-70 and SALARY column with values on scale 10000-80000.
As these two columns are different in scale, they are Standardized to have common scale while building machine learning model.


This is useful when you want to compare data that correspond to different units. In that case, you want to remove the units. To do that in a consistent way of all the data, you transform the data in a way that the variance is unitary and that the mean of the series is 0.


The answers above are great, but I needed a simple example to alleviate some concerns that I have had in the past. I wanted to make sure it was indeed treating each column separately. I am now reassured and can't find what example had caused me concern. All columns ARE scaled separately as described by those above.

CODE

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)

OUTPUT

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)

Following is a simple working example to explain how standarization calculation works. The theory part is already well explained in other answers.

>>>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

Calculation

As you can see in the output, mean is [6. , 2.5] and std deviation is [1.41421356, 0.8660254 ]

Data is (0,1) position is 2 Standardization = (2 - 2.5)/0.8660254 = -0.57735027

Data in (1,0) position is 4 Standardization = (4-6)/1.41421356 = -1.414

Result After Standardization

여기에 이미지 설명 입력

Check Mean and Std Deviation After Standardization

여기에 이미지 설명 입력

참고 : -2.77555756e-17은 0에 매우 가깝습니다.

참고 문헌

  1. 특이 치가있는 데이터에 대한 다양한 스케일러의 효과 비교

  2. 정규화와 표준화의 차이점은 무엇입니까?

  3. sklearn StandardScaler로 스케일링 된 데이터의 평균이 0이 아닙니다.


를 적용 StandardScaler()하면 X의 각 열 은 평균이 0이고 표준 편차가 1이됩니다.

이 페이지의 다른 사용자가 수식을 나열합니다.

근거 : 일부 알고리즘에는 데이터가 이와 같이 표시 되어야 합니다 ( sklearn 문서 참조 ).

참고 URL : https://stackoverflow.com/questions/40758562/can-anyone-explain-me-standardscaler

반응형