对于正态分布的随机变量而言,其概率密度满足
μ是随机变量的均值,σ是随机变量的标准差。 对于正态分布的曲线,一般大家都很熟悉,由于概率密度函数关于x=μ对称,在样本个数较多的情况下,有以下三个概率成立
即绝大多数样本分布在[μ-3σ,μ+3σ]闭区间之内,只有极少数的样本可能分布在该区间之外,概率不到0.003,几乎不可能发生,是小概率事件,这即为3σ原则。 我们通常把这些极少数分布在[μ-3σ,μ+3σ]区间之外的样本称之为“坏值”。
import pandas as pdimport matplotlib.pyplot as pltimport numpy as npfrom sklearn.preprocessing import StandardScalerdef three_sigma(y): #数据标准化处理 yStd = StandardScaler().fit_transform(y) result = [] for index, value in enumerate(yStd): if abs(value – np.mean(yStd)) > 3 * np.std(yStd): result.append(index) return resultif __name__==”__main__”: dataframe = pd.read_csv(“32_finaldata_lowfreq_magn.csv”).head(5000)[“average”] y = dataframe.values X = np.arange(0, len(y), 1) train_data = np.vstack((X, y)).T #X,y按列合并 y_Hdim = y.reshape((len(y), 1)) dirty_data = three_sigma(y_Hdim) plt.plot(train_data[:, 0], train_data[:, 1], color=”c”) for i in range(len(dirty_data)): plt.text(dirty_data[i], y[dirty_data[i]], “(“+str(dirty_data[i])+”,”+str(y[dirty_data[i]])+”)”) plt.show()