Ujian Grubbs ialah kaedah ujian hipotesis statistik yang digunakan untuk mengesan outlier dalam set data. Outlier ialah pemerhatian yang diberikan kepada pengedaran data, juga dikenali sebagai anomali. Set data dengan outlier cenderung lebih terdedah kepada overfitting daripada data dengan taburan normal/Gaussian. Oleh itu, adalah perlu untuk menangani outlier sebelum pemodelan pembelajaran mesin. Sebelum memproses, kita mesti mengesan dan mencari outlier dalam set data. Teknik pengesanan outlier yang paling popular ialah QQPlot, julat antara kuartil dan ujian statistik Grubbs. Walau bagaimanapun, artikel ini hanya akan membincangkan ujian Grubbs untuk mengesan outlier. Anda akan belajar: Apakah ujian Grubbs dan cara melaksanakannya dalam Python.
Outlier ialah pemerhatian data yang jauh secara berangka daripada nilai data lain. Nilai ini berada di luar julat data taburan normal. Set data mesti mengandungi 67% daripada rekod pada sisihan piawai pertama, 95% daripada data pada sisihan piawai kedua, dan 99.7% daripada mata pada sisihan piawai ketiga untuk mencapai taburan normal. Dalam erti kata lain, titik data harus terletak di antara julat kuartil pertama dan ketiga. Kami menganggap rekod di bawah kuartil pertama dan di atas kuartil ketiga sebagai outlier atau outlier.
Seperti mana-mana ujian hipotesis statistik lain, ujian Grubbs juga boleh meluluskan atau menolak hipotesis nol (H0) atau hipotesis alternatif (H1). Ujian Grubbs ialah ujian yang mengesan outlier dalam set data.
Kami boleh melakukan ujian Grubbs dalam dua cara: Ujian satu sisi dan Ujian dua belah, untuk set data univariate atau sampel hampir normal dengan taburan sekurang-kurangnya tujuh pembolehubah. Ujian ini juga dipanggil ujian sisihan pelajar melampau atau ujian baki ternormal maksimum.
Ujian Grubbs menggunakan andaian berikut -
Null (H0): Set data tidak mempunyai outlier.
Alternatif (H1): Set data hanya mempunyai satu outlier.
Python boleh menangani sebarang cabaran pengaturcaraan dengan koleksi perpustakaannya yang luas. Perpustakaan ini menyediakan kaedah terbina dalam yang boleh digunakan secara langsung untuk melaksanakan sebarang operasi, ujian statistik, dsb. Begitu juga, Python mempunyai perpustakaan yang mengandungi kaedah untuk melaksanakan ujian Grubbs untuk mengesan outlier. Walau bagaimanapun, kami akan meneroka dua cara untuk melaksanakan ujian Grubbs dalam Python: fungsi terbina dalam dalam perpustakaan dan melaksanakan formula dari awal.
Mari kita pasang perpustakaan outlier_utils dahulu menggunakan arahan berikut.
!pip install outlier_utils
Sekarang mari buat set data yang mengandungi outlier dan lakukan ujian Grubbs.
grubbs.test(data, alpha=.05)
data - Vektor angka nilai data.
alpha - Tahap kepentingan ujian.
Dalam kaedah ini, pengguna mesti menggunakan fungsi smirnov_grubbs.test() daripada pakej outlier dan lulus data yang diperlukan sebagai input untuk menjalankan ujian Grubb.
import numpy as np from outliers import smirnov_grubbs as grubbs #define data data = np.array([ 5, 14, 15, 15, 14, 19, 17, 16, 20, 22, 8, 21, 28, 11, 9, 29, 40]) #perform Grubbs' test grubbs.test(data, alpha=.05)
array([ 5, 14, 15, 15, 14, 19, 17, 16, 20, 22, 8, 21, 28, 11, 9, 29])
Kod di atas hanya bermula dengan memuatkan perpustakaan dan data, dan akhirnya menggunakan kaedah "ujian" untuk melakukan ujian Grubbs pada data ini. Ujian ini mengesan outlier pada kedua-dua belah (kiri dan kanan), atau nilai di bawah kuartil pertama dan di atas kuartil ketiga. Data hanya mempunyai 1 outlier (40), yang telah dialih keluar menggunakan ujian Grubbs.
grubbs.max_test(data, alpha=.05)
Dalam kaedah ini, pengguna mesti memanggil fungsi grubbs.min_test() untuk mendapatkan nilai outlier minimum daripada set data yang disediakan, atau memanggil fungsi grubbs.max_test() untuk mendapatkan nilai outlier maksimum daripada set data yang disediakan kepada Ujian Grubb satu sisi telah diperolehi.
import numpy as np from outliers import smirnov_grubbs as grubbs #define data data = np.array([5, 14, 15, 15, 14, 19, 17, 16, 20, 22, 8, 21, 28, 11, 9, 29, 40]) #perform Grubbs' test for minimum value is an outlier print(grubbs.min_test(data, alpha=.05)) #perform Grubbs' test for minimum value is an outlier grubbs.max_test(data, alpha=.05)
[ 5 14 15 15 14 19 17 16 20 22 8 21 28 11 9 29 40] array([ 5, 14, 15, 15, 14, 19, 17, 16, 20, 22, 8, 21, 28, 11, 9, 29])
Ujian Grubbs satu sisi mengesan outlier di bawah kuartil pertama atau di atas kuartil ketiga. Kita dapat melihat bahawa kaedah min_test mengalih keluar outlier dari bahagian terkecil data, manakala kaedah max_test mengalih keluar outlier dari bahagian atas data.
Di sini kita akan menggunakan Python untuk melaksanakan formula ujian Grubbs berikut. Kami akan menggunakan perpustakaan Numpy dan Scipy untuk mencapai ini.
g_calculated = numerator/sd_x g_critical = ((n - 1) * np.sqrt(np.square(t_value_1))) / (np.sqrt(n) * np.sqrt(n - 2 + np.square(t_value_1)))
Langkah pelaksanaan adalah seperti berikut -
Kira purata nilai set data.
Kira sisihan piawai bagi nilai set data.
Untuk melaksanakan formula ujian Grubbs, hitung pengangka dengan menolak nilai setiap nilai dalam set data daripada minnya.
Bahagikan nilai pengangka dengan sisihan piawai untuk mendapatkan markah yang dikira.
Kira markah kritikal untuk nilai yang sama.
Jika nilai kritikal lebih besar daripada nilai yang dikira, tiada outlier dalam set data, jika tidak ada outlier.
import numpy as np import scipy.stats as stats ## define data x = np.array([12,13,14,19,21,23]) y = np.array([12,13,14,19,21,23,45]) ## implement Grubbs test def grubbs_test(x): n = len(x) mean_x = np.mean(x) sd_x = np.std(x) numerator = max(abs(x-mean_x)) g_calculated = numerator/sd_x print("Grubbs Calculated Value:",g_calculated) t_value_1 = stats.t.ppf(1 - 0.05 / (2 * n), n - 2) g_critical = ((n - 1) * np.sqrt(np.square(t_value_1))) / (np.sqrt(n) * np.sqrt(n - 2 + np.square(t_value_1))) print("Grubbs Critical Value:",g_critical) if g_critical > g_calculated: print("We can see from the Grubbs test that the calculated value is less than the crucial value. Recognize the null hypothesis and draw the conclusion that there are no outliers\n") else: print("We see from the Grubbs test that the estimated value exceeds the critical value. Reject the null theory and draw the conclusion that there are outliers\n") grubbs_test(x) grubbs_test(y)
Grubbs Calculated Value: 1.4274928542926593 Grubbs Critical Value: 1.887145117792422 We can see from the Grubbs test that the calculated value is less than the crucial value. Recognize the null hypothesis and draw the conclusion that there are no outliers Grubbs Calculated Value: 2.2765147221587774 Grubbs Critical Value: 2.019968507680656 We see from the Grubbs test that the estimated value exceeds the critical value. Reject the null theory and draw the conclusion that there are outliers
Hasil ujian Grubb menunjukkan bahawa tatasusunan x tidak mempunyai apa-apa outlier, tetapi y mempunyai 1 outlier.
Kami mempelajari tentang outlier dan ujian Grubbs dalam Python dalam artikel ini. Mari kita akhiri artikel ini dengan beberapa perkara penting.
Outlier ialah rekod yang berada di luar julat antara kuartil.
Outlier tidak mematuhi taburan normal set data.
Kita boleh menggunakan ujian statistik hipotesis Grubbs untuk mengesan outlier.
Kami boleh melaksanakan ujian Grubbs menggunakan kaedah terbina dalam yang disediakan dalam perpustakaan outlier_utils.
Ujian Grubbs dua belah mengesan dan mengeluarkan outlier di bahagian kiri dan kanan.
Walau bagaimanapun, ujian Grubbs sebelah akan mengesan outlier di kedua-dua belah pihak.
Atas ialah kandungan terperinci Bagaimana untuk melakukan ujian Grubbs dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!