python LOF算法

LOF 算法背景:

基于密度的离群点检测方法的关键步骤在于给每个数据点都分配一个离散度,其主要思想是:针对给定的数据集,对其中的任意一个数据点,如果在其局部邻域内的点都很密集,那么认为此数据点为正常数据点,而离群点则是距离正常数据点最近邻的点都比较远的数据点。通常有阈值进行界定距离的远近。在基于密度的离群点检测方法中,最具有代表性的方法是局部离群因子检测方法 (Local Outlier Factor, LOF)。

算法简介:

在众多的离群点检测方法中,LOF 方法是一种典型的基于密度的高精度离群点检测方法。在 LOF 方法中,通过给每个数据点都分配一个依赖于邻域密度的离群因子 LOF,进而判断该数据点是否为离群点。若 LOF >> 1, 则该数据点为离群点;若 LOF 接近于 1,则该数据点为正常数据点。

 k 距离邻域

定义 设 N_{k}(O) 为点 O 的第 k 距离邻域,满足:

N_{k}(O)=\{P'\in D\text{\ \{O\}}\mid d(O,P')\le d_k(O)\}\tag{12}

注 此处的邻域概念与国内高数教材略有不同(具体的点,而非区间)。该集合中包含所有到点 O距离小于点 O 第 k 邻域距离的点。易知有 N_k(O)\ge k,如上图,点 O 的第 5 距离邻域为:

N_5(O)=\{P_1,P_2,P_3,P_4,P_5,P_6\}\tag{13}

可达距离

定义 点 P 到点 O 的第 k 可达距离定义为:

d_k(O,P)=\max\{d_k(O),d(O,P)\}\tag{14}

注 即点 P 到点 O 的第 k 可达距离至少是点 O 的第 k 距离。距离 O 点最近的 k 个点,它们到O 的可达距离被认为是相当的,且都等于 d_k(O)

 

局部可达密度

定义 局部可达密度定义为:

\rho_k(O)=\frac{1}{\displaystyle\sum_{P\in N_{k}(O)}d_k(O,P)/k}=\frac{k}{\displaystyle\sum_{P\in N_{k}(O)}d_k(O,P)}\tag{15}

注 表示点 O 的第 k 邻域内所有点到 O 的平均可达距离,位于第 k 邻域边界上的点即使个数大于1,也仍将该范围内点的个数计为 k 。如果 O 和周围邻域点是同一簇,那么可达距离越可能为较小的 d_k(O) ,导致可达距离之和越小,局部可达密度越大。如果 O 和周围邻域点较远,那么可达距离可能会取较大值 d(O,P) ,导致可达距离之和越大,局部可达密度越小。

 局部离群因子

LOF_k(O)=\frac{\displaystyle\sum_{P\in N_{k}(O)}\frac{\rho_k(P)}{\rho_k(O)}}{k}\tag{16}

注 表示点 O 的邻域 N_{k } (O) 内其他点的局部可达密度与点 O 的局部可达密度之比的平均数。如果这个比值越接近1,说明 O 的邻域点密度差不多, O 可能和邻域同属一簇;如果这个比值小于1,说明 O 的密度高于其邻域点密度, O 为密集点;如果这个比值大于1,说明 O 的密度小于其邻域点密度,O 可能是异常点。

 

 代码:

import pandas as pd
from sklearn.neighbors import LocalOutlierFactor
def lof(data, predict=None, k=5, method=1, plot=False):
    
    # 判断是否传入测试数据,若没有传入则测试数据赋值为训练数据
    try:
        if predict == None:
            predict = data.copy()
    except Exception:
        pass
    predict = pd.DataFrame(predict)
    # 计算 LOF 离群因子
    clf = LocalOutlierFactor(n_neighbors=k + 1, algorithm='auto', contamination=0.1, n_jobs=-1)
    clf.fit(data)
    # 记录 k 邻域距离
    predict['k distances'] = clf.kneighbors(predict)[0].max(axis=1)
    # 记录 LOF 离群因子,做相反数处理
    predict['local outlier factor'] = -clf._decision_function(predict.iloc[:, :-1])
    # 根据阈值划分离群点与正常点
    outliers = predict[predict['local outlier factor'] > method].sort_values(by='local outlier factor')
    inliers = predict[predict['local outlier factor'] <= method].sort_values(by='local outlier factor')
    return outliers, inliers

 参考资料:

https://zhuanlan.zhihu.com/p/37753692

问题:参考资料的算法,在PyCharm中即使没有运行也会导致笔记本CPU暴涨,所以不要写多个函数,直接一个函数就可以了,具体原因,我这个辣鸡也不懂,而且跑的好慢,我五百万的数据跑了40分钟,吐血!!!可能我真的是个盖世辣鸡吧!!!!!

  • 8
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值