KNN(K nearest neighbor)算法

KNN(K nearest neighbor)算法

1.概念

KNN算法是分类算法的一个基础算法,它是一个先验算法,也就是需要首先有一个基础的分类,再对一个目标样本进行分类的算法。

2.原理

如下图,假设有一个样本集合已经分好为3类:绿、蓝、紫,现在要对一个目标样本(图中红点)进行分类。
knn算法示意图
其中每个样本有n个特征,每2个样本(x、y)之间可按照欧式距离公式计算出一个距离:
D=ni=0(xiyi)2
KNN的原理就是,以目标为中心,构造一个包含K个点的最小半径的”圆”,该圆内包含哪一类样本多,目标就属于哪一类。比如图中的K=4时,紫色点多,则该样本分为紫色类。当K=6时,绿色点多,则该样本分为绿色类。显然KNN算法的K值选取很关键。
并不是K越大精度越高,这与目标所处位置有关。目标样本在分类边界时,K值选取不同,可能导致分类结果不同,而目标样本在某一类中心时,则K大K小无所谓了。
K值越大,计算量越大,时间复杂度为:O(N*K)
分类样本数量不同时,要乘以权值后再计算,防止大类吞小类现象。

3. 实践

可以对WEB访问日志中每一个动态URL访问进行一个基础分类:
- 攻击:危险等级为高的安全日志
- 可疑:危险等级不为高的安全日志
- 正常:只有访问日志

提炼某动态URL访问日志的N维特征:

名称说明取值
method请求方法GET:1 POST:2 Other:3
referer_infoReferer信息无:1 自己:2 非自己:3
referer_lengthReferer长度取实际值
url_para_countGET参数个数取实际值
Post_para_countPOST参数个数取实际值
max_para_length最长的参数值最长的参数值
cookie_countCookie个数取实际值
referer_url_count引用的URL数量(依据此可区分工具和浏览器)IP和UA相同的30s内referer是自己的不同url个数。
access_count24h内访问次数IP和UA相同的24h内的访问次数

上表中斜体为访问日志中暂不存在的,但确实有分析价值的参数值。

K值选取:10

Github上有现成的SPARK KNN算法:https://github.com/saurfang/spark-knn

4. 参考文献

[1] 数据挖掘之KNN分类 http://www.cnblogs.com/fengfenggirl/archive/2013/05/27/knn.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值