网络与信息安全实验三异常检测.docx
- 文档编号:6790474
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:11
- 大小:141.43KB
网络与信息安全实验三异常检测.docx
《网络与信息安全实验三异常检测.docx》由会员分享,可在线阅读,更多相关《网络与信息安全实验三异常检测.docx(11页珍藏版)》请在冰豆网上搜索。
网络与信息安全实验三异常检测
网络与信息安全实验报告
(2015年度秋季学期)
一、实验内容
实验描述:
1、理解基于异常检测的恶意代码防治方法
(1)掌握异常检测的流程
(2)学习相关的异常检测算法
2、基于聚类的异常检测方法
(1)掌握欧氏距离和聚类的概念
(2)如何选取数据集的属性集
(3)采用k-means算法和k-medoids算法聚类数据并进行检测
3、基于聚类的网络流量异常检测
(1)建立历史数据集合
(2)规格化数据
(3)分别采用k-means算法和k-medoids算法对历史数据集进行聚类,产生分类结果
实验过程要求:
1、输入多个一维数据作为历史数据集合,给定类别,进行聚类。
2、输出聚类结果,包括每个类别包含的数据、类别的质心。
3、以上过程分别用k-means算法和k-medoids算法完成。
二、实验设计
算法:
首先,选择K个初始质心,其中K是用户指定的参数,即所期望的簇的个数。
每个点指派到最近的质心,而指派到一个质心的点集为一个簇。
然后,根据指派到簇的点,更新每个簇的质心。
重复指派和更新步骤,直到簇不发生变化,或等价地,直到质心不发生变化。
期望结果:
数据集被划分成不同的簇
二、实验设计
程序流程图:
数据结构:
主要为点的数据结构,用于存放点集的横纵坐标
关键函数:
主要代码1,
说明:
average_point()函数用于求k-means簇的新的质心,即求所有点的平均值,作为新的质心。
主要代码2:
说明:
min_point()函数用于求k-medoids簇的新的质心,即求某个点,此点到其他点的所有距离之和最小,以此点作为新的质心。
主要代码3:
说明:
上图程序用于初始化质心,visit数组为了保证随机选取的质心不会重复
主要代码:
4:
说明遍历数据集,将点加入到离他最近的质心
主要代码5,
说明:
如果质心不再变化,则输出所有的簇,否则,更新原质心为新的质心,重新迭代
三、测试数据
此数据集为随机产生,现取其中一组一随机结果数据,用于分析和验证算法的正确性。
k-means数据集样例:
k-medoids数据集样例
四、实验结果
k-means:
随机产生十个点,初始中心点K为3,测试结果如下
根据运行结果可以知道,三个簇的质心(中心点)分别为(73,49),(8,54),(55,88)。
三个簇中所包含的具体点如上图所示,可知初始点集已被正确划分为三个簇
k-medoids
根据运行结果可以知道,三个簇的质心(中心点)分别为(44,39),(61,79),(66,25)。
三个簇中所包含的具体点如上图所示,可知初始点集已被正确划分为三个簇
五、遇到的困难及解决方法、心得体会
通过实现k-means算法和k-medoids算法,实现了对数据的聚类和检测,掌握了异常检测的流程和欧氏距离与聚类的概念,对于网络异常检测的方法有了更深的认识。
附件:
源代码
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
structpoint{
intx;
inty;
};
intgetDistance(pointa,pointb)
{
return(a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
}
pointaverage_point(vector
{
intlen=v.size();
//cout<<"大小为:
"< inttotal_x=0,total_y=0; pointaver; for(inti=0;i { total_x+=v[i].x; total_y+=v[i].y; } aver.x=total_x/len; aver.y=total_y/len; returnaver; } pointmin_point(vector intlen=v.size(); intmindis=100000000; intchoice=0; inttemp_sum; for(inti=0;i { temp_sum=0; for(intj=0;j if(j==i) continue; else temp_sum+=getDistance(v[i],v[j]); } if(temp_sum<=mindis){ mindis=temp_sum; choice=i; } } returnv[choice]; } boolis_equal(pointa,pointb){ if(a.x==b.x&&a.y==b.y) returntrue; else returnfalse; } voidk_means(vector { vector vector vector intvisit[10000]; for(inti=0;i<10000;i++) { center.push_back(line);//二维vector需要初始化,才能v[i].push_back(t); new_center.push_back(line); visit[i]=0; } inti=0; intflag; intlength=v.size(); cout<<"所有点的"< for(inti=0;i cout<<"["< } //初始化K个簇 //随机选择k个点,为K个簇 while(i { vector intc; c=rand()%length; if(visit[c]==1) continue; center[i].push_back(v[c]); visit[c]=1; i++; } intit=1; while(true){ cout<<"第"< flag=0; new_center.clear(); vector cout<<"中心点: "< for(inti=0;i cout< ["< } for(inti=0;i<10000;i++) { new_center.push_back(line); } intdis; for(inti=0;i intmin_dist=10000000; intchoice; vector for(intj=0;j dis=getDistance(v[i],center[j][0]); if(dis min_dist=dis; choice=j; } } if(dis==0) continue; cout<<"点: ["< "< center[choice].push_back(v[i]);//将此点集加入到离他最近的质心 } for(inti=0;i //new_center[i].push_back(average_point(center[i]));//求平均质心 new_center[i].push_back(min_point(center[i]));//求平均质心 //cout<<"new_center: ["< } for(inti=0;i if(is_equal(new_center[i][0],center[i][0])){//判断新的质心与原质心是否相等 flag+=1; } } if(flag==k){//如果新质心与原质心都相同,即质心不再变化 for(inti=0;i cout<<"第"< "<<"中心点为: "<<"["< for(intj=1;j cout<<"["< } } return; } else{//否则,更新原质心为新的质心,重新迭代 center.clear(); center.assign(new_center.begin(),new_center.end()); } } } intmain(){ vector srand(time(NULL)); intnum,k; cout<<"请输入点的个数: "; cin>>num; cout<<"请输入中心点k的个数: "; cin>>k; pointp; for(inti=0;i p.x=rand()%100;//随机产生0-99之间的数字 p.y=rand()%100; v.push_back(p); } k_means(v,k); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 信息 安全 实验 异常 检测