离群点的检验

摘要:
离群值检测是为了找到与大多数其他对象显著不同的对象。例如,离群值检测可以用于分析运动员的统计数据,以发现异常运动员。2) 基于接近度:定义数据对象之间的接近度度量,并将远离大多数点的对象视为异常值。特别是,如果删除对象导致目标显著改善,则可以将该对象视为异常值。
 

离群点检测是发现与大部分其他对象显著不同的对象。大部分数据挖掘都将这种差异信息视为噪声而丢弃,然而在一些应用中,异常点数据可能蕴含着更大的研究价值。

应用:电信和信用卡的诈骗检测、贷款审批、电子商务、网络入侵和天气预报等领域。例如,可以利用离群点检测分析运动员的统计数据,来发现异常的运动员。

离群点的成因:

数据来源于不同的类、自然变异、数据测量、收集误差

离群点的类型:

分类标准

分类名称

分类描述

从数据范围

全局离群点和局部离群点

从整体看,某些对象没有利群特征,但从局部看,却有一定的离群性

从数据类型

数值型离群点和分类型离群点

这是以数据集的属性类型进行划分的

从属性的个数

一维离群点和多维离群点

一个对象可能有一个或者多个属性

离群点检测方法

1)基于统计:构建一个概率分布模型,并计算对象符合该模型的概率,把具有低概率的对象视为离群点。该方法的前提是知道数据集服从什么分布。

2)基于临近度:在数据对象之间定义邻近性度量,把远离大部分点的对象视为离群点。

3)基于密度:考虑数据集可能存在不同密度区域这一事实,离群点是在低密度区域中的对象

4)基于聚类:

(1)丢弃远离其他簇的小簇

该过程可以简化为丢弃小于某个最小阈值的所有簇。

这个方法可以和其他任何簇类技术一起使用,但是需要最小簇大小的阈值以及小簇与其他簇之间距离的阈值。而且这种方案对簇个数的选择高度敏感,使用这个方案很难将离群点得分附加到对象上。

(2)聚类首先聚类所有对象,然后评估对象属于簇的程度。

可以用对象到它的的簇中心的距离来度量属于簇的程度 。特别的,如果删除一个对象导致该目标的显著改进,则可将该对象视为离群点。

距离的两种评估方法:绝对距离:对象到簇中心的距离

相对距离:对象到簇中心的距离/簇中所有点到簇中心距离的中位数

使用第二种方式来寻找离群点:

#-*- coding: utf-8 -*-

#使用K-Means算法聚类消费行为特征数据

import numpy as np

import pandas as pd

#参数初始化

inputfile = '../data/consumption_data.xls' #销量及其他属性数据

k = 3 #聚类的类别

threshold = 2 #离散点阈值

iteration = 500 #聚类最大循环次数

data = pd.read_excel(inputfile, index_col = 'Id') #读取数据

data_zs = 1.0*(data - data.mean())/data.std() #数据标准化

from sklearn.cluster import KMeans

model = KMeans(n_clusters = k, n_jobs = 4, max_iter = iteration) #分为k类,并发数4

model.fit(data_zs) #开始聚类

#标准化数据及其类别

r = pd.concat([data_zs, pd.Series(model.labels_, index = data.index)], axis = 1)  #每个样本对应的类别

r.columns = list(data.columns) + [u'聚类类别'] #重命名表头

norm = []

for i in range(k): #逐一处理

  norm_tmp = r[['R', 'F', 'M']][r[u'聚类类别'] == i]-model.cluster_centers_[i]

  norm_tmp = norm_tmp.apply(np.linalg.norm, axis = 1) #求出绝对距离

  norm.append(norm_tmp/norm_tmp.median()) #求相对距离并添加

norm = pd.concat(norm) #合并

import matplotlib.pyplot as plt

norm[norm <= threshold].plot(style = 'go') #正常点

discrete_points = norm[norm > threshold] #离群点

discrete_points.plot(style = 'ro')

for i in range(len(discrete_points)): #离群点做标记

  id = discrete_points.index[i]

  n = discrete_points.iloc[i]

  plt.annotate('(%s, %0.2f)'%(id, n), xy = (id, n), xytext = (id, n))

plt.xlabel(u'编号')

plt.ylabel(u'相对距离')

plt.show()

 离群点的检验第1张

 

免责声明:文章转载自《离群点的检验》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇spring bean属性property、ref使用方式(转载)使用CSS画图之三角形(一)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

mysql默认安装目录说明

MySQL安装完成后不象SQLServer默认安装在一个目录,它的数据库文件、配置文件和命令文件分别在不同的目录,了解这些目录非常重要,尤其对于Linux的初学者,因为Linux本身的目录结构就比较复杂,如果搞不清楚MySQL的安装目录那就无从谈起深入学习。 下面就介绍一下这几个目录。1、数据库目录/var/lib/mysql/2、配置文件/usr/sha...

yaml的用法

yaml是用来读配置文件的。 一般用yaml或者yml结尾创建文件,格式:key: value。然后在用的时候,像打开文件一样读,返回数据可直接转为字典 使用的时候必须先安装模块并导入。安装:pip install pyyaml 导入:import yaml 1、简单格式 使用yaml模块读取后.yaml文件,使用方法如下: 2、yaml文件.yaml...

从网页抓取数据的一般方法

首先要了解对方网页的运行机制 ,这可以用httpwacth或者httplook来看一下http发送和接收的数据。这两个工具应该说是比较简单易懂的。这里就不再介绍了。主要关注的内容是header和post的内容。一般会包括cookie,Referer页面和其他一些乱其八糟可能看不懂的变量,还有就是正常交互的参数,比如需要post或者get的querystri...

【GStreamer开发】GStreamer播放教程05——色彩平衡

目标 亮度,对比度,色度和饱和度都是常见的视频调节参数,也是GStreamer里面设置色彩平衡的参数。本教程将展示: 如何发现可用的色彩平衡通道 如何改变它们 介绍 《GStreamer基础教程05——集成GUI工具》里面已经解释了GObject接口:应用通过它们来获得特定功能,而不用去管具体的element的实现。 playbin2实现了色彩平衡的接...

drf—— drf的请求与响应

一、Request#常用属性 -data :前端以post请求提交的数据都在它中 -FILES :前端提交的文件 -query_params:就是原来的request.GET -重写了 __getattr__ -使用新的request.method其实取得就是原生request.method(通过反射实现)...

YOLOv3:训练自己的数据(附优化与问题总结)

环境说明 系统:ubuntu16.04 显卡:Tesla k80 12G显存 python环境: 2.7 && 3.6 前提条件:cuda9.0 cudnn7.0 opencv3.4.0 安装cuda和cudnn教程 安装opencv3.4.0教程 实现YOLOV3的demo 首先安装darknet框架,官网链接 git c...