Python数据挖掘014-离群点检测

离群点检测是数据挖掘中的第五个经典应用领域。它的任务是发现于大部分其他对象显著不同的对象。

离群点的属性值明显偏离期望的或常见的属性值,所以离群点检测也称为偏差检测。已经被广泛应用于电信和信用卡的诈骗检测,贷款审批,电子商务,网络入侵,电子商务,天气预报等领域。

1. 离群点的检测方法

image.png

2. 基于模型的离群点检测方法

通过估计概率分布的参数来建立一个数据模型,如果一个数据对象不饿能很好的同该模型拟合,即如果它很可能不服从该分布,则它可能是一个离群点。

下图是正态分布离群点检测的方法之一:

image.png

混合模型是一种特殊的统计模型,它使用若干统计分布对数据建模,每一个分布对应一个簇,而每个分布的参数提供对应簇的描述,通常用中心和发散描述。

混合模型将数据看作从不同的概率分布得到的观察值的集合,概率分布可以是任何分布,但通常是多元正态的,

在有些情况下很难建立模型,例如,因为数据的统计分布未知,或没有训练数据可用,这种情况下可以考虑其他不需要建立模型的检测方法。

3. 基于聚类的离群点检测方法

聚类分析用于发现局部强相关的对象组,而异常检测用来发现不与其他对象强相关的对象,故而聚类可以用于离群点检测,有两种基于聚类的离群点检测方法:

3.1 丢弃远离其他簇的小簇

这种方法可以简化为丢弃小于某个最小阈值的所有簇。这种方法可以和其他聚类技术一起使用,但需要最小簇大小和小簇与其他簇之间距离的阈值。这种方案对簇个数的选择高度敏感。

代码为:

data_zs = 1.0*(data - data.mean())/data.std() #数据标准化
from sklearn.cluster import KMeans
k=3 # 聚类的类别
iteration = 500 #聚类最大循环次数
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['聚类类别'] == 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) #合并

threshold = 2 #离散点阈值

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
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'相对距离')
image.png

上面的方法是:先用KMeans对数据点进行聚类,计算出每个数据点的相对距离,该相对距离小于等于阈值的认为是正常点,大于阈值的是离群点,绘制相对距离图便可以看出来。

参考资料:

《Python数据分析和挖掘实战》张良均等

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,137评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,824评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,465评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,131评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,140评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,895评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,535评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,435评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,952评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,081评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,210评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,896评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,552评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,089评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,198评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,531评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,209评论 2 357

推荐阅读更多精彩内容

  • 什么是离群点   离群点是一个数据对象,它显著不同于其他数据对象,好像它是被不同的机制产生的一样。有时也称非离群点...
    尼小摩阅读 4,987评论 0 6
  • 异常对象被称作离群点。异常检测也称偏差检测和例外挖掘。常见的异常成因:数据来源于不同的类(异常对象来自于一个与大多...
    尼小摩阅读 3,030评论 0 1
  • 单选题 1. 某超市研究销售纪录数据后发现,买啤酒的人很大概率也会购买尿布,这种属于数据挖掘的哪类问题?(A) A...
    山的那边是什么_阅读 33,563评论 2 59
  • 离群点检测是数据挖掘中重要的一部分,它的任务是发现与大部分其他对象显著不同的对象。大部分数据挖掘方法都将这种差异信...
    afansdie阅读 10,708评论 0 3
  • 如果你曾在超市买过牛奶,那么你就可以理解服务端缓存和浏览器端缓存。 如果你是一个狂热的互联网用户(你大概就是),那...
    哈维尔23456阅读 465评论 0 0