格拉布斯準則(java程式碼)
package rule; import java.util.HashMap; import java.util.List; import java.util.Map; //格拉布斯準則 public class GLBS { static Map<Double, Double> map=new HashMap<Double, Double>(); List<Double> list; double mean; //均值 double mean2; //平方均值 int listNum; double variance; //標準差 public GLBS(List<Double> list) { this.list=list; if(map.size()==0) { initMap(); } mean_variance(); } /** * 均值和方差 */ private void mean_variance() { listNum= list.size(); for(Double d: list) { mean+=d; mean2+=d*d; } mean/=listNum; //均值 mean2/=listNum; variance=Math.sqrt(mean2-mean*mean); // 標準差 } private void initMap() { double[][] crisis= { {0,0,0,1.148,1.425,1.602,1.729,1.828,1.909,1.977,2.036,2.088,2.134,2.175,2.213,2.247,2.279,2.309,2.335, 2.361,2.385,2.408,2.429,2.448,2.467,2.486,2.502,2.519,2.534,2.549,2.583,2.577,2.591,2.604, 2.616,2.628,2.639,2.65,2.661,2.671,2.682,2.692,2.7,2.71,2.719,2.727,2.736,2.744,2.753,2.76, 2.768,2.775,2.783,2.79,2.798,2.804,2.811,2.818,2.824,2.831,2.837,2.842,2.849,2.854,2.86,2.866, 2.871,2.877,2.883,2.888,2.893,2.897,2.903,2.908,2.912,2.917,2.922,2.927,2.931,2.935,2.94,2.945, 2.949,2.953,2.957,2.961,2.966,2.97,2.973,2.977,2.981,2.984,2.989,2.993,2.996,3,3.003,3.006, 3.011,3.014,3.017}, {0,0,0,1.153,1.463,1.672,1.822,1.938,2.032,2.11,2.176,2.234,2.285,2.331,2.371,2.409,2.443,2.475,2.501, 2.532,2.557,2.58,2.603,2.624,2.644,2.663,2.681,2.698,2.714,2.73,2.745,2.759,2.773,2.786,2.799, 2.811,2.823,2.835,2.846,2.857,2.866,2.877,2.887,2.896,2.905,2.914,2.923,2.931,2.94,2.948,2.956, 2.943,2.971,2.978,2.986,2.992,3,3.006,3.013,3.019,3.025,3.032,3.037,3.044,3.049,3.055,3.061, 3.066,3.071,3.076,3.082,3.087,3.092,3.098,3.102,3.107,3.111,3.117,3.121,3.125,3.13,3.134,3.139, 3.143,3.147,3.151,3.155,3.16,3.163,3.167,3.171,3.174,3.179,3.182,3.186,3.189,3.193,3.196,3.201, 3.204,3.207}, {0,0,0,1.155,1.481,1.715,1.887,2.02,2.126,2.215,2.29,2.355,2.412,2.462,2.507,2.549,2.585,2.62,2.651, 2.681,2.709,2.733,2.758,2.781,2.802,2.822,2.841,2.859,2.876,2.893,2.908,2.924,2.938,2.952, 2.965,2.979,2.991,3.003,3.014,3.025,3.036,3.046,3.057,3.067,3.075,3.085,3.094,3.103,3.111,3.12, 3.128,3.136,3.143,3.151,3.158,3.166,3.172,3.18,3.186,3.193,3.199,3.205,3.212,3.218,3.224,3.23, 3.235,3.241,3.246,3.252,3.257,3.262,3.267,3.272,3.278,3.282,3.287,3.291,3.297,3.301,3.305, 3.309,3.315,3.319,3.323,3.327,3.331,3.335,3.339,3.343,3.347,3.35,3.355,3.358,3.362,3.365,3.369, 3.372,3.377,3.38,3.383}, {0,0,0,1.155,1.492,1.749,1.944,2.097,2.22,2.323,2.41,2.485,2.55,2.607,2.659,2.705,2.747,2.785,2.821, 2.954,2.884,2.912,2.939,2.963,2.987,3.009,3.029,3.049,3.068,3.085,3.103,3.119,3.135,3.15,3.164, 3.178,3.191,3.204,3.216,3.228,3.24,3.251,3.261,3.271,3.282,3.292,3.302,3.31,3.319,3.329,3.336, 3.345,3.353,3.361,3.388,3.376,3.383,3.391,3.397,3.405,3.411,3.418,3.424,3.43,3.437,3.442,3.449, 3.454,3.46,3.466,3.471,3.476,3.482,3.487,3.492,3.496,3.502,3.507,3.511,3.516,3.521,3.525,3.529, 3.534,3.539,3.543,3.547,3.551,3.555,3.559,3.563,3.567,3.57,3.575,3.579,3.582,3.586,3.589,3.593, 3.597,3.6}}; for(int i=3; i<=100; i++) { add(i, 0.90, crisis[0][i]); add(i, 0.95, crisis[1][i]); add(i, 0.975, crisis[2][i]); add(i, 0.99, crisis[3][i]); } add(101, 0.90, 3.02); add(101, 0.95, 3.21); add(101, 0.975, 3.39); add(101, 0.99, 3.65); } private void add(int i, double d, double e) { map.put(i+d, e); } private double Subtract(int n, double a, double value) { if(n>100) { n=101; } return value-map.get(n+a); } /** * @return 返回剔除了所有異常資料的list */ public List<Double> clipList() { int i=0; while(clipOne()) { if(listNum<3) { break; } i++; } System.out.println(i); return list; } /** * 至多剔除一個異常資料 * @return */ private boolean clipOne() { double t1=Math.abs(list.get(0)-mean)/variance; double tn=Math.abs(list.get(listNum-1)-mean)/variance; double sub1=Subtract(listNum, 0.90, t1); double subn=Subtract(listNum, 0.90, tn); if(sub1>0||subn>0) { double remove; if(sub1>subn) { remove=list.get(0); list.remove(0); } else { remove=list.get(listNum-1); list.remove(listNum-1); } mean=(listNum*mean-remove)/(listNum-1); //均值更新 mean2=(listNum*mean2-remove*remove)/(listNum-1); variance=mean2-mean*mean; //方差更新 listNum--; //個數更新 return true; } return false; } public double getMean() { return mean; } }
相關推薦
格拉布斯準則(java程式碼)
package rule; import java.util.HashMap; import java.util.List; import java.util.Map; //格拉布斯準則 public class GLBS { static Map<Double,
【資料異常校驗】格拉布斯準則(Grubbs Criterion)處理資料異常
簡介 Grubbs測試(以1950年發表測試的Frank E. Grubbs命名),也稱為最大歸一化殘差測試或極端學生化偏差測試,是一種統計測試,用於檢測假設的單變數資料集中的異常值來自正常分佈的人口。 定義 格拉布斯的測試基於正態假設。也就是說,在應用Grubbs
利用格拉布斯準則,剔除異常資料
一:步驟解說: 1、排列資料 Collections.sort(dataArrayList); 2、求平均值、標準差 3、計算Gi值:每個資料與平均數的殘差 / 標準差 4、用這個Gi 值 與 格拉布斯臨界表表中的 臨界值比較,越大,越異常,需剔除 注: 這個臨
如何通過程式(java程式碼)提高你的部落格訪問量
最近對寫部落格比較感興趣,我想對於每一個寫部落格的人來說,都渴望自己寫的部落格能夠被別人看到,或者在搜尋引擎中搜索時容易被搜尋到,如何讓你的部落格容易被人搜尋到,從而提高訪問量呢?這裡我最推薦大家的方法是儘量原創,寫一些新鮮有趣,別人沒有寫過的內容,然後標題,關
2017.12 CCF第一題:最小差值 (Java程式碼)
問題描述 給定n個數,請找出其中相差(差的絕對值)最小的兩個數,輸出它們的差值的絕對值。 輸入格式 輸入第一行包含一個整數n。 第二行包含n個正整數,相鄰整數之間使用一個空格分隔。 輸出格式 輸出一個整數,表示答案。 樣例輸入 5 1 5 4 8 20
CCF2018.3 第一題:跳一跳 (Java程式碼)
問題描述 近來,跳一跳這款小遊戲風靡全國,受到不少玩家的喜愛。 簡化後的跳一跳規則如下:玩家每次從當前方塊跳到下一個方塊,如果沒有跳到下一個方塊上則遊戲結束。 如果跳到了方塊上,但沒有跳到方塊的中心則獲得1分;跳到方塊中心時,若上一次的得分為1分或這是本局遊戲的第一次跳躍則此次得分為
CCF2018.9 第一題賣菜 (Java程式碼)
問題描述 在一條街上有n個賣菜的商店,按1至n的順序排成一排,這些商店都賣一種蔬菜。 第一天,每個商店都自己定了一個價格。店主們希望自己的菜價和其他商店的一致,第二天,每一家商店都會根據他自己和相鄰商店的價格調整自己的價格。具體的,每家商店都會將第二天的菜價設定為自己和相鄰商店第一天菜價
LeetCode-118.楊輝三角(java程式碼)
此處僅貼參考程式碼(程式碼可繼續調優,但平臺Accepted了,留點思考空間~) public List<List<Integer>> generate(int numRows) { List<List<Inte
記錄一個演算法題(java程式碼):統計正整數n的二進位制寫法中有多少個1
package ludims.main; import java.util.Scanner; public class myMain { public static void main(String[] args) { System.out.pri
File 程式(Java程式碼)
public static void main(String[] args) { /* * 宣告流物件 */ FileReader fr = null; BufferedReader br = null; StringBuffer sb = new StringBuffer();
Echarts餅圖柱形圖調整文字大小(java程式碼)
1.餅圖: Pie pie = new Pie(); pie.center("50%", "50%").radius(100); ItemStyle style = new ItemStyle(); Normal nor
PAT1037 在霍格沃茨找零錢(java實現)
題目地址:https://pintia.cn/problem-sets/994805260223102976/problems/994805284923359232 題目描述: 如果你是哈利·波特迷,你會知道魔法世界有它自己的貨幣系統 —— 就如海格告訴哈利的:“十七個銀西
矩陣式比較兩文字字串相似度(包含漢字)方法兩則(java程式碼)
package com.gsww.ctyxy.util; import java.text.NumberFormat; import java.util.Locale; /** * 比較兩個字串的相似度 */ public class AutomaticRating { /* pu
藍橋杯-----------------基礎訓練 數列排序(Java程式碼)
一、數列排序 問題描述:給定一個長度為n的數列,將這個數列按從小到大的順序排列。1<=n<=200。 二、解題思想: 對於排序,無論是資料結構還是自己手寫都有很多種方法進行解決。但是,
LeetCode 832. 翻轉影象(Java程式碼)
給定一個二進位制矩陣 A,我們想先水平翻轉影象,然後反轉影象並返回結果。 水平翻轉圖片就是將圖片的每一行都進行翻轉,即逆序。例如,水平翻轉 [1, 1, 0] 的結果是 [0, 1, 1]。 反轉圖片的意思是圖片中的 0 全部被 1 替換, 1 全部被 0 替換。例如,反
常見檔案操作(java程式碼)
位元組流和字元流概念 位元組流:位元組流讀取的時候,讀到一個位元組就返回一個位元組;主要用於讀取圖片,MP3,AVI視訊檔案。 字元流:字元流使用了位元組流讀到一個或多個位元組,如讀取
15位身份證號碼轉換成18位身份證號碼(java程式碼)
步驟:1. 兩位年份填充為四位;2. 生成最後一位校驗位; 程式碼如下: package com.mingo.common; import java.util.Scanner; public class IDcard15bitTo18bit {
ACM程式設計大賽-------- 最少錢幣數(Java程式碼)
【問題描述】 這是一個古老而又經典的問題。用給定的幾種錢幣湊成某個錢數,一般而言有多種方式。例如:給定了6種錢幣面值為2、5、10、20、50、100,用來湊 15元,可以用5個2元、1個5元,或者3個5元,或者1個5元、1個10元,等等。顯然,最少需要
Elasticsearch簡單操作(Java程式碼)
1.首先安裝Elasticsearch,配置相關檔案,並啟動服務 2.建立專案,匯入相關Jar包 3.建立ElasticsearchUtils類,裡面包括初始化操作和建立索引、更新索引、刪除索引、查詢索引 (1)初始化操作,需要傳入叢集名稱和ip地址,叢集名稱本例子使用elasticsearch配置檔
布隆過濾器(Bloom Filters)的原理及程式碼實現(Python + Java)
本文介紹了布隆過濾器的概念及變體,這種描述非常適合程式碼模擬實現。重點在於標準布隆過濾器和計算布隆過濾器,其他的大都在此基礎上優化。文末附上了標準布隆過濾器和計算布隆過濾器的程式碼實現(Java版和Python版) 本文內容皆來自 《Foundations of Computers Systems Rese