Saya tidak dapat memahami halaman dari StandardScaler
dalam dokumentasi sklearn
.
Adakah yang bisa menjelaskan hal ini kepada saya secara sederhana?
Saya tidak dapat memahami halaman dari StandardScaler
dalam dokumentasi sklearn
.
Adakah yang bisa menjelaskan hal ini kepada saya secara sederhana?
Jawaban:
Gagasan di baliknya StandardScaler
adalah bahwa itu akan mengubah data Anda sedemikian rupa sehingga distribusinya akan memiliki nilai rata-rata 0 dan deviasi standar 1.
Dalam kasus data multivariat, ini dilakukan secara fitur (dengan kata lain secara independen untuk setiap kolom data) .
Mengingat distribusi data, setiap nilai dalam kumpulan data akan dikurangi nilai rata-rata, dan kemudian dibagi dengan deviasi standar dari seluruh kumpulan data (atau fitur dalam kasus multivariat).
Intro: Saya berasumsi bahwa Anda memiliki matriks di X
mana setiap baris / baris adalah sampel / observasi dan setiap kolom adalah variabel / fitur (ini adalah masukan yang diharapkan untuk sklearn
fungsi ML apa pun dengan cara - X.shape
seharusnya [number_of_samples, number_of_features]
).
Inti metode : Ide utamanya adalah menormalkan / membakukan, yaitu μ = 0
dan σ = 1
fitur / variabel / kolom Anda X
, satu per satu , sebelum menerapkan model pembelajaran mesin apa pun.
StandardScaler()
akan menormalkan fitur yaitu setiap kolom X, INDIVIDU , sehingga setiap kolom / fitur / variabel akan memiliki μ = 0
dan σ = 1
.
PS: Saya menemukan jawaban yang paling disukai di halaman ini salah. Saya mengutip "setiap nilai dalam kumpulan data akan memiliki sampel nilai rata-rata dikurangi" - Ini tidak benar atau tidak benar.
Lihat juga: Bagaimana dan mengapa Standarisasi data Anda: Tutorial python
Contoh:
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.]]
Pastikan bahwa rata-rata setiap fitur (kolom) adalah 0:
scaled_data.mean(axis = 0)
array([0., 0.])
Pastikan std dari setiap fitur (kolom) adalah 1:
scaled_data.std(axis = 0)
array([1., 1.])
Matematika:
UPDATE 08/2019 : Mengenai parameter input with_mean
dan with_std
ke False
/ True
, saya telah memberikan jawabannya di sini: Perbedaan StandardScaler antara "with_std = False or True" dan "with_mean = False or True"
[1.15, 1.15]
ketika saya menghitung sebagai panda df: pd.DataFrame(scaled_data).std(0)
?
pd.DataFrame(scaled_data)[0]
saya mendapatkan seri dengan Name: 0, dtype: float64
dan nilai [-1.0, 1.0, -1.0, 1.0]
. Maaf untuk formatnya
StandardScaler
, apakah itu membuat algoritme pembelajaran mesin berjalan lebih cepat, atau membantu membuat keputusan yang lebih akurat, atau yang lainnya?
Bagaimana cara menghitungnya:
Anda dapat membaca lebih lanjut di sini:
StandardScaler melakukan tugas Standardisasi . Biasanya kumpulan data berisi variabel yang berbeda dalam skala. Misal, dataset Employee akan berisi kolom AGE dengan nilai skala 20-70 dan kolom SALARY dengan nilai skala 10000-80000 .
Karena kedua kolom ini memiliki skala yang berbeda, keduanya distandarkan untuk memiliki skala yang sama saat membuat model pembelajaran mesin.
Ini berguna saat Anda ingin membandingkan data yang sesuai dengan unit yang berbeda. Dalam hal ini, Anda ingin menghapus unitnya. Untuk melakukannya dengan cara yang konsisten pada semua data, Anda mengubah data sedemikian rupa sehingga variansnya adalah kesatuan dan mean deretnya adalah 0.
Jawaban di atas bagus, tetapi saya membutuhkan contoh sederhana untuk meredakan beberapa kekhawatiran yang saya miliki di masa lalu. Saya ingin memastikan itu memang memperlakukan setiap kolom secara terpisah. Sekarang saya diyakinkan dan tidak dapat menemukan contoh apa yang membuat saya khawatir. Semua kolom ADALAH skala terpisah seperti yang dijelaskan di atas.
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)
Berikut adalah contoh kerja sederhana untuk menjelaskan cara kerja penghitungan standarisasi. Bagian teori sudah dijelaskan dengan baik di jawaban lain.
>>>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
Perhitungan
Seperti yang Anda lihat di output, mean adalah [6. , 2.5] dan deviasi standar adalah [1.41421356, 0.8660254]
Data posisi (0,1) adalah 2 Standardisasi = (2 - 2.5) /0.8660254 = -0.57735027
Data pada posisi (1,0) adalah 4 Standardisasi = (4-6) /1.41421356 = -1.414
Hasil Setelah Standardisasi
Periksa Mean dan Deviasi Std Setelah Standarisasi
Catatan: -2.77555756e-17 sangat dekat dengan 0.
Referensi
Setelah diterapkan StandardScaler()
, setiap kolom di X akan memiliki mean 0 dan deviasi standar 1.
Rumus dicantumkan oleh orang lain di halaman ini.
Rasional: beberapa algoritme memerlukan data agar terlihat seperti ini (lihat dokumentasi sklearn ).
each value in the dataset will have the sample mean value subtracted
-- ini tidak benar. Rata-rata fitur / kolom SETIAP akan dikurangi dari nilai kolom tertentu. Ini dilakukan berdasarkan kolom. Tidak adasample mean value subtracted
- Lihat jawaban saya di bawah ini