Anlıyorum alamıyorum sayfa arasında StandardScaler
bir belgelerinde sklearn
.
Bunu bana basit terimlerle açıklayan var mı?
Anlıyorum alamıyorum sayfa arasında StandardScaler
bir belgelerinde sklearn
.
Bunu bana basit terimlerle açıklayan var mı?
Yanıtlar:
Arkasındaki fikir StandardScaler
, verilerinizi, dağılımının ortalama değeri 0 ve standart sapması 1 olacak şekilde dönüştürebilmesidir.
Çok değişkenli veriler söz konusu olduğunda, bu özellik açısından yapılır (başka bir deyişle, verilerin her sütunu için bağımsız olarak) .
Verilerin dağılımı göz önüne alındığında, veri kümesindeki her bir değerin ortalama değeri çıkarılır ve ardından tüm veri kümesinin standart sapmasına (veya çok değişkenli durumda özelliğe) bölünür.
Giriş:X
Her satırın / satırın bir örnek / gözlem olduğu ve her sütunun bir değişken / özellik olduğu bir matrisiniz olduğunu varsayıyorum (bu sklearn
arada herhangi bir ML işlevi için beklenen girdidir - X.shape
olması gerekir [number_of_samples, number_of_features]
).
Yöntemin Çekirdek : Ana fikir için normalleştirmek / standartlaştırmak yani μ = 0
ve σ = 1
sizin özellikler / değişkenler / sütunlar X
, bireysel olarak , daha önce herhangi bir makine öğrenme modelini uygulamak.
StandardScaler()
olacak özellikler normalleştirmek X her bir sütunu, yani BİREYSEL , böylece her sütun / özellik / değişken olacağı μ = 0
ve σ = 1
.
Not: Bu sayfada en çok oy alan cevabı yanlış buluyorum. "Veri kümesindeki her bir değerin örnek ortalama değeri çıkarılacaktır" - Bu ne doğru ne de doğru.
Ayrıca bakınız: Verilerinizi nasıl ve neden Standartlaştırmalısınız: Bir python öğreticisi
Misal:
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.]]
Her özelliğin (sütun) ortalamasının 0 olduğunu doğrulayın:
scaled_data.mean(axis = 0)
array([0., 0.])
Her özelliğin (sütun) std'sinin 1 olduğunu doğrulayın:
scaled_data.std(axis = 0)
array([1., 1.])
Matematik:
GÜNCELLEME 08/2020 : giriş parametreleri ile ilgili with_mean
ve with_std
hiç False
/ True
, burada bir cevap vermiş: arasındaki StandardScaler fark “with_std = False veya True” ve “with_mean = False veya True”
[1.15, 1.15]
Pandas df: olarak hesapladığımda neden aldığım konusunda bir fikriniz var pd.DataFrame(scaled_data).std(0)
mı?
pd.DataFrame(scaled_data)[0]
olan bir dizi alırım . Biçimlendirme için özür dilerimName: 0, dtype: float64
[-1.0, 1.0, -1.0, 1.0]
StandardScaler
, makine öğrenimi algoritmasının daha hızlı gitmesini sağlıyor mu, yoksa daha doğru kararlar almaya yardımcı oluyor mu yoksa başka bir şey mi?
Nasıl hesaplanır:
Daha fazlasını buradan okuyabilirsiniz:
StandardScaler, Standardizasyon görevini yerine getirir . Genellikle bir veri kümesi, ölçek olarak farklı değişkenler içerir. Değerleri ile YAŞ sütunu bulunur Çalışan bir veri kümesi için, örneğin ölçekli 20-70 ile ilgili değerleri ve ÜCRET kolonu ölçekte 10.000-80.000 üzerinde .
Bu iki sütun ölçek olarak farklı olduğundan, makine öğrenimi modeli oluştururken ortak bir ölçeğe sahip olacak şekilde Standartlaştırılmıştır.
Bu, farklı birimlere karşılık gelen verileri karşılaştırmak istediğinizde kullanışlıdır. Bu durumda birimleri çıkarmak istersiniz. Bunu tüm verilerde tutarlı bir şekilde yapmak için, verileri varyansın üniter olduğu ve serinin ortalamasının 0 olacağı şekilde dönüştürürsünüz.
Aşağıda, standarizasyon hesaplamasının nasıl çalıştığını açıklamak için basit bir çalışma örneği verilmiştir. Teori kısmı zaten diğer cevaplarda iyi açıklanmıştır.
>>>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
Hesaplama
Çıktıda görebileceğiniz gibi, ortalama [6. , 2.5] ve standart sapma [1.41421356, 0.8660254]
Veriler (0,1) konumu 2'dir Standardizasyon = (2 - 2.5) /0.8660254 = -0.57735027
(1,0) konumundaki veriler 4'tür Standardizasyon = (4-6) /1,41421356 = -1,414
Standardizasyon Sonrası Sonuç
Standardizasyondan Sonra Ortalama ve Std Sapmayı Kontrol Edin
Not: -2.77555756e-17, 0'a çok yakındır.
Referanslar
Yukarıdaki cevaplar harika, ancak geçmişte sahip olduğum bazı endişeleri gidermek için basit bir örneğe ihtiyacım vardı. Her bir sütunu ayrı ayrı ele aldığından emin olmak istedim. Şimdi rahatladım ve hangi örneğin endişelenmeme neden olduğunu bulamıyorum. Bütün sütun ARE üzerinde olanlar tarafından tarif edildiği gibi ayrı ayrı tartılır.
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 modülü, paydada (n - 1) kullanan "örnek" varyansını doğru bir şekilde rapor ediyor. "Popülasyon" varyansı, varyans hesaplaması için paydada n'yi kullanır. Daha iyi anlamak için lütfen yukarıdaki veri kümesinin ilk sütunundaki ölçeklendirilmiş verileri kullanan aşağıdaki koda bakın:
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
Uygulamadan sonra StandardScaler()
, X'teki her bir sütunun ortalaması 0 ve standart sapması 1 olacaktır.
Formüller bu sayfada başkaları tarafından listelenmiştir.
Gerekçe: Bazı algoritmalar verilerin böyle görünmesini gerektirir ( sklearn belgelerine bakın ).
StandardScalar()
Sıra bazında başvuruyoruz .
Yani, bir sütundaki her satır için (Pandas DataFrame ile çalıştığınızı varsayıyorum):
x_new = (x_original - mean_of_distribution) / std_of_distribution
Birkaç puan -
Dağılımın standart sapmasına (özelliğin dağıtımı) böldüğümüz için Standart Skaler olarak adlandırılır. Benzer şekilde, tahmin edebilirsiniz MinMaxScalar()
.
Orijinal dağılım uygulandıktan sonra aynı kalır StandardScalar()
. Dağılımın Normal Dağılım olarak değişmesi yaygın bir yanılgıdır. Aralığı [0, 1] olarak sıkıştırıyoruz.
each value in the dataset will have the sample mean value subtracted
-- Bu doğru değil. EACH özelliğinin / sütununun ortalaması, belirli sütunun değerlerinden çıkarılacaktır. Bu sütun bazında yapılır. Hayırsample mean value subtracted
- Cevabımı aşağıda görün