25、基于真实数据集的离群点检测
import numpy as np
from sklearncovariance import EllipticEnvelope
from sklearnsvm import OneClassSVM
import matplotlibpyplot as plt
import matplotlibfont_manager
from sklearndatasets import load_wine
pltrcParams['fontsans-serif'] = ['SimHei']
pltrcParams['axesunicode_minus'] = False
# 定义要使用的“分类器”
classifiers = {
"Empirical Covariance": EllipticEnvelope(support_fraction=1,
contamination=025),
"Robust Covariance (Minimum Covariance Determinant)":
EllipticEnvelope(contamination=025),
"OCSVM": OneClassSVM(nu=025, gamma=035)}
colors = ['m', 'g', 'b']
legend1 = {}
legend2 = {}
# 获取数据
X1 = load_wine()['data'][:, [6, 9]] # 两簇
#利用多个分类器学习离群点检测的前沿
xx1, yy1 = npmeshgrid(nplinspace(-1, 55, 500), nplinspace(-25, 19, 500))
for i, (clf_name, clf) in enumerate(classifiersitems()):
pltfigure(1)
clffit(X1)
Z1 = clfdecision_function(npc_[xx1ravel(), yy1ravel()])
Z1 = Z1reshape(xx1shape)
legend1[clf_name] = pltcontour(
xx1, yy1, Z1, levels=[0], linewidths=2, colors=colors[i])
legend1_values_list = list(legend1values())
legend1_keys_list = list(legend1keys())
# 绘制结果(数据点云的形状)
pltfigure(1) # 两簇
plttitle("基于真实数据集的离群点检测(葡萄酒识别)")
pltscatter(X1[:, 0], X1[:, 1], color='black')
pltxlim((xx1min(), xx1max()))
pltylim((yy1min(), yy1max()))
pltlegend((legend1_values_list[0]collections[0],
legend1_values_list[1]collections[0],
legend1_values_list[2]collections[0]),
(legend1_keys_list[0], legend1_keys_list[1], legend1_keys_list[2]),
loc="upper center",
prop=matplotlibfont_managerFontProperties(size=11))
pltylabel("color_intensity")
pltxlabel("flavanoids")
pltshow()
三监管不合理检查异常值
三监管不合理检查异常值的方法包括:
1 离群点检测:离群点检测是检测数据中的异常值的一种常用方法,它可以帮助发现数据中的离群值,如果数据点落在一个明显的离群点,则可以认为它是一个异常值。
2 盒须图检测:盒须图是一种用于检测异常值的常用方法,它可以帮助发现数据中的离群值,如果数据点落在外部置信区间之外,则可以认为它是一个异常值。
3 统计检测:统计检测是检测数据中的异常值的一种常用方法,它可以帮助发现数据中的离群值,如果数据点的统计值显著偏离正常分布,则可以认为它是一个异常值。
4 基于模型的检测:基于模型的检测是检测数据中的异常值的一种常用方法,它可以帮助发现数据中的离群值,如果数据点的模型预测值显著偏离实际值,则可以认为它是一个异常值。
有区别,做数据标准化可以有效减少异常值(outlier)的影响,但是不能解决"dominant feature"的问题(也就是说,异常检测或者其他机器学习算法的最终结果主要由少数的几个domninant feature控制,有点垄断那种意思。)
离群点个数计算:可以用公式取得每个值与均值的绝对差值,绝对差值多大的时候判断为离群值,绝对差值=ABS(值-average(所有值))。
离群值的定义各个行业有可能有不同的标准。国际上比较通用的标准是以低于箱形图(Boxplot)下箱体的15倍个四分位间距(IQR),或是高于箱形图(Boxplot)上箱体的15倍个四分位间距作为离群值的定义,当这个标准提高至3倍个四分位间距时定义为极端值。
离群点
概括的说,离群点是由于系统受外部干扰而造成的。但是,形成离群点的系统外部干扰是多种多样的。首先可能是采样中的误差,如记录的偏误,工作人员出现笔误,计算错误等,都有可能产生极端大值或者极端小值。
其次可能是被研究现象本身由于受各种偶然非正常的因素影响而引起的,例如。在人口死亡序列中,由于某年发生了地震,使该年度死亡人数剧增,形成离群点;在股票价格序列中,由于受某项政策出台或某种谣传的刺激,都会出现极增,极减现象,变现为序列中的离群点。
离群因子算法主要有基于统计、聚类、分类、信息论、距离、密度等相关的方法。
其中算法思想是局部离群因子(LOF,又叫局部异常因子)算法是Breunig于2000年提出的一种基于密度的局部离群点检测算法,该方法适用于不同类簇密度分散情况迥异的数据。如下图中,集合C1是低密度区域,集合C2是高密度区域,依据传统的基于密度的离群点检测算法,点p与C2中邻近点的距离小于C1中任何一个数据点与其邻近点的距离,点p会被看作是正常的点,而在局部来看,点p却是事实上的孤立点,LOF算法即可以有效地实现对该种情形的离群点检测。
以上就是关于25、基于真实数据集的离群点检测全部的内容,包括:25、基于真实数据集的离群点检测、三监管不合理检查异常值、离群点检测前先做数据标准化和不做数据标准化是否有区别,那种更合理等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)