programing

누가 StandardScaler에 대해 설명해 줄 수 있습니까?

oldcodes 2023. 7. 18. 21:57
반응형

누가 StandardScaler에 대해 설명해 줄 수 있습니까?

페이지를 이해할 수 없습니다.StandardScaler에의 에.sklearn.

이것을 간단하게 설명해 줄 수 있는 사람이 있습니까?

도입부

제 생각에 당신은 매트릭스를 가지고 있는 것 같습니다.X여기서 각 행/라인표본/관측치이고 열은 변수/특성입니다(이것은 임의의 값에 대해 예상되는 입력값입니다).sklearn -- 그저나 ML능기 --X.shape야 .[number_of_samples, number_of_features]).


방법의 핵심

주요 아이디어는 표준화/표준화입니다. μ = 0그리고.σ = 1의 특징/특징/특징/X기계 학습 모델을 적용하기 전에 개별적으로.

StandardScaler() X의 각 개별적으로 정규화하여 각 열/특성/변수가μ = 0그리고.σ = 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/2020: 입력 매개 변수 관련with_mean그리고.with_stdFalse/True여기에 답변을 제공했습니다. "with_std=False or True"와 "with_mean=False or True" 사이의 StandardScaler 차이입니다.

뒤에 있는 아이디어StandardScaler, 편차가 1198이 합니다. 즉, 분포의 평균 값은 0이고 표준 편차는 1입니다.
다변량 데이터의 경우 이 작업은 형상적으로 수행됩니다(즉, 데이터의 각 열에 대해 독립적으로 수행됨).
데이터의 분포가 주어지면 데이터 집합의 각 값은 평균 값을 뺀 다음 전체 데이터 집합의 표준 편차(또는 다변량의 경우 형상)로 나뉩니다.

StandardScaler는 표준화 작업을 수행합니다.일반적으로 데이터 집합에는 척도가 다른 변수가 포함됩니다.예를 들어 직원 데이터 세트에는 척도 20-70의 값이 있는 AGE 열과 척도 10000-80000의 값이 있는 SALE 열이 포함됩니다.
이 두 열은 규모가 다르기 때문에 기계 학습 모델을 구축하면서 공통의 규모를 갖도록 표준화되었습니다.

계산 방법:

enter image description here

자세한 내용은 여기를 참조하십시오.

다른 단위에 해당하는 데이터를 비교하려는 경우 유용합니다.이 경우 장치를 제거하려고 합니다.모든 데이터의 일관된 방식으로 분산이 단일하고 열의 평균이 0인 방식으로 데이터를 변환합니다.

다음은 표준화 계산의 작동 방식을 설명하는 간단한 작업 예제입니다.이론 부분은 이미 다른 답변에서 잘 설명되어 있습니다.

>>>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를 사용하여 확장된 데이터의 평균이 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)

참고:

scipy.stats 모듈이 분모에 (n - 1)을 사용하는 "샘플" 분산을 올바르게 보고하고 있습니다.모집단 분산은 분산 계산을 위해 분모에 사용됩니다.더 잘 이해하려면 위 데이터 집합의 첫 번째 열에 있는 스케일링된 데이터를 사용하는 아래 코드를 참조하십시오.

코드

import scipy.stats as ss

sc_Data = [[-1.34164079], [-0.4472136], [0.4472136], [1.34164079]]
col_stats = ss.describe([-1.34164079, -0.4472136, 0.4472136, 1.34164079])
print(col_stats)
print()

mean_by_hand = 0
for row in sc_Data:
    for element in row:
        mean_by_hand += element
mean_by_hand /= 4

variance_by_hand = 0
for row in sc_Data:
    for element in row:
        variance_by_hand += (mean_by_hand - element)**2
sample_variance_by_hand = variance_by_hand / 3
sample_std_dev_by_hand = sample_variance_by_hand ** 0.5

pop_variance_by_hand = variance_by_hand / 4
pop_std_dev_by_hand = pop_variance_by_hand ** 0.5

print("Sample of Population Calcs:")
print(mean_by_hand, sample_variance_by_hand, sample_std_dev_by_hand, '\n')
print("Population Calcs:")
print(mean_by_hand, pop_variance_by_hand, pop_std_dev_by_hand)

산출량

DescribeResult(nobs=4, minmax=(-1.34164079, 1.34164079), mean=0.0, variance=1.3333333422778562, skewness=0.0, kurtosis=-1.36000000429325)

Sample of Population Calcs:
0.0 1.3333333422778562 1.1547005422523435

Population Calcs:
0.0 1.000000006708392 1.000000003354196

를 한 후StandardScaler()X의 각 은 평균이 0이고 표준 편차가 1입니다.

수식은 이 페이지의 다른 사용자에 의해 나열됩니다.

이론적 근거: 일부 알고리즘은 데이터가 이와 같이 나타나도록 요구합니다(sklearn 문서 참조).

신청합니다StandardScalar()일렬로

따라서 열에 있는 각 행에 대해 다음을 수행합니다(Pandas DataFrame으로 작업한다고 가정합니다).

x_new = (x_original - mean_of_distribution) / std_of_distribution

몇 점 -

  1. 분포의 표준 편차(distr)로 나누고 있으므로 표준 스칼라라고 합니다.의).마찬가지로, 당신은 추측할 수 있습니다.MinMaxScalar().

  2. 적용 후 원래 분포가 동일하게 유지됩니다.StandardScalar()분포가 정규 분포로 변경된다는 것은 일반적인 오해입니다.범위를 [0, 1]로 축소하는 것입니다.

언급URL : https://stackoverflow.com/questions/40758562/can-anyone-explain-me-standardscaler

반응형