格拉布斯准则的应用(Python)
格拉布斯準則的應用
- 前言
- 一、格拉布斯準則是什么?
- 1.Gi值
- 2.格拉布斯臨界值表
- 二、使用步驟
- 1.引入代碼
- 2.使用Outliers_Remover函數
- 3.注意事項
- 總結
前言
大家好,我又回來了ヽ( ̄▽ ̄)ノ
這次所帶來的是格拉布斯(Grubbs)臨界值表的應用
在我想比較兩個數組的平均數的時候,發現一組數中非常大的數字會相當影響該組數的平均數,然后我也不想用中位數來進行代替 ̄へ ̄
所以,我就在想有什么科學的方法,能認定什么是一組數中非常大的數字(也就是異常值),然后我就可以把它剔除出去了( ̄▽ ̄)~*
果不其然,前人的智慧當中有“格拉布斯準則”這么一個很科學的方法剔除異常值
所以讓我們話不多說,開始我們的講解吧(* ̄︶ ̄)
一、格拉布斯準則是什么?
相信大家都可以在網絡上找到相關的具體知識,在此就不在贅述。
總網絡上的知識而言之,就是計算Gi值與格拉布斯臨界值表上所對應的值GP(n)相比較,若Gi值大于GP(n)值則為異常,反之則不為異常
1.Gi值
Gi值的計算是該數字的殘差除于標準差
Gi=xi?xˉsGi = \dfrac{x_i-\bar{x}}{s} Gi=sxi??xˉ?
2.格拉布斯臨界值表
我是在百度文庫上找的圖表,點擊下方超鏈接瀏覽
格拉布斯臨界值表
或復制鏈接自行瀏覽
https://wenku.baidu.com/view/cfce6d64c381e53a580216fc700abb68a882ad48.html
二、使用步驟
1.引入代碼
def Average_Number(List):return sum(List) / len(List)def Variance(List):temp_List = []ave = Average_Number(List)for num in List:temp_List.append(((num - ave) ** 2) / len(List))return sum(temp_List)def Standard_Deviation(List):return Variance(List) ** (1/2)def Gi(number, lst):if len(lst) <= 17:average = Average_Number(lst)SD = Standard_Deviation(lst)gi = (abs(number - average)) / SDreturn gielse:exit(0) def Grubbs_Table(n):if n == 3:return [1.148, 1.153, 1.155, 1.155, 1.155]elif n == 4:return [1.425, 1.463, 1.481, 1.492, 1.496]elif n == 5:return [1.602, 1.672, 1.715, 1.749, 1.764]elif n == 6:return [1.729, 1.822, 1.887, 1.944, 1.973]elif n == 7:return [1.828, 1.938, 2.020, 2.097, 2.139]elif n == 8:return [1.909, 2.032, 2.126, 2.220, 2.274]elif n == 9:return [1.977, 2.110, 2.215, 2.323, 2.387]elif n == 10:return [2.036, 2.176, 2.290, 2.410, 2.482]elif n == 11:return [2.088, 2.234, 2.355, 2.485, 2.564]elif n == 12:return [2.134, 2.285, 2.412, 2.550, 2.636]elif n == 13:return [2.175, 2.331, 2.462, 2.607, 2.699]elif n == 14:return [2.213, 2.371, 2.507, 2.659, 2.755]elif n == 15:return [2.247, 2.409, 2.549, 2.705, 2.806]elif n == 16:return [2.279, 2.443, 2.585, 2.747, 2.852]elif n == 17:return [2.309, 2.475, 2.620, 2.785, 2.894]def Outliers_Remover(lst, confidence_level = 1):length = len(lst)lst = lstmark = []for i in range(0, length):n = Gi(lst[i], lst)if n > Grubbs_Table(len(lst))[confidence_level - 1]:mark.append(i)for j in mark:lst.pop(j)return lst2.使用Outliers_Remover函數
- 首先創建個明顯具有異常值的列表lst = [1, 2, 3, 4, 10000]
- 然后給該函數傳入需要去除異常值的列表lst_out = mAth.Outliers_Remover(lst, confidence_level=5)
- 輸出經過去除異常值操作的列表print(lst_out)
- 輸出結果
3.注意事項
-
由于我個人的原因,該函數目前只支持長度為17的列表。
因為我太懶了︿( ̄︶ ̄)︿
-
Outliers_Remover函數的第二個參數為置信等級為1至5的整數,可以不用傳入,默認為1。
- 置信等級為1,則是相對應格拉布斯臨界值表的90.00%的置信概率
- 置信等級為2,則是相對應格拉布斯臨界值表的95.00%的置信概率
- 置信等級為3,則是相對應格拉布斯臨界值表的97.50%的置信概率
- 置信等級為4,則是相對應格拉布斯臨界值表的99.00%的置信概率
- 置信等級為5,則是相對應格拉布斯臨界值表的99.50%的置信概率
總結
以上就是我對于格拉布斯準則的理解與應用,希望能對你們有所幫助ヾ(????)ノ"
總結
以上是生活随笔為你收集整理的格拉布斯准则的应用(Python)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 题目【物联网控制技术第五章】【幅频特性】
- 下一篇: WRF系列教程1:WRF如何得到更好的模