Here Is Why You Probably Use numpy.std Incorrectly – Towards AI

Here Is Why You Probably Use numpy.std Incorrectly – Towards AI

Pengarang: Leon Eversberg

Awalnya diterbitkan di Towards AI the World’s Leading AI and Technology News and Media Company. Jika Anda membuat produk atau layanan terkait AI, kami mengundang Anda untuk mempertimbangkan menjadi sponsor AI. Di Towards AI, kami membantu menskalakan AI dan startup teknologi. Biarkan kami membantu Anda melepaskan teknologi Anda kepada massa.

Cara memperkirakan standar deviasi dengan benar di Python

Distribusi normal berbentuk lonceng. Gambar oleh OpenClipart-Vectors di Pixabay

Populasi terdistribusi normal dengan ukuran N dapat dijelaskan dengan rata-rata μ dan standar deviasinya σ. Distribusi ini juga dikenal sebagai kurva lonceng.

Standar deviasi (std) dapat dihitung menggunakan Persamaan. 1.

Persamaan. 1: Simpangan baku σ populasi dengan ukuran N dan rata-rata μ

Namun, jika kita menghitung deviasi standar di Python dengan NumPy dan panda, kita mendapatkan hasil yang berbeda.

Pada artikel ini, Anda akan mempelajari alasan mengapa hal ini terjadi.

np.std vs panda std

Ini adalah output dari std NumPy dan output dari panda std untuk beberapa titik data acak X.

impor numpy sebagai np
impor panda sebagai pd

X = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

df = pd.DataFrame({‘X’: X})

print(f”numpy std(X): {np.std(X)}”)
>> numpy std(X): 2.8722813232690143

print(f”panda std(df): {df.std()}”)
>> panda std(df): X 3.02765

Seperti yang Anda lihat, NumPy memberi kita standar deviasi 2,87 dan panda memberi kita standar deviasi 3,02. Jadi, mana yang benar?

Koreksi Bessel

Untuk memahami masalahnya, kita harus menyelami lebih dalam topik standar deviasi.

Sebagai Insinyur atau Ilmuwan, kita biasanya tidak mengetahui rata-rata populasi sebenarnya μ. Namun, kami dapat menghitung rata-rata sampel dari titik data kami x dengan Persamaan yang terkenal. 2.

Persamaan. 2: Rata-rata sampel untuk titik data x

Dengan mengganti rata-rata populasi μ dengan rata-rata sampel m, dan ukuran populasi N dengan ukuran sampel n dalam Persamaan. 1, kita mendapatkan standar deviasi sampel s menurut Persamaan. 3.

Persamaan. 3: Standar deviasi sampel

Dengan titik data yang cukup, kami ingin standar deviasi sampel s sedekat mungkin dengan standar deviasi sebenarnya dari populasi σ. Secara matematis, ini dapat dinyatakan dengan menggunakan nilai yang diharapkan.

Ternyata ini tidak berlaku untuk standar deviasi sampel. Persamaan. 4 menunjukkan bahwa standar deviasi sampel bias karena suku tambahan (n – 1)/n. Untuk bukti lengkap, lihat referensi [1].

Persamaan. 4: Standar deviasi sampel bias [1]

Namun, ini dapat diperbaiki dengan mengganti n dalam Persamaan. 3 dengan (n-1).

Ini disebut koreksi Bessel, membawa kita ke estimator tak bias Persamaan. 5.

Persamaan. 5: Estimasi tak bias dari standar deviasi populasi

Menjelaskan np.std vs panda std

Dengan pengetahuan ini, kami sekarang dapat menjelaskan perbedaan antara np.std dan fungsi panda std.

Secara default, NumPy menggunakan 1/n(Persamaan 3), sedangkan panda menggunakan koreksi Bessel dengan 1/(n-1)(Persamaan 4). Kita dapat mengubah perhitungan NumPy dengan menentukan parameter ddof.

dof: int, opsional

Berarti Derajat Kebebasan Delta. Pembagi yang digunakan dalam perhitungan adalah N – ddof, di mana N mewakili jumlah elemen. Secara default ddof adalah nol.

Kembali ke contoh Python awal kita, kita sekarang dapat menggunakan parameter ddof di np.std untuk mendapatkan perkiraan standar deviasi yang tidak bias.

impor numpy sebagai np
impor panda sebagai pd

X = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

df = pd.DataFrame({‘X’: X})

print(f”panda std(df): {df.std()}”)
>> panda std(df): X 3.02765

print(f”numpy std (X, ddof=1): {np.std(X, ddof=1)}”)
>> numpy std (X, ddof=1): 3,0276503540974917

Mengatur parameter ddof = 1 di np.std sekarang memberi kita standar deviasi 3,02. Kami mendapatkan hasil yang sama dengan panda.

Kesimpulan

Koreksi Bessel memperbaiki bias dari standar deviasi sampel s dengan mengganti n dengan n — 1.

Fungsi std NumPy menggunakan rumus n — ddof. Secara default, NumPy menggunakan ddof = 0 dan panda menggunakan ddof = 1.

Singkatnya, jika Anda memiliki beberapa poin data dari suatu populasi dan Anda ingin memperkirakan standar deviasi yang tidak bias dengan NumPy, gunakan np.std(X, ddof = 1).

Referensi

[1] Departemen Matematika dan Ilmu Komputer, Koreksi Bessel (diakses: 14.12.2022)

M. Holický, Pengantar Probabilitas dan Statistik untuk Insinyur (2013), Springer, Berlin, Heidelberg.

pandas.DataFrame.std: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.std.html (diakses: 14.12.2022)

numpy.std: https://numpy.org/doc/stable/reference/generated/numpy.std.html (diakses: 14.12.2022)

Inilah Mengapa Anda Mungkin Menggunakan numpy.std Salah awalnya diterbitkan di Menuju AI di Medium, di mana orang melanjutkan percakapan dengan menyoroti dan menanggapi cerita ini.

Diterbitkan melalui Menuju AI

Author: Jonathan Kelly