import numpy as np
import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as mp def get_data_zs(inputfile):
data = pd.read_excel(inputfile, index_col='Id', encoding='gb18030')
data_zs = 1.0 * (data - data.mean()) / data.std()
return data, data_zs def model_data_zs(data, k, b):
model = KMeans(n_clusters=k, n_jobs=4, max_iter=b)
model.fit(data_zs) # 标准化数据及其类别
r = pd.concat(
[data_zs, pd.Series(model.labels_, index=data.index)], axis=1)
# print(r.head())
# 每个样本对应的类别
r.columns = list(data.columns) + [u'聚类类别'] # 重命名表头
return model, r, k def make_norm(model, k):
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)
return norm def draw_discrete_point(threshold):
mp.rcParams['font.sans-serif'] = ['SimHei']
mp.rcParams['axes.unicode_minus'] = False
norm[norm <= threshold].plot(style='go') # 正常点 discrete_points = norm[norm > threshold] # 离散点阈值
discrete_points.plot(style='rs')
# print(discrete_points) for i in range(len(discrete_points)): # 离群点做标记
id = discrete_points.index[i]
n = discrete_points.iloc[i]
mp.annotate('(%s,%0.2f)' % (id, n), xy=(id, n), xytext=(id, n))
mp.xlabel(r'编号')
mp.ylabel(r'相对距离')
mp.show() if __name__ == '__main__':
inputfile = 'data/consumption_data.xls'
threshold = 2 # 离散点阈值
k = 3 # 聚类类别
b = 500 # 聚类最大循环次数
data, data_zs = get_data_zs(inputfile)
model, r, k = model_data_zs(data, k, b)
norm = make_norm(model, k)
draw_discrete_point(threshold)
print('All Done')

显示结果:

python 离群点检测的更多相关文章

  1. 30行Python代码实现人脸检测

    参考OpenCV自带的例子,30行Python代码实现人脸检测,不得不说,Python这个语言的优势太明显了,几乎把所有复杂的细节都屏蔽了,虽然效率较差,不过在调用OpenCV的模块时,因为模块都是C ...

  2. 离群点检测与序列数据异常检测以及异常检测大杀器-iForest

    1. 异常检测简介 异常检测,它的任务是发现与大部分其他对象不同的对象,我们称为异常对象.异常检测算法已经广泛应用于电信.互联网和信用卡的诈骗检测.贷款审批.电子商务.网络入侵和天气预报等领域.这些异 ...

  3. 深度学习 + OpenCV,Python实现实时视频目标检测

    使用 OpenCV 和 Python 对实时视频流进行深度学习目标检测是非常简单的,我们只需要组合一些合适的代码,接入实时视频,随后加入原有的目标检测功能. 在本文中我们将学习如何扩展原有的目标检测项 ...

  4. 【python+opencv】直线检测+圆检测

     Python+OpenCV图像处理—— 直线检测 直线检测理论知识: 1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进 ...

  5. C#下实现的K-Means优化[1]-「离群点检测」

    资源下载 #本文PDF版下载 C#下实现的K-Means优化[1]-「离群点检测」 前言 在上一篇博文中,我和大家分享了「C # 下实现的多维基础K-MEANS聚类」的[C#下实现的基础K-MEANS ...

  6. Envoy:离群点检测 outlier detection

    outlier detection 在异常检测领域中,常常需要决定新观察的点是否属于与现有观察点相同的分布(则它称为inlier),或者被认为是不同的(称为outlier).离群是异常的数据,但是不一 ...

  7. 解读ICDE'22论文:基于鲁棒和可解释自编码器的无监督时间序列离群点检测算法

    摘要:本文提出了两个用于无监督的具备可解释性和鲁棒性时间序列离群点检测的自动编码器框架. 本文分享自华为云社区<解读ICDE'22论文:基于鲁棒和可解释自编码器的无监督时间序列离群点检测算法&g ...

  8. 异常点/离群点检测算法——LOF

    http://blog.csdn.net/wangyibo0201/article/details/51705966 在数据挖掘方面,经常需要在做特征工程和模型训练之前对数据进行清洗,剔除无效数据和异 ...

  9. Python QQ群

    微信公众号:Python中文社区 Python初级技术交流QQ群:152745094Python高级技术交流QQ群:273186166Python网络爬虫组QQ群:206241755PythonWeb ...

随机推荐

  1. mysql Access denied for user root @localhost (using password:YES)错误

    C:\AppServ\MySQL> mysql -u root -p Enter password:  ERROR 1045 (28000): Access denied for user 'r ...

  2. 【1】HTTP协议和Socket接口区别

    内容提要: 1.网络七层模型 2.什么是HTTP协议 3.什么是Socket接口 1.网络七层模型 第一层:物理层 为设备之间的信息提供传输提供可靠环境,那么这个环境是什么呢? 如:同轴电缆,插头,接 ...

  3. (04) springboot 下的springMVC和jsp和mybatis

    1. springboot 和springmvc下的注解完全一样(新增了一些有用的) 常用的注解如下: @Controller @RestController= @Controller + @Resp ...

  4. windows下Redis安装及利用java操作Redis

    一.windows下Redis安装 1.Redis下载 下载地址:https://github.com/MicrosoftArchive/redis 打开下载地址后,选择版本 然后选择压缩包 下载 R ...

  5. windows异步通知I/O模型

    回声服务器端: #include <stdio.h> #include <stdlib.h> #include <WinSock2.h> #define BUF_S ...

  6. Cross-Validation & Nested Cross-Validation

    分享stackexchange的一篇问答:https://stats.stackexchange.com/questions/11602/training-with-the-full-dataset- ...

  7. java使用SimpleDateFormat实现字符串和日期的相互转换

    public class TimeTwo { public static void main(String[] args) throws ParseException{ String s = &quo ...

  8. react-redux-数据流

    redux是严格的单向数据流 1,store.dispatch(action) 2, reducer(previousState, action), reducer是纯函数.它仅仅用于计算下一个 st ...

  9. JS获取伪元素的属性

    window下的getComputedStyle属性.getPropertyValue属性 // 获取 .element:before 的 color 值 var color = window.get ...

  10. MySQL 必知必会学习笔记(常用命令一)

    SHOW DATABASES;USE LangLibCEE;SHOW TABLES;SHOW COLUMNS FROM customers;DESC customers; SHOW STATUS WH ...