概述

K近邻(K-Nearest Neighbor,KNN)算法是机器学习领域使用最广 泛的算法之一,所谓KNN,就是K个最近的邻居的意思,说的是每个样 本都可以用它最接近的K个邻居来代表。KNN算法的核心思想是:如果 一个样本在特征空间中的K个最相邻的样本中的大多数属于某一个类 别,则该样本也属于这个类别,并具有这个类别上样本的特性。该方法在确定分类决策时,只依据最邻近的一个或者 几个样本的类别来决定待分样本所属的类别。KNN方法在类别决策时, 只与极少量的相邻样本有关。由于KNN方法主要靠周围有限的邻近的样 本,而不是靠判别类域的方法来确定所属类别,因此对于类域交叉或重 叠较多的待分样本集来说,KNN方法较其他方法更为适合。

数据来源

Schonlau在他的个人网站:http://www.schonlau.net/上发布了训练数据。

训练数据中包括50个用户的操作日志(见图5-4),每个日志包含 15000条操作命令,其中前5000条都是正常操作,后面的10000条日志中 随机包含有异常操作。为了便于分析,数据集每100条操作作为一个操 作序列,同时进行了标注,每个操作序列只要有1条操作异常就认为这个操作序列异常。
其中以用户名作为文件名,每个用户的操作都记录在对应的文件里 面。每个文件中,按照操作顺序依次记录了操作命令。

代码及注释

import numpy as np
from nltk.probability import FreqDist
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import classification_report
from sklearn import metrics#测试样本数
N=100def load_user_cmd(filename):cmd_list=[]dist=[]dist_max=[]dist_min=[]
#依次读取每行操作命令,每100个命令组成一个操作序列,保存在列表里面:with open(filename) as f:i=0x=[]for line in f:line=line.strip('\n')x.append(line)dist.append(line)i+=1if i == 100:cmd_list.append(x)x=[]i=0
#统计最频繁使用的前50个命令和最不频繁的前50个命令:fdist = FreqDist(dist).keys()dist_max=set(list(fdist)[0:50])dist_min = set(list(fdist)[-50:])return cmd_list,dist_max,dist_min
#特征化
def get_user_cmd_feature(user_cmd_list,dist_max,dist_min):user_cmd_feature=[]for cmd_block in user_cmd_list:
#去重操作命令的个数。
#以100个命令为统计单元,作为一个操作序列,去重后的操作命令个数作为特征。f1=len(set(cmd_block))fdist = FreqDist(cmd_block).keys()
#最频繁使用的前10个操作f2=list(fdist)[0:10]
#最不常使用的前10个操作f3=list(fdist)[-10:]
#统计的最频繁使用的前50个命令以及最不频繁使用的前50 个命令计算重合程度f2 = len(set(f2) & set(dist_max))f3=len(set(f3)&set(dist_min))x=[f1,f2,f3]user_cmd_feature.append(x)return user_cmd_feature
#标识文件的内容:每行50列,分别代表每个用户的当前操作序列, 正常操作标识为0,异常操作标识为1。
def get_label(filename,index=0):x=[]with open(filename) as f:for line in f:line=line.strip('\n')x.append( int(line.split()[index]))return xif __name__ == '__main__':user_cmd_list,user_cmd_dist_max,user_cmd_dist_min=load_user_cmd("data/MasqueradeDat/User3")
#加载user3的操作数据,并将前120个操作序列作为训练序列,后30 个操作序列作为测试序列。  user_cmd_feature=get_user_cmd_feature(user_cmd_list,user_cmd_dist_max,user_cmd_dist_min)labels=get_label("data/MasqueradeDat/label.txt",2)y=[0]*50+labelsx_train=user_cmd_feature[0:N]y_train=y[0:N]x_test=user_cmd_feature[N:150]y_test=y[N:150]neigh = KNeighborsClassifier(n_neighbors=3)neigh.fit(x_train, y_train)y_predict=neigh.predict(x_test)score=np.mean(y_test==y_predict)*100#print y#print y_trainprint(y_test)print(y_predict)print(score)print(classification_report(y_test, y_predict))print(metrics.confusion_matrix(y_test, y_predict))

K临近算法检测异常操作(一)相关推荐

  1. 【机器学习】实验一 K临近算法

    K临近算法 1.什么是K临近算法? 所谓K近邻算法,即是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例(也就是上面所说的K个邻居), 这K个实例的多数属于某个类,就把该 ...

  2. K-means算法和K临近算法

    1.K-means算法 设定k个质心 repeat 遍历所有元素,选择最近的质心为一个簇 重新计算每个簇的质心 until 簇稳定不再变化或者到达最大迭代次数 实践复杂度为O(tkn),t为迭代次数, ...

  3. KNN算法(K临近算法)及使用KNN算法实现手写数字0-9识别

    首先感谢博主倔强的小彬雅,本文使用的素材及部分代码来源其博文机器学习入门-用KNN实现手写数字图片识别(包含自己图片转化),需要下载素材的可以到其博文最后进行下载. 关于KNN算法 knn算法也叫K临 ...

  4. 《Web安全之机器学习入门》笔记:第十六章 16.7 识别异常操作

    本小节通过RNN识别异常操作. 1.数据集 def load_user_cmd_new(filename):cmd_list=[]dist=[]with open(filename) as f:i=0 ...

  5. 独家 | R语言中K邻近算法的初学者指南:从菜鸟到大神(附代码&链接)

    作者:Leihua Ye, UC Santa Barbara 翻译:陈超 校对:冯羽 本文约2300字,建议阅读10分钟 本文介绍了一种针对初学者的K临近算法在R语言中的实现方法. 本文呈现了一种在R ...

  6. k折交叉验证优缺点_R语言中K邻近算法的初学者指南:从菜鸟到大神(附代码&链接)...

    作者:Leihua Ye, UC Santa Barbara 翻译:陈超 校对:冯羽 本文约2300字,建议阅读10分钟 本文介绍了一种针对初学者的K临近算法在R语言中的实现方法. 本文呈现了一种在R ...

  7. 无监督算法与异常检测

    一.整体概览 反欺诈往往看做是二分类问题,但是仔细想想是多分类问题,因为每种不同类型的欺诈都当做是一种单独的类型.欺诈除了多样并且不断变化,欺诈检测还面临一下问题: 1). 由于大部分情况数据是没有标 ...

  8. 异常行为检测算法_检测异常行为的异常或异常类型算法

    异常行为检测算法 Anomaly detection is a critical problem that has been researched within diverse research ar ...

  9. python检测异常数据_用Python中从头开始的实现完整的异常检测算法

    利用概率的异常检测算法 异常检测可以作为离群分析的统计任务来对待. 但是,如果我们开发一个机器学习模型,它可以自动化,并且像往常一样可以节省大量时间. 有很多异常检测用例. 信用卡欺诈检测,故障机器检 ...

最新文章

  1. Fedora Core 4配置本地yum源
  2. js计算工时,去周末,设置上下班时间
  3. aop实现原理_从宏观的实现原理和设计本质入手,带你理解 AOP 框架的原理
  4. Tensorflow实践:用神经网络训练分类器
  5. pppoe-环境下的mtu和mss
  6. MySQL之 分库分表
  7. 吴恩达神经网络和深度学习-学习笔记-34-LeNet-5 + Alexnet + VGG
  8. linux sdl 显示内存,Linux系统:如何解决sdl安装遇到的问题
  9. 清华大学计算机杜瑜皓,我在清华等你来 | 金策:从容淡定 “金牌”之风
  10. RiruEdxposed学习研究(四)Magisk(面具)源码下载编译详细实战教程
  11. 新出行超级产业链之交通工具变革(网址导航)
  12. scala的两种变量类型 var 和 val
  13. 两组数据的偏差率_GWT测试报告 篇七十五:隐患难忽视,RIVAL 3 WIRELESS精准度LOD测试...
  14. HTML/XML转义字符对照表
  15. 2021据大数据调查-中国的程序员数量是否已经饱和或者过剩?(图多,建议收藏!)
  16. 九龙证券|港股盘中暴涨110%!多股涨停,有色、汽车板块爆发!
  17. H5视频之RTMP、RTSP、HTTP协议流直播流测试地址
  18. 890.查找和替换模式
  19. UWB定位项目怎么评估定位基站数量
  20. 跨域问题 cros错误

热门文章

  1. linux:vi和vim的使用
  2. 刘一男词汇课(从advance到vein):书上有路勤为径,学海无涯“懂“作舟
  3. lte接口流程图_LTE--随机接入流程
  4. 门户行业网站推广方案
  5. 工作四年的数据分析师的解惑-数据分析师的日常、晋升通道。
  6. 图片过大无法发送怎么办?分享三种图片压缩工具
  7. cf国服服务器位置,CF国服国境防卫者获取方式一览
  8. 从图灵奖看计算机科学技术发展史的缩影
  9. python爬取网站美女图片
  10. Subsurface scattering support in Blinn-Phong material