基于数据挖掘的入侵检测系统毕业设计

基于数据挖掘的入侵检测系统毕业设计
基于数据挖掘的入侵检测系统毕业设计

生产实习设计(论文)

基于数据挖掘的入侵检测系统

院系:计算机科学系

专业:计算机科学与技术学号:2007210487

姓名:刘兵

指导老师:李源

(1):目录

摘要………………

前言………………

1. 选题背景及研究现状

2. 本文研究内容

3. 全文组织结构

第一章入侵检测系统概述………………

1.1 入侵检测的概念

1.2 入侵检测的模型建立方法

1.3 入侵检测的技术分类

1.3.1 基于统计方法的入侵检测技术

1.3.2 基于神经网络的入侵检测技术

1.3.3 基于专家系统的入侵检测技术

1.3.4 基于模型推理的入侵检测技术

1.4 入侵检测系统分类

1.4.1 基于主机的入侵检测系统

1.4.2 基于网络的入侵检测系统

第二章Win32 API编程技术………………

2.1 Win32 API概论

2.2 跨进程API Hook

2.2.1 API Hook理论

2.2.2 API Hook的实现

2.2.3 跨进程理论

2.2.4 跨进程的实现和几点注意

2.2.5 在跨进程API Hook时可能用到的其他技术

第三章利用数据挖掘技术的入侵检测系统模型………………

3.1 传感器

3.2 通信器

3.3 检测器

3.4 数据仓库

3.5 报警器

第四章系统主要模块研究………………

4.1 传感器部分

4.2 基于数据挖掘的模型生成器部分算法研究

4.2.1 问题描述

4.2.2 归一化处理

4.2.3 聚类算法

4.2.4 实时检测入侵

第五章系统性能分析………………

第六章全文总结及展望………………

致谢

参考文献

(2):摘要

在允许各种网络资源以开放方式运作的前提下,入侵检测系统成了确保网络安全的一种必要手段。入侵检测就是发现或确定入侵行为存在或出现的动作,它实际上是一种信息识别与检测技术,而从以数据为中心的观点看,入侵检测本身就是一个数据分析过程。在许多相关的领域,如欺诈检测和故障管理中,数据挖掘已经取得了成功的应用。于是,研究数据挖掘方法在入侵检测领域中的应用,自然就成为一个热门话题。

本文研究和设计了一种基于数据挖掘的主机入侵检测系统,介绍了它的体系结构,并说明了其传感器、通信器、检测器和数据仓库等基本组件的构成。另外介绍了Windows下部分传感器实例以及监测器中模型生成器使用的数据挖掘的聚类算法。最后讨论了当前存在的几个问题和今后的研究方向。

关键词入侵检测数据挖掘基于主机异常检测体系结构

(3):前言

1. 选题背景及研究现状

随着网络技术和网络规模的不断发展,网络入侵的风险性和机会也越来越多,这些入侵有的是针对计算机系统和软件的漏洞,有的是针对网络系统本身的安全缺陷,但是它们都对主机和网络造成了破坏,网络安全已经成为人们无法回避的问题,因此为了保护现在越来越多的敏感信息,入侵检测技术得到了越来越多的重视。

入侵检测按照监测对象的不同一般可分为两类:基于主机的和基于网络的。但是当将基于网络的入侵检测系统整合到一个保护系统中时,一般都需要使用基于主机的入侵检测系统。尽管目前大部分的攻击都是通过网络来实现的,但是所有这些攻击都来自于主机(攻击者自己的或者是被其破坏控制的主机),而且有些攻击是产生并保持在主机系统中的。

基于网络的入侵检测有以下几点缺陷:第一,因为它是监测网络数据的,而网络数据可以看成是代表用户行为的,但是不一定能代表用户行为所造成的后果;第二,几乎不可能将所有的网络数据全部接收到;第三,即使将所有的网络数据全部接收到也不能检测到所有的入侵;第四,数据加密会使网络入侵检测失效;另外基于网络的入侵检测可能会遗漏一些系统级的攻击。而基于主机的入侵检测可以很方便地收集在该主机上所有用户的行为及这些行为造成的后果,并且在做基于主机的数据收集和分析时可以不用担心网络上的海量数据,因此研究基于主机的入侵检测系统仍然是非常必要的。

基于主机的入侵检测系统,不管是对于单用户或多用户的操作系统来说,要想找到一个满足所有要求的解决方案是不可能的。因此在这里研究一种基于数据挖掘的主机入侵检测系统,这种技术利用了现有的比较成熟的数据挖掘技术和一种比较健壮以及轻量的数据收集系统来构造一个强有力的基于主机的入侵检测系统。

当今数据库的容量已经达到上万亿的水平(T)--- 1,000,000,000,000 个字节。从而形成一个新的挑战:在这被称之为信息爆炸的时代,信息过量几乎成为人人需要面对的问题。随着数据的急剧膨胀,数据的时效性和复杂性远远超过了当前信息处理的能力,人们不可回避地遇到了信息灾难问题:一是信息过量,难以消化;二是信息真假,难以辨识;三是信息安全,难以保证;四是信息形式不一致,难以统一处理。在数据生产、传输能力远远大于数据分析能力的今天,人们被数据淹没,人们却饥饿于知识。面对这一严峻挑战,数据挖掘和知识发现(Data Mining and Knowledge Discovery,简称DMKD)技术应运而生,并得以蓬勃发展,越来越显示出其强大的生命力。

数据挖掘(Data Mining)就是从大量的、不完全的、有噪声的、模糊的、随机的数据中,提取隐含在其中的、人们事先不知道的、但又是潜在有用的信息和知识的过程。还有很多和这一术语相近似的术语,如从数据库中发现知识(KDD)、数据分析、数据融合(Data Fusion)以及决策支持等。人们把原始数据看作是形成知识的源泉,就像从矿石中采矿一样。原始数据可以是结构化的,如关系数据库中的数据,也可以是半结构化的,如文本、图形、图像数据,甚至是分布在网络上的异构型数据。发现知识的方法可以是数学的,也可以是非数学的;可以是演绎的,也可以是归纳的。发现的知识可以被用于信息管理、查询优化、决策支持、过程控制等,还可以用于数据自身的维护。因此,数据挖掘是一门很广义的交叉学科,它汇聚了不同领域的研究者,尤其是数据库、人工智能、数理统计、可视化、并行计算等方面的学者和工程技术人员。

2. 本文研究内容

如前所述,入侵检测作为一门新兴的交叉学科提出了很多具有挑战性的研究课题,其涉及的内容、研究的方向广泛而又丰富。本文的研究工作主要围绕以下入侵检测领域中的数据挖掘方法展开。本文的创新点主要包括以下几个方面:

非监督异常检测方法:基于聚类技术提出了一种能处理不带标识且含异常数据样本的训练集数据的网络入侵检测方法。对网络连接数据作归一化处理后,通过构造该数据集对应的数据场,根据其势场分布的局部最大值找到聚类中心,并以3B邻域为限考虑各数据点的分类情况。完成样本数据的类划分后,根据正常类比例N来确定异常数据类别并用于网络连接数据的实时检测。结果表明,该方法有效地以较低的系统误警率从网络连接数据中检测出新的入侵。λ

跨进程APIλHook:众所周知Windows应用程序的各种系统功能是通过调用API函数来实现。API Hook就是给系统的API附加上一段小程序,它能监视甚至控制应用程序对API 函数的调用。所谓跨进程也就是让自己的程序来控制别人程序的API调用了。

3. 全文组织结构

前言概要地阐述了论文的基本情况和研究背景,介绍了入侵检测的主要研究内容和当前的研究现状,还简要介绍了本文的主要研究内容。

第一章介绍了入侵检测研究的背景和入侵检测的概念,并对入侵检测技术的原理和现有入侵检测系统的系统构成及所采用的技术进行了详细的分析。

第二章介绍了Windows下系统监控所涉及到的技术,包括API编程,DLL注入等。尤其大胆的提出API Hook的应用。

第三章系统的描述了基于数据结构技术的主机入侵检测系统的系统模型设计,有别于常规的主机入侵检测系统,是本文创新的意义与重点。

第四章研究了API Hook以及数据挖掘技术在主要2个模块中的应用,尤其是数据挖掘技术的算法研究,是作者学习、研究的重点。

第五章根据提出的设计方案及体系结构,进行了系统性能的估算与模拟测试。

第六章总结了这一段时间的研究情况,列举了研究中存在的问题,并探讨了进一步研究的方向。

(4):第一章入侵检测系统概述

入侵检测系统(IDS,Intrusion Detection System)用来识别针对计算机系统和网络系统,或者更广泛意义上的信息系统的非法攻击,包括检测外界非法入侵者的恶意攻击或试探,以及内部合法用户的超越使用权限的非法行动。

入侵检测技术是计算机安全技术中的重要部分,它从计算机系统中的若干关键点收集信息,并分析这些信息,检测计算机系统中是否有违反安全策略的行为和遭到袭击的迹象。入侵检测系统在几乎不影响计算机系统性能的情况下能对计算机系统进行实时监测,并对系统提供针对内部攻击、外部攻击和误操作的实时保护。入侵检测技术通过对入侵行为的过程与特征的研究,使安全系统对入侵事件和入侵过程能做出实时响应。入侵检测技术扩展了系统管理远的安全管理能力(包括安全审计、监视、进攻识别和响应),提高了信息安全基础结构的完整性。

1.1 入侵检测的概念

入侵(Intrusion)的定义:任何试图危害资源的完整性、可信度和可获取性的动作。

入侵检测(Intrusion Detection):按Webster辞典定义,即发现或确定入侵行为存在或出现的动作。就是检测入侵的方法,如发现闯入系统的入侵者或滥用系统资源的非法用户。也可更具体的定义为发现、跟踪并记录计算机系统或计算机网络中的非授权行为,或发现并调查系统中可能为试图入侵或病毒感染所带来的异常活动。

在允许各种网络资源以开放方式运作的前提下,入侵检测系统(Intrusion Detection Systems)成了确保网络安全的一种新的手段,且这种手段的实现方式也与入侵的出现一样在不断地翻新。IDS一般不是采取预防措施以防止入侵事件的发生,而是通过对包括计算机系统及网络用户行为的监控,实现如下目标:识别入侵者,识别入侵行为,检测和监视已成功的安全突破,为对抗入侵及时提供重要信息,阻止事件的发生和事态的扩大。IDS解决安全问题是基于如下假设的:系统是不安全的,但违反安全策略的行为(即入侵)是能够通过监控和分析系统及用户行为而被检测到的。

1.2 入侵检测的模型建立方法

以建立入侵模型的方法分类,入侵检测可分为异常检测与滥用检测。

异常入侵检测指能根据异常行为和使用计算机资源检测出来的入侵。通过对审计数据的训练学习,从中发现正常使用行为模式,以定量的统计方式描述可接受的行为特征,并由测试数据和正常行为模式的偏差捕获到异常,以区分非正常的、潜在的入侵性行为。存在一个如何识别异常行为的问题。建立的威胁模型包括外部闯入、内部渗透和不当行为。

其主要前提条件是将入侵性活动作为异常活动的子集。理想情况是两集合相同。异常入侵检测要解决的主要问题就是构造异常活动集并从中发现入侵性活动子集,其方法依赖于异常模型的建立。异常检测是通过观测到的一组测量值偏离度来预测用户行为的变化,然后做出决策判断的检测技术。

通过检查与正常行为相违背的行为,异常检测能够发现一些新的未知的入侵行为,但不可避免的将会有更高的误报率。所以在实际系统中异常检测的结果往往都要提交给系统管理员进行继续跟踪与分析。

滥用检测是指根据已知系统和应用软件的弱点及其攻击模式的特征进行编码,并通过与审计数据的匹配来检测入侵。与异常检测不同,滥用检测直接检测不利的或不可接受的行为。其主要假设是具有能够精确地按某种方式编码的攻击,并可以通过捕获攻击及重新整理、确认入侵活动是基于同一安全隐患进行攻击的入侵方法的变种。指通过按预先定义好的入侵模式以及观察到入侵发生的情况进行模式匹配来检测。

滥用检测具有较低的误报率(false positive rate),但它不能检测出新出现的一些入侵行为,故漏报率(false negative rate)也较高。

1.3 入侵检测技术分类

入侵的检测实际上是一种信息识别与检测技术。因此,传统的信息识别技术也可以用到入侵检测中来。不过,和通常的信息识别和检测相比,入侵检测有其独特之处。在入侵检测中,不但信息的先后次序十分重要,信息产生的时间也要作为一个重要的变量输入到识别系统之中,如DoS攻击,完全是依靠短时间内大量网络活动来耗尽系统资源的。此外,入侵检测比一般的信息识别有更强的上下文和环境相关性,不同环境下,有完全不同的结果。这两点是实现网络入侵检测所必需的。

前面提到过,入侵分析是入侵检测的核心,入侵检测技术主要研究的就是对入侵行为分析和判定,即入侵分析技术。目前主要的入侵检测技术有:

1.3.1 基于统计方法的入侵检测技术

基于统计方法的入侵检测技术,就是入侵分析采用基于统计的检测规则的方法的一种检测技术。它基于对用户历史行为的建模,以及先验的证据或模型的基础,实时地检测用户对系统的使用情况,根据系统内部保存的用户行为的概率统计模型进行检测,实时检测系统是否有异常的用户行为,依此来判断系统是否遭到入侵。也就是说,系统根据用户以前的历史行为记录来决定用户当前的行为是否合法。系统根据用户的历史行为,生成每个用户的统计行为模型(即行为习惯)。当用户改变他的行为习惯时,这种“异常”就会被检测出来。通常记录的行为有:

一般项目:例如登录的时间、地点,CPU资源的申请及占用情况,I/O的使用通道和频率,常用目录的建立和删除,文件的读写等。

特定项目:例如用户习惯用的编辑器和编译器,最常用的系统调用,经常访问的网络站点,用户口令文件的存取。

1.3.2 基于神经网络的入侵检测技术

由于用户行为的复杂性,要想准确地把当前的用户行为和用户行为概率统计模型进行匹配是相当困难的,因而基于统计方法的入侵检测技术存在着一些天生的弱点。错发的警报往往来自于对统计数据的统计算法所基于的不准确的假设。因此人们利用和发展神经网络技术来进行入侵检测。

神经网络较好地解决了传统的基于统计的分析方法所面临的以下几个难题:

难于建立确切的统计分布:统计方法基本上依赖于用户行为的主观假设,错发警报常由这种假设所导致。λ

难于实现方法的普适性:适用于某类用户行为的检测措施一般无法适用于另一类用户。λ算法实现比较昂贵:由于上一条原因,即基于统计的算法对不同类型的用户行为不具有自适应性,因此算法比较复杂而且庞大,导致算法上的昂贵。而神经网络技术不存在这个问题,实现的代价较小。λ

系统臃肿难于剪裁:由于采用统计方法检测具有大量用户的计算机网络系统,将不得不保留大量的用户行为信息,导致系统的臃肿和难于剪裁。而基于神经网络的技术能够回避这一缺点,根据实时检测到的信息有效地加以处理做出入侵可能性的判断。λ

目前,神经网络技术提出了对于基于传统统计的入侵检测技术的改进方向,但尚不十分成熟,所以传统的统计方法仍将继续发挥作用,也仍然能为发现用户的异常行为提供相当有参考价值的信息。

1.3.3 基于专家系统的入侵检测技术

基于专家系统的入侵检测技术,就是根据网络安全专家对可疑行为的分析经验而形成一套推理规则,然后在此基础之上构建入侵检测专家系统,由此专家系统自动进行对所涉及的入侵行为进行分析工作。

所谓专家系统是基于一套有专家经验事先定义的规则的推理系统,例如,在数分钟之内某个用户连续进行登录,失败超过规定次数可以被认为是一次入侵行为。类似的规则在统计系统中也有,同时基于规则的专家系统或推理系统也有其局限性,因为作为这类系统的基础的推理规则一般都是根据已知的入侵手段来进行安排和策划的,而对网络系统的最危险的威胁则主要来自未知的入侵手段。实现一个基于规则的专家系统是一个知识工程问题,而且其功能应当能够随着经验的积累而利用其自学习能力进行规则的扩充与修正。

专家系统对历史数据的依赖性总的来说比基于统计的检测系统较少,因此系统的适应性比较强,可以较灵活地适应不同的安全策略和检测需求。

1.3.4 基于模型推理的入侵检测技术

入侵者在入侵一个系统时往往具用一定的行为程序,如猜测口令的程序,这种行为程序构成了某种具有一定行为特征的入侵行为模型。根据这种模型所代表的入侵意图的行为特征,可以实时地检测出恶意的入侵企图(尽管入侵并不一定都是恶意的)。用基于模型推理的方法人们能够为某些行为建立特定的模型,从而能够检测具有特定行为的某些入侵活动。根据假设的入侵脚本,这种系统就能检测出非法的用户行为。一般为了准确判断,要为不同的入侵者和不同的系统建立特定的入侵脚本。

当然,上述的几种方法都有各自的优缺点,并不能彻底地解决入侵检测问题,所以最好是综合地利用各种方法强化网络系统的安全程度以增加入侵成功的难度,同时根据系统本身特

点辅助以较适合的入侵检测技术。

1.4 入侵检测系统分类

入侵检测系统根据其检测数据来源分为两类:基于主机(Host-based)的入侵检测系统和基于网络(Network-based)的入侵检测系统。基于主机的入侵检测系统从单个主机上提取系统数据(如审计记录等)作为入侵分析的数据源,而基于网络的入侵检测系统从网络上提取数据(如网络链路层的数据帧)作为入侵分析的数据源。通常来说基于主机的入侵检测系统只能检测单个主机系统,而基于网络的入侵检测系统可以对本网段的多个主机系统进行检测,多个分布于不同网段上的基于网络的入侵检测系统可以协同工作以提供更强的入侵检测能力。图1.1给出了一个同时包含基于主机与基于网络的两种机制的入侵检测结构框图。

图1.1 入侵检测系统结构框图

1.4.1 基于主机的入侵检测系统

基于主机的入侵检测系统的检测目标是主机系统和系统本地用户,原理是根据主机的审计数据和系统日志发现可疑事件。该系统通常运行在被监测的主机或服务器上,实时检测主机安全性方面诸如操作系统日志文件、审核日志文件、应用程序日志文件等的情况,其效果依赖于数据的准确性以及安全事件的定义。可见这种类型的IDS是利用主机操作系统及应用程序的审核踪迹作为输入的主要数据源来检测入侵。基于主机的入侵检测系统被设计成检测IDS代理所驻留的宿主机,如图1.2所示,这种IDS可以检测到网络协议栈的高层数据,也可检测到被监视主机上的本地活动,诸如:文件修改和用户帐户的建立。

图1.2 基于主机的入侵检测系统

在图1.2的客户-服务器通信模式下,客户机对服务器上的访问活动将被服务器日志所记载。IDS代理检测这些记录用户活动信息的日志文件,将它们与事先知道的用户正常行为模式进行匹配。基于主机的IDS有两种主要类型:基于应用和基于操作系统。

基于应用的IDS在应用层搜集信息。应用层的例子有:数据库管理软件、Web服务器或防火墙等产生的日志文件。这种方式可以更好地获取在系统上用户活动(如可以利用特定应用的特点来监视用户活动),但也存在应用层的脆弱性会破坏监视和检测的弱点。

基于操作系统的IDS搜集在特定系统上的活动信息,这些信息可以是操作系统产生的审计踪迹,它也包括系统日志、其它操作系统进程产生的日志以及那些在标准操作系统的审计和日志中没有反映的系统对象的有关内容。这种方式可以监控对系统访问的主体和对象,并且可以将可疑的活动映射到特定的用户ID上。同样,操作系统的脆弱性也会破坏IDS监视与入侵分析的完整性,同时基于操作系统的IDS必须建立在特定的操作系统平台上,这就增加了开销。

基于主机的入侵检测系统具有检测效率高,分析代价小,分析速度快的特点,能够迅速并准确地定位入侵者,并可以结合操作系统和应用程序的行为特征对入侵进行进一步分析、响应。比如,一旦检测到有入侵活动,我们可以立即使该用户的帐号失效,用户的进程中断。基于主机的入侵检测系统尤其对于独立的服务器及应用构造简单,易于理解。也只有这种检测方式能检测出通过控制台的入侵活动。目前很多是基于主机日志分析的入侵检测系统。但基于主机的IDS也有其不足之处:首先它在一定程度上依赖于系统的可靠性,它要求系统本身应该具备基本的安全功能并具有合理的设置,然后才能提取入侵信息;即使进行了正确的设置,对操作系统熟悉的攻击者仍然有可能在入侵行为完成后及时地将系统日志抹去,从而不被发觉;并且主机的日志能够提供的信息有限,有的入侵手段和途径不会在日志中有所反映,日志系统对网络层的入侵行为无能为力,例如利用网络协议栈的漏洞进行的攻击,通过ping命令发送大数据包,造成系统协议栈溢出而死机,或是利用ARP欺骗来伪装成其他主机进行通信等等,这些手段都不会被高层的日志记录下来。在数据提取的实时性、充分性、可靠性方面基于主机日志的入侵检测系统不如基于网络的入侵检测系统。

1.4.2 基于网络的入侵检测系统

基于网络的入侵检测系统搜集来自网络层的信息。这些信息通常通过嗅包技术,使用在混杂模式的网络接口来获得。

图1.3 基于网络的入侵检测系统

从图1.3可以看出,基于网络IDS位于客户端与服务端的通信链路中央,它可以访问到通信链路的所有层次。因此,这种IDS可以监视和检测网络层的攻击(如SYN洪流)。

理论上,网络监视可以获得所有的网络信息数据,它在没有特定的审计或日志机制的情况下,也可以获得数据;只要时间允许,可以在庞大的数据堆中提取和分析需要的数据;可以对一个子网进行检测,一个监视模块可以监视同一网段的多台主机的网络行为;可以通过增加代理来监视网络,不会影响现存的数据源,不改变系统和网络的工作模式,也不影响主机性能和网络性能;处于被动接收方式,很难被入侵者发现,隐蔽性好;可以从底层开始分析,对基于协议攻击的入侵手段有较强的分析能力。

基于网络的入侵检测系统的主要问题是监视数据量过于庞大并且它不能结合操作系统特征来对网络行为进行准确的判断;如果网络数据被加密,IDS就不能扫描协议或内容。

就如防盗系统一样,基于网络的IDS系统通常放置于企业内部网与外部网的访问出口上(如路由器、MODEM池),能够监控从协议攻击到特定环境攻击的范围很广的网络攻击行为,对于监控网络外部用户的入侵和侦察行为非常理想。基于主机的IDS 适合于那些以数据或应用服务器为中心的网络系统,并对那些已取得系统访问权限的用户对系统的操作进行监控。究竟是在哪个层次上部署IDS 需要根据使用者自身的安全策略来决定。

由于基于网络的入侵检测方式具有较强的数据提取能力,因此目前很多入侵检测系统倾向于采用基于网络的检测手段来实现。

(5):第二章 Win32 API编程技术

Win32 API作为Microsoft 32位平台(包括:Windows 9x,Windows NT3.1/4.0/5.0,WindowsCE)的应用程序编程接口,它是构筑所有32位Windows平台的基石,所有在Windows平台上运行的应用程序都可以调用这些函数。

从事Windows应用程序开发,离不开对Win32 API函数的调用。只有充分理解和利用API 函数,才能深入到Windows的内部,充分挖掘系统提供的强大功能和灵活性。

2.1 Win32 API 概论

在Windows程序设计领域处于发展初期时,Windows程序员可使用的编程工具唯有API 函数。这些函数在程序员手中犹如"积木块"一样,可搭建出各种界面丰富、功能灵活的应用程序。不过,由于这些函数结构复杂,所以往往难以理解,而且容易误用。

实际上,程序员要想开发出更灵活、更实用、更具效率的应用程序,必然要涉及到直接使用API函数。虽然类库和控件使应用程序的开发容易得多,但它们只提供Microsoft Windows 的一般功能,对于一些比较复杂和特殊的功能来说,单使用类库和控件是难以实现的,必须直接使用API函数来编写。API函数是构筑整个Windows框架的基石,只有充分理解和利用API函数,才能深入到Windows的内部,充分发挥各种32位平台的强大功能和灵活性,才能成功地扩展和突破类库、控件和可视开发环境的限制。

Win32 API即为Microsoft 32位平台的应用程序编程接口(Application Programming Interface)。所有在Win32平台上运行的应用程序都可以调用这些函数。

使用Win32 API,应用程序可以充分挖掘Windows的32位操作系统的潜力。Mircrosoft 的所有32位平台都支持统一的API,包括函数、结构、消息、宏及接口。使用Win32 API 不但可以开发出在各种平台上都能成功运行的应用程序,而且也可以充分利用每个平台特有的功能和属性。

在具体编程时,程序实现方式的差异依赖于相应平台的底层功能的不同。最显著的差异是某些函数只能在更强大的平台上实现其功能。例如,安全函数只能在Windows NT操作系统下使用。另外一些主要差别就是系统限制,比如值的范围约束,或函数可管理的项目个数等等。

标准Win32 API函数可以分为以下几类:

窗口管理λ

窗口通用控制λ

Shell特性λ

图形设备接口λ

系统服务λ

国际特性λ

网络服务λ

由于我们的系统是处于Windows平台下,相应的就要研究Windows平台下的系统监控程序设计的常用技术。由于监控程序是针对每个进程的,每个进程都有自己的地址空间,它们之间不能任意访问,为了监视每个进程的API函数调用情况,就需要各个进程和监控程序进行通信。

2.2 跨进程API Hook

众所周知Windows应用程序的各种系统功能是通过调用API函数来实现。API Hook就是给系统的API附加上一段小程序,它能监视甚至控制应用程序对API函数的调用。所谓跨进程也就是让自己的程序来控制别人程序的API调用了。

2.2.1 API Hook理论

通过对Win32 PE文件的分析,我们知道在PE文件中的IMPORT TABLE内存储着API函

数的很多信息。其中包括API的函数名,调用地址等等。而操作系统在执行PE文件时会先将其映射到内存中。在映射的同时还会把当前版本操作系统中API函数的入口地址写入IMPORT TABLE中一组与API调用相关的结构体内,用于该应用程序的API调用。当应用程序调用API时,他会在自己内存映像里寻找API的入口地址,然后执行CALL指令。如此一来,通过修改应用程序内存映像的IMPORT TABLE中API函数的入口地址,就可以达到重定向API的目的。将API地址改为我们自己函数的地址,这样我们的函数就可以完成对API 的监视和控制了。

2.2.2 API Hook的实现

/*1*/HANDLE hCurrent = GetModuleHandle(NULL);

/*2*/IMAGE_DOS_HEADER *pidh;

/*3*/IMAGE_NT_HEADERS *pinh;

/*4*/IMAGE_DATA_DIRECTORY *pSymbolTable;

/*5*/IMAGE_IMPORT_DE脚本OR *piid;

/*6*/pidh = (IMAGE_DOS_HEADER *)hCurrent;

/*7*/pinh = (IMAGE_NT_HEADERS *)((DWORD)hCurrent + pidh->e_lfanew);

/*8*/pSymbolTable = &pinh->OptionalHeader.DataDirectory[1];

/*9*/piid =(IMAGE_IMPORT_DE脚本OR *)((DWORD)hCurrent + pSymbolTable->VirtualAddress);

/*10*/do {

/*11*/ IMAGE_THUNK_DATA *pitd,*pitd2;

/*12*/ pitd = (IMAGE_THUNK_DATA *)((DWORD)hCurrent + piid->OriginalFirstThunk); /*13*/ pitd2 = (IMAGE_THUNK_DATA *)((DWORD)hCurrent + piid->FirstThunk);

/*14*/ do {

/*15*/ IMAGE_IMPORT_BY_NAME *piibn;

/*16*/ piibn = (IMAGE_IMPORT_BY_NAME *)((DWORD)hCurrent + *((DWORD *)pitd)); /*17*/ PROC *ppfn = (PROC *)(pitd2->u1.Function);

/*18*/ if (!strcmp("MessageBoxW",(char *)piibn->Name)) {

/*19*/ oldMsg = (MsgBox无效)(ppfn);

/*20*/ DWORD addr = (DWORD)MyMessage;

/*21*/ DWORD written = 0;

/*改变内存读写状态*/

/*22*/ DWORD oldAccess;

/*23*/

VirtualProtect(&pitd2->u1.Function,sizeof(DWORD),PAGE_WRITECOPY,&oldAccess);

/*24*/ APIAddress = (DWORD)&pitd2->u1.Function;

/*向内存映像写入数据*/

/*25*/ WriteProcessMemory(GetCurrentProcess(),&pitd2->u1.Function, &addr,sizeof(DWORD), &written);

/*26*/ }

/*27*/ pitd++;pitd2++;

/*28*/ } while (pitd->u1.Function);

/*29*/ piid++;

/*30*/} while (piid->FirstThunk + piid->Characteristics

+ piid->ForwarderChain + piid->Name + piid->TimeDateStamp);

分析:

(1) 寻觅IMPORT TALBE

在/*1*/中使用GetModuleHandle(NULL)来返回当前进程在内存中映像的基地址。但这个值在文档中仅仅被描述为“a module handle for the specified module”,虽然他确实是进程内存映像的基地址。如果不太放心的话也可以使用GetModuleInformation函数来获得基地址,只不过要额外包含psapi.h和psapi.lib了。

在/* 6 */里先找到IMAGE_DOS_HEADER结构,起始地址就是映像的基地址。

/*7*/通过IMAGE_DOS_HEADER给出的PE文件头的偏移量,找到IMAGE_NT_HEADERS 结构。顺藤摸瓜,IMAGE_NT_HEADERS里的OptionalHeader中的DataDirectory数组里的第二个元素正是指向我们想要的IMPORT TABLE的地址。

在/*9*/中将其转化为一个IMAGE_IMPORT_DE脚本OR的结构指针存入piid中。

(2) 替换的API函数入口地址

在/*12*/和/*13*/中分别取得OriginalFirstThunk和FirstThunk结构,用于以后得到API函数的名称和入口地址。

/*10*/的do循环遍历每一个IMAGE_IMPORT_DE脚本OR结构也就是应用程序引用的每个DLL。

在/*14*/的循环中遍历DLL中的IMAGE_THUNK_DATA结构来一一查询API的信息。

/*16*/中将OriginalFirstThunk转换为IMAGE_IMPORT_BY_NAME结构用于获得API函数的名称进行比对。

/*18*/找到MessageBoxW函数之后,在/*19*/保存其原始入口地址便于以后恢复时使用。在/*23*/需要用VirtualProtect改变一下内存区域的读写性,因为一般应用程序的映像都是只读的,直接写入会造成一个非法访问的异常出现。

在/*25*/我们写入自己函数的地址。

这样就基本完成一个API函数的重定向。

(3) 其他

恢复函数的API入口地址相对比较简单。只要把保存的值再写回去就可以了。上面的程序中/*24*/我用APIAddress保存了存有MessageBoxW入口地址的地方的地址,便于以后调用WriteProcessMemory恢复时使用。

2.2.3 跨进程理论

我们要用自己的函数来替代别人程序里的API函数,但我们的函数与别人的程序处于不同的进程空间内。不同的进程空间是不能相互调用函数的。因此我们要想办法把自己的函数放入别人的进程空间去。这时我们就需要使用DLL injection技术了。

简而言之,DLL injection就是想办法让对方的进程加载我们的一个DLL程序,把需要替换的函数放在我们这个DLL里。如此一来,我们的函数就进入了别人的进程空间了。DLL injection方法很多,我在这里使用SetWindowsHookEx函数来达到目的。主要有这几个原

因:1,不用重新启动系统,调试方便。2,可以利用消息循环机制进行两个进程之间的通信,可以较好的掌握Hook的状态,便于安装与卸载。

SetWindowsHookEx之所以能完成DLL injection是因为它要给一个应用程序某个环节加上一个Hook,而Hook就要有Hook Procedure也就是Hook函数。如果这个Hook函数在一个DLL中,那么系统就会把这个DLL加载到SetWindowsHookEx的目标进程上。从而也就达到了我们DLL injection的目的了。当然这里我们会用WH_GETMESSAGE的Hook进行injection,因为这个Hook可以用来监视目标进程的消息循环方便我们的进程与目标进程通信。

2.2.4 跨进程的实现和几点注意

/* DllPart.Dll */

#include

#include

#include

#include

无效def (WINAPI *MsgBox无效)(HWND,LPCWSTR,LPCWSTR,UINT);

MsgBox无效oldMsg; /*API原入口地址*/

DWORD APIAddress; /*存储API入口地址的地方的地址*/

int WINAPI MyMessage(HWND hWnd ,LPCWSTR M1,LPCWSTR M2, UINT M3) {

/*这是用来替换的函数*/

return oldMsg(hWnd,buf,M2,MB_OK);

}

const char szApp[] = "DllPart.dll";

HHOOK hHook; /*Hook的句柄*/

HMODULE hInst; /*DLL 模块句柄,用于SetWindowsHookEx函数*/

HWND hTarget; /*目标窗口句柄*/

/*DLL 入口*/

BOOL WINAPI DllMain(HINSTANCE inst, DWORD reason, LPVOID lpvReserved)

{

hInst = inst;

switch (reason) {

case DLL_PROCESS_ATTACH:

/*调试信息,表示DLL已经加载*/

MessageBox(NULL,"DLL_PROCESS_ATTACH",szApp,MB_OK);

break;

case DLL_PROCESS_DETACH:

/*调试信息,表示DLL已经卸载*/

MessageBox(NULL,"DLL_PROCESS_DETACH",szApp,MB_OK);

break;

}

return true;

}

/*显示GetLastError的信息*/

void showerr(const char *m) {

char message[255];

FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,0,GetLastError()

,MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),message,255, 0); MessageBox(NULL,message,m,MB_OK);

}

//-----------------------

void UnHookApi() {

/*卸载API Hook用*/

}

void HookApi() {

/*加载API Hook同上面介绍的函数一样*/

}

//-----------------------

/*用于WH_GETMESSAGE的Hook Procedure*/

LRESULT CALLBACK GetMsgProc(int nCode,WPARAM wParam, LPARAM lParam) { if (nCode == HC_ACTION) {

MSG *msg = (MSG *)lParam;

if (msg->message == WM_CHAR) {

if (msg->wParam == 'h') HookApi();

if (msg->wParam == 'u') UnHookApi();

}

}

return CallNextHookEx(hHook,nCode,wParam,lParam);

}

extern "C" __declspec(dllexport) SetAPIHook(HWND handle) {

DWORD ThreadId = GetWindowThreadProcessId(handle, NULL);

hTarget = handle;

MessageBox(NULL, "Enabling CallWndProc Hook", szApp, MB_OK);

hHook = SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,hInst,ThreadId);

if (hHook) {

MessageBox(NULL,"Hook OK!", szApp, MB_OK);

} else {

showerr("SetWindowsHookEx");

}

}

extern "C" __declspec(dllexport) UnHookAPIHook() {

MessageBox(NULL, "Disenabling CallWndProc Hook", szApp, MB_OK);

if (UnhookWindowsHookEx(hHook)) {

MessageBox(NULL,"UnHook OK!", szApp, MB_OK);

} else {

showerr("UnHookWindowsHookEx");

}

}

分析:

几个需要注意的问题:

SetAPIHook和UnHookAPIHook是我们自己进程调用的用来加载WH_GETMESSAGE Hook 的函数。由于程序要用LoadLibrary加载这个Dll因此这两个函数要用__declspec(dllexport)修饰,使其成为导出函数,才能被GetAddressProc函数找到。加上extern "C"是让编译器使用C语言编码方式。因为C++编译器会进行Dynamic Binding(C++函数重载的实现),将函数的参数类型附加到名称上。是函数的导出名看起来像SetAPIHook@XYTZX之类的,不利于GetAddressProc进行引用。因此使用extern "C"让编译器不使用Dynamic Binding,自然使用extern"C"的函数也就不能被重载了。

不要忘记在GetMsgProc最后要调用CallNextHookEx函数,保证Hook链的完整性。

一定要在Hook Procedure中调用HookApi和UnHookApi函数,因为保存API入口地址的地方在目标进程中,必须在目标进程的进程空间内完成卸载操作,不能在UnHookAPIHook或是SetAPIHook函数中调用,因为UnHookAPIHook是我们的进程调用的,因此在我们的进程空间中。在这里使用UnHookApi会造成一个非法访问的错误。而使用HookApi会给自己的DLL加上API Hook。

SetWindowsHookEx的最后参数是ThreadId不是Handle,因此要通过调用GetWindowThreadProcessId转换一下。

2.2.5 在跨进程API HOOK时可能用到的其他技术

(1) 主进程与目标进程的信息交互和共享

由于使用了WH_GETMESSAGE钩子我们可以利用Windows消息机制实现进程间通讯。需要注意的是应该使用PostThreadMessage来发送让WH_GETMESSAGE得到的消息而不是SendMessage或者PostMessage,因为后两个是用来给窗口发送消息的。而我们的WH_GETMESSAGE是Hook在线程上面的,因此需使用PostThreadMessage.

传递不太大的数据可以使用WM_COPYDATA消息来进行。同样也应该注意,如果使用MFC 的窗口过程获得消息就需要用SendMessage发送了。

如果传递较大的数据或者希望数据共享比较方便可以开辟共享内存来进行数据共享。这里简单分析一下使用共享内存的代码:

HANDLE hMap;

switch (reason) {

case DLL_PROCESS_ATTACH:

/*创建/打开共享内存区域*/

hMap = CreateFileMapping((HFILE *)0xFFFFFFFF, NULL, PAGE_READWRITE, 0, sizeof(GLOBALDATA), ID_MAP);

pg_data = (GLOBALDATA*)MapViewOfFile(hMap,FILE_MAP_ALL_ACCESS,0 ,0 ,0);

if (!pg_data) {

MessageBox(NULL,"无法建立共享内存,程序终止!",szApp,MB_OK);

if (hMap) {

CloseHandle(hMap);

hMap = NULL;

return 0;

}

pg_data->hInst = hInst;

showerr("共享内存映像文件");

showerr("DLL装载中...",FALSE);

break;

case DLL_PROCESS_DETACH:

if (pg_data) {

UnmapViewOfFile(pg_data);

pg_data = NULL;

}

if (hMap) {

CloseHandle(hMap);

hMap = NULL;

}

break;

}

上面的代码通过CreateFileMapping建立共享区域。将其第一个参数设置为0xFFFFFFFF使其能创建一个内存共享区域而不是文件。并标记为可读写的(PAGE_READWRITE).其大小为我们定义的结构体GLOBALDATA的大小。最后的ID_MAP是一个用来标示这个区域的字符串。打开或者创建完共享区域后,我们用MapViewOfFile来获得这个区域的地址。之后就可以直接使用pg_data来操作共享区域了。不要忘记在DLL退出的时候安全的删除共享区域释放内存。

(2) 消息等待与安全卸载

在卸载WH_GETMESSAGE钩子之前必须先把目标程序的API调用恢复正常。不能再调用UnHookApi之后就立刻调用UnhookWindowsHookEx,因为很有可能UnHookApi还没来得急完成API入口地址的恢复操作,WH_GETMESSAGE钩子就已经被卸载了。因此需要等待一段时间,等UnHookApi完成了恢复操作在调用UnhookWindowsHookEx,以防错误发生。extern "C" __declspec(dllexport) void UnHookAPIHook() {

/*向目标线程发送消息进行API UNHOOK*/

PostThreadMessage(pg_data->idTarget,WM_DISABLEAPIHOOK,(WPARAM)GetCurrentThr eadId(),0);

showerr("WM_DISABLEAPIHOOK");

/*等待目标进程返回WM_UNHOOKOK消息,确认可以将WH_GETMESSAGE的HOOK去掉*/

MSG Msg;

do {

GetMessage(&Msg,NULL,0,0);

}while(Msg.message != WM_UNHOOKOK);

UnhookWindowsHookEx(pg_data->hHook);

PostThreadMessage(pg_data->idTarget,WM_DISABLEAPIHOOKOK,(WPARAM)GetCurrent ThreadId(),0);

showerr("UnHookWindowsHookEx");

}

上面的代码中我们使用一个含有GetMessage的循环来等待消息的到达,一旦UnHookApi 完成他就会发送WM_UNHOOKOK消息。等我们接收到消息确认一切安全了在来卸载WH_GETMESSAGE钩子。

(3) 弄清消息对象

我们一定要清楚代码是在主程序进程空间中执行的还是在目标程序进程空间中执行的。像上面的UnHookAPIHook函数就是通过主程序调用的,因此在主程序进程空间中执行。这样一来用来恢复目标程序API信息的UnHookApi完成后就应该向主程序发送消息,而不是目标程序。

(4) 目标进程加载了其他DLL

如果目标进程动态加载了其他的DLL文件,我们必须监视LoadLibrary函数,保证DLL中的API入口地址也被正确修改,防止出现混乱的情况。我从LoadLibrary获得DLL的路径用于GetModuleHandle来取得他的ImageBase的地址。

(6):第三章利用数据挖掘技术的入侵检测模型架构

本系统由四个主要的模块组成:传感器(Sensor Component) 、检测器(Detector Component) 、通信器(Communication Component)以及数据仓库(Data Warehouse Component),如图3.1所示。

图3.1 基于数据挖掘的主机入侵检测系统的体系结构

该系统的设计与传感器的数据格式和模型的表示无关,其中每一个数据可以包含任意数量的属性,而每一个属性也可以是连续的或是离散的,可以是数字的或是符号的。在这个框架中,检测模型的生成算法利用了数据挖掘算法,当然也可以使用任意其他能够从包含入侵的训练集中获取模型的算法,如统计方法和神经网络方法等。为了处理这种多样型,在这个框架中使用了XML编码,这种编码能够很方便地转换为CIDF或IDMEF(Intrusion Detection Message Format)格式,以便各个组件间能够很方便地交换数据和模型。而通信器的作用就像是一个数据交换机,各模块间所有的通信数据都通过通信器来传递。

3.1 传感器

在现有的操作系统环境下,可以很方便地在系统的底层捕获系统内所有的活动。在这个系统中,传感器是由一系列轻量(Lightweight)的审计程序构成。这些审计程序在操作系统的后台运行以收集审计的信息并将之送到通信器中。例如在Windows环境下,利用Win32的“钩子(Hook)”程序可以简单地实现这个功能,它可以进入数据流并将之截取然后送到通信器中。在该系统中传感器可以看成是被监控的主机的一个接口,因此在该系统中可以不用理会审计程序是怎样工作的。

从传统的客户/服务器的角度来看,传感器是一个客户程序。多个审计程序必须能够以一种表面上是无缝的方式在系统中一起正常地工作。同时各审计程序也必须是彼此互相独立的,并且和主系统也是相互独立的,各审计程序的运行和停止不应该影响到其他程序的运行,也不应该影响整个系统的性能。

3.2 通信器

通信器主要起着一个帮助数据交换的作用。它主要包括传感器管理器、数据仓库管理器、检测器管理器、报警器管理器四个部分。传感器管理器的作用主要是将传感器送来的原始审计数据用XML编码进行格式处理,然后将格式化的数据送往数据仓库和检测器管理器。数据仓库管理器的作用有两点:一是处理格式化的数据,包括存储进数据仓库中和从数据仓库中取出;二是处理入侵检测的模型,包括对模型的存储、检索和更新。检测器管理器的作用有以下几点:一是处理格式化的数据,包括对实时数据送到实时检测引擎中和将从数据仓库中提取的数据送到检测模型生成器;二是处理检测模型,包括将检测模型生成器生成或更新的模型送往数据仓库管理器和将从数据仓库中提取的模型送到检测模型分发器;三是处理报警信息,主要是将实时检测引擎送出的报警信息送到报警器管理器。报警器管理器的作用主要是一方面将报警信息送到数据仓库中存储,另一方面将报警信息送出以对入侵进行处理。为了提高整个系统的自适应能力,一开始通信器在一个指定的端口监听是否有新的审计程序加入系统,这样就可以在系统运行时增加或减少审计程序。

3.3 检测器

检测器是整个系统的核心,包括检测模型生成器,检测模型分发器和实时检测引擎。

检测模型生成器是一个离线的程序,它利用数据仓库中存储的审计数据,使用多种模型生成算法非实时地产生入侵模型,因此可以看出它是一个黑匣子,是整个系统的一个插件。其

输入是数据的训练集,输出是可疑行为的模型,而不同的模型生成算法需要不同的训练集。因此在本系统中,检测模型生成器是可以通过通信器对数据仓库中的数据进行任意查询的。整个模型生成的过程就是一个数据挖掘的过程。

检测模型分发器的作用就是将检测模型分发到实时检测引擎中,以保证实时检测引擎中的检测模型始终是最新的。在实时检测的环境下,实时检测引擎不可能经常查询数据仓库来更新检测模型,因为这样做的效率非常低下,并且在系统中,实时检测引擎同样也需要是一个轻量的程序,因此将检测模型分发器分离出来,它将自动地将更新的模型传送给实时检测引擎,这样会大大提高整个系统的效率。

3.4 数据仓库

数据仓库主要是用来集中存储数据和模型。这样的一个好处就是不同的组件可以异步地处理存储在一个数据库中的同一块数据,比方说离线的训练和人工地做标记。同一种类型的组件,例如多个审计程序也可以同时处理数据。而相关的数据库的特性也为有效处理数据提供了方便。数据仓库还可以将来源不用的传感器的数据整合。总而言之,数据仓库是整个系统的根本立足点。

3.5 报警器

报警器的主要任务是在接到入侵的报警报告后采取相应的措施来处理入侵,比如关闭端口、断开连接等,可以人工地进行,也可以自动地进行。

(7):第四章系统主要模块研究

4.1 传感器部分

这一部分便可以灵活、自由地应用第二章所描述的Win32 API以及跨进程API HOOK技术实现,进行收集日志、调用信息以及进程见通讯。

在Windows中可以利用Windows的特性和自身提供的一些功能实现下面这几种传感器:Windows事件日志传感器、软件使用监视传感器、netstat传感器和注册表传感器。Windows事件日志传感器的功能主要是收集日志。在Windows NT中可以设置系统记录多种日志,其中包括应用、安全和事件日志,在设置后Windows自己就会监视系统的各种状况并写入日志中,因此可以开发一个程序来监听系统日志,它将系统日志送到通信器中,并在系统日志增加了新记录后捕获到日志的更新,将更新的记录截取并送到通信器中。

软件使用监视传感器的功能主要是收集系统调用的信息。在Windows下可以利用钩子程序将用户在本机上应用程序和系统程序的使用情况完全收集起来,并送到通信器中。Netstat传感器主要是利用Windows提供的netstat工具来收集在本机上建立的网络连接的信息。Netstat命令可以提供在本机上所有开放的端口的信息。可以设计一个程序每隔一段时间定时地执行netstat命令,并将结果输出,但是这样会加重系统的负担,在一个比较繁忙的系统中,几天的记录就有可能会有几个G的大小。因此可以优化该程序,让程序在第

数据挖掘与预测分析

数据挖掘是一个多学科交叉研究领域,它融合了数据库技术、人工智能、机器学习、统计学、知识工程、面向对象方法、信息检索、高性能计算以及数据可视化等最新技术的研究成果。数据挖掘是目前人工智能和数据库领域研究的热点问题,所谓数据挖掘是指从数据库的大量数据中揭示出隐含的、先前未知的并有潜在价值的信息的非平凡过程。数据挖掘是一种决策支持过程,高度自动化地分析企业的数据,做出归纳性的推理,从中挖掘出潜在的模式,帮助决策者调整市场策略,减少风险,做出正确的决策。预测分析是一种统计或数据挖掘解决方案,包含可在结构化和非结构化数据中使用以确定未来结果的算法和技术。可为预测、优化、预报和模拟等许多其他用途而部署。预测分析可帮助用户评审和权衡潜在决策的影响力。可用来分析历史模式和概率,预测未来业绩并采取预防措施。 数据挖掘的含义是广泛的,每个人有每个人不同的体会,每个人有每个人的见解。但这些体会、见解是有许多共通之处的,从而可以归纳出数据挖掘的技术定义以及商业定义:从技术角度,数据挖掘(Data Mining)就是从大量的、不完全的、有噪声的、模糊的、随机的数据中,提取隐含在其中的、人们事先不知道的但又是潜在有用的信息和知识的过程。它是涉及机器学习、模式识别、统计学、人工智能、数据库管理及数据可视化等学科的边缘学科。由于每个人的思维方式不同,这个定义可以被解读为以下几个层次:①数据源必须是真实的、大量的、含噪声的;②发现的是用户感兴趣的知识;③发现的知识要可接受、可理解、可运用;④这些知识是相对的,是有特定前提和约束条件的,在特定领域中具有实际应用价值。 预测是大数据的核心,数据挖掘之后的预测分析无疑成为开拓市场的重要环节。预测分析是一种统计或数据挖掘解决方案,包含可在结构化和非结构化数据中使用以确定未来结果的算法和技术。可为预测、优化、预报和模拟等许多其他用途而部署。预测分析和假设情况分析可帮助用户评审和权衡潜在决策的影响力。可用来分析历史模式和概率,以预测未来业绩并采取预防措施。这种级别的分析可以为规划流程提供各种信息,并对企业未来提供关键洞察。不仅可提供预测分析,使用户可以执行高级分析、发布并与更广泛的用户群交流。还可以提供

《数据挖掘》试题与答案

一、解答题(满分30分,每小题5分) 1. 怎样理解数据挖掘和知识发现的关系?请详细阐述之 首先从数据源中抽取感兴趣的数据,并把它组织成适合挖掘的数据组织形式;然后,调用相应的算法生成所需的知识;最后对生成的知识模式进行评估,并把有价值的知识集成到企业的智能系统中。 知识发现是一个指出数据中有效、崭新、潜在的、有价值的、一个不可忽视的流程,其最终目标是掌握数据的模式。流程步骤:先理解要应用的领域、熟悉相关知识,接着建立目标数据集,并专注所选择的数据子集;再作数据预处理,剔除错误或不一致的数据;然后进行数据简化与转换工作;再通过数据挖掘的技术程序成为模式、做回归分析或找出分类模型;最后经过解释和评价成为有用的信息。 2. 时间序列数据挖掘的方法有哪些,请详细阐述之 时间序列数据挖掘的方法有: 1)、确定性时间序列预测方法:对于平稳变化特征的时间序列来说,假设未来行为与现在的行为有关,利用属性现在的值预测将来的值是可行的。例如,要预测下周某种商品的销售额,可以用最近一段时间的实际销售量来建立预测模型。 2)、随机时间序列预测方法:通过建立随机模型,对随机时间序列进行分析,可以预测未来值。若时间序列是平稳的,可以用自回归(Auto Regressive,简称AR)模型、移动回归模型(Moving Average,简称MA)或自回归移动平均(Auto Regressive Moving Average,简称ARMA)模型进行分析预测。 3)、其他方法:可用于时间序列预测的方法很多,其中比较成功的是神经网络。由于大量的时间序列是非平稳的,因此特征参数和数据分布随着时间的推移而变化。假如通过对某段历史数据的训练,通过数学统计模型估计神经网络的各层权重参数初值,就可能建立神经网络预测模型,用于时间序列的预测。

数据挖掘与分析心得体会

正如柏拉图所说:需要是发明之母。随着信息时代的步伐不断迈进,大量数据日积月累。我们迫切需要一种工具来满足从数据中发现知识的需求!而数据挖掘便应运而生了。正如书中所说:数据挖掘已经并且将继续在我们从数据时代大步跨入信息时代的历程中做出贡献。 1、数据挖掘 数据挖掘应当更正确的命名为:“从数据中挖掘知识”,不过后者显得过长了些。而“挖掘”一词确是生动形象的!人们把数据挖掘视为“数据中的知识发现(KDD)”的同义词,而另一些人只是把数据挖掘视为知识发现过程的一个基本步骤! 由此而产生数据挖掘的定义:从大量数据中挖掘有趣模式和知识的过程!数据源包括数据库、数据仓库、Web、其他信息存储库或动态地流入系统的数据。作为知识发现过程,它通常包括数据清理、数据集成、数据变换、模式发现、模式评估和知识表示六个步骤。 数据挖掘处理数据之多,挖掘模式之有趣,使用技术之大量,应用范围之广泛都将会是前所未有的;而数据挖掘任务之重也一直并存。这些问题将继续激励数据挖掘的进一步研究与改进! 2、数据分析 数据分析是指用适当的统计方法对收集来的大量第一手资料和第二手资料进行分析,以求最大化地开发数据资料的功能,发挥数据的作用。是为了提取有用信息和形成结论而对数据加以详细研究和概括总结的过程。 数据分析有极广泛的应用范围。典型的数据分析可能包含以下三个步: 1、探索性数据分析:当数据刚取得时,可能杂乱无章,看不出规律,通过作图、造表、用各种形式的方程拟合,计算某些特征量等手段探索规律性的可能形式,即往什么方向和用何种方式去寻找和揭示隐含在数据中的规律性。 2、模型选定分析,在探索性分析的基础上提出一类或几类可能的模型,然后通过进一步的分析从中挑选一定的模型。 3、推断分析:通常使用数理统计方法对所定模型或估计的可靠程度和精确程度作出推断。 数据分析的目的是把隐没在一大批看来杂乱无章的数据中的信息集中、萃取和提炼出来,以找出所研究对象的内在规律。在实用中,数据分析可帮助人们作出判断,以便采取适当行动。数据分析是组织有目的地收集数据、分析数据,使之成为信息的过程。这一过程是质量管理体系的支持过程。在产品的整个寿命周期,包括从市场调研到售后服务和最终处置的各

学习18大经典数据挖掘算法

学习18大经典数据挖掘算法 本文所有涉及到的数据挖掘代码的都放在了github上了。 地址链接: https://https://www.360docs.net/doc/d72639269.html,/linyiqun/DataMiningAlgorithm 大概花了将近2个月的时间,自己把18大数据挖掘的经典算法进行了学习并且进行了代码实现,涉及到了决策分类,聚类,链接挖掘,关联挖掘,模式挖掘等等方面。也算是对数据挖掘领域的小小入门了吧。下面就做个小小的总结,后面都是我自己相应算法的博文链接,希望能够帮助大家学习。 1.C4.5算法。C4.5算法与ID3算法一样,都是数学分类算法,C4.5算法是ID3算法的一个改进。ID3算法采用信息增益进行决策判断,而C4.5采用的是增益率。 详细介绍链接:https://www.360docs.net/doc/d72639269.html,/androidlushangderen/article/details/42395865 2.CART算法。CART算法的全称是分类回归树算法,他是一个二元分类,采用的是类似于熵的基尼指数作为分类决策,形成决策树后之后还要进行剪枝,我自己在实现整个算法的时候采用的是代价复杂度算法, 详细介绍链接:https://www.360docs.net/doc/d72639269.html,/androidlushangderen/article/details/42558235 3.KNN(K最近邻)算法。给定一些已经训练好的数据,输入一个新的测试数据点,计算包含于此测试数据点的最近的点的分类情况,哪个分类的类型占多数,则此测试点的分类与此相同,所以在这里,有的时候可以复制不同的分类点不同的权重。近的点的权重大点,远的点自然就小点。 详细介绍链接:https://www.360docs.net/doc/d72639269.html,/androidlushangderen/article/details/42613011 4.Naive Bayes(朴素贝叶斯)算法。朴素贝叶斯算法是贝叶斯算法里面一种比较简单的分类算法,用到了一个比较重要的贝叶斯定理,用一句简单的话概括就是条件概率的相互转换推导。 详细介绍链接:https://www.360docs.net/doc/d72639269.html,/androidlushangderen/article/details/42680161 5.SVM(支持向量机)算法。支持向量机算法是一种对线性和非线性数据进行分类的方法,非线性数据进行分类的时候可以通过核函数转为线性的情况再处理。其中的一个关键的步骤是搜索最大边缘超平面。 详细介绍链接:https://www.360docs.net/doc/d72639269.html,/androidlushangderen/article/details/42780439 6.EM(期望最大化)算法。期望最大化算法,可以拆分为2个算法,1个E-Step期望化步骤,和1个M-Step最大化步骤。他是一种算法框架,在每次计算结果之后,逼近统计模型参数的最大似然或最大后验估计。

入侵检测系统的研究

入侵检测系统的研究 【摘要】近几年来,随着网络技术以及网络规模的 不断扩大,此时对计算机系统的攻击已经是随处可见。现阶段,安全问题成为越来越多的人关注的重点。本文主要分析了入侵检测系统的功能、技术等情况。 【关键词】入侵检测系统研究情况 、刖言 目前的安全防护主要有防火墙等手段,但是由于防火墙 本身容易受到攻击,并且内部网络中存在着一系列的问题,从而不能够发挥其应有的作用。面对这一情况,一些组织开 始提出了通过采用更强大的主动策略以及方案来增强网络 的安全性。其中个最有效的解决方法那就是入侵检测。入 侵检测采用的是一种主动技术,从而弥补防火墙技术的不足,并且也可以防止入侵行为。 二、入侵检测系统的概述 (一)入侵检测系统的具体功能 入侵检测就是要借助计算机和网络资源来识别以及响 应一些恶意使用行为。检测的内容主要分为两个部分:外部的入侵行为、内部用户的未授权活动。然而入侵检测系统是由入侵检测的软件以及硬件这两个部分组成的。到现在为

止,入侵检测成为继防火墙之后的第二道安全闸门。在网络 安全体系中,入侵检测是成为一个非常重要的组成部分。总 之,入侵检测的功能主要包括了以下几个功能:第一,对用户活动进行监测以及分析;第二,审计系统构造变化以及弱点;第三,对已知进攻的活动模式进行识别反映,并且要向相关人士报警;第四,统计分析异常行为模式,保证评估重要系统以及数据文件的完整性以及准确性;第五,审计以及跟踪管理操作系统。 二)入侵检测系统的模型 在1987 年正式提出了入侵检测的模型,并且也是第 次将入侵检测作为一种计算机安全防御措施提出来。入侵检测模型主要分为六个部分:第一部分,主体。主体就是指在目标系统上进行活动的实体,也就是一般情况下所说的用户。第二部分,对象。对象就是指资源,主要是由系统文件、设备、命令等组成的。第三部分,审计记录。在主体对象中,活动起着操作性的作用,然而对操作系统来说,这些操作包括了登陆、退出、读、写以及执行等。异常条件主要是指系统可以识别异常的活动,比如:违反系统读写权限。资源使用情况主要指的是在系统内部,资源的实际消耗情况。时间戳主要是指活动所发生的时间。第四部分,活动档案。活动档案就是指系统正常行为的模型,并且可以将系统正常活动的相关信息保存下来。第五部分,异常记录。异常记录主要是可以将异常事件的发生情况表现出来。第六部分,活动规则。活动规则主要是指通过一组异常记录来判断入侵是否发生在规划集合中。一般情况下,通过将系统的正常活动模型作为准则,并且要按照专家所提出的系统或者统计方法来分析以及处理审计记录,如果已经发生了入侵,那么此时就应该采用相应的处理措施。 三)入侵检测系统的具体分类 通过研究现有的入侵检测系统,可以按照信息源的不同 将入侵检测系统分为以下几类: 第一,以主机为基础的入侵检测系统。通过对主机的审 计记录来进行监视以及分析,从而可以达到了入侵检测。这 监视主要发生在分布式、加密以及交换的环境中,从而可以判断出攻击是否发生。然而这一入侵检测系统存在着缺点,那就是该系统与具体操作系统平台有联系,从而很难将来自网络的入侵检测出来,并且会占有一定的系

数据清洗、数据分析、数据挖掘

数据清洗 1.基本概念 数据清洗从名字上也看的出就是把"脏"的"洗掉",指发现并纠正数据文件中可识别的错误的最后一道程序,包括检查数据一致性,处理无效值和缺失值等。因为数据仓库中的数据是面向某一主题的数据的集合,这些数据从多个业务系统中抽取而来而且包含历史数据,这样就避免不了有的数据是错误数据、有的数据相互之间有冲突,这些错误的或有冲突的数据显然是我们不想要的,称为"脏数据"。我们要按照一定的规则把"脏数据""洗掉",这就是数据清洗。而数据清洗的任务是过滤那些不符合要求的数据,将过滤的结果交给业务主管部门,确认是否过滤掉还是由业务单位修正之后再进行抽取。不符合要求的数据主要是有不完整的数据、错误的数据、重复的数据三大类。数据清洗是与问卷审核不同,录入后的数据清理一般是由计算机而不是人工完成。 ?残缺数据 这一类数据主要是一些应该有的信息缺失,如供应商的名称、分公司的名称、客户的区域信息缺失、业务系统中主表与明细表不能匹配等。对于这一类数据过滤出来,按缺失的内容分别写入不同Excel文件向客户提交,要求在规定的时间内补全。补全后才写入数据仓库。 折叠错误数据

这一类错误产生的原因是业务系统不够健全,在接收输入后没有进行判断直接写入后台数据库造成的,比如数值数据输成全角数字字符、字符串数据后面有一个回车操作、日期格式不正确、日期越界等。这一类数据也要分类,对于类似于全角字符、数据前后有不可见字符的问题,只能通过写SQL语句的方式找出来,然后要求客户在业务系统修正之后抽取。日期格式不正确的或者是日期越界的这一类错误会导致ETL运行失败,这一类错误需要去业务系统数据库用SQL 的方式挑出来,交给业务主管部门要求限期修正,修正之后再抽取。 折叠重复数据 对于这一类数据--特别是维表中会出现这种情况--将重复数据记录的所有字段导出来,让客户确认并整理。 数据清洗是一个反复的过程,不可能在几天内完成,只有不断的发现问题, 解决问题。对于是否过滤,是否修正一般要求客户确认,对于过滤掉的数据,写入Excel文件或者将过滤数据写入数据表,在ETL开发的初期可以每天向业务单位发送过滤数据的邮件,促使他们尽快地修正错误,同时也可以做为将来验证数据的依据。数据清洗需要注意的是不要将有用的数据过滤掉,对于每个过滤规则认真进行验证,并要用户确认。 数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,提取有用信息和形成结 论而对数据加以详细研究和概括总结的过程。这一过程也是质量管理体系的支持过程。在实 用中,数据分析可帮助人们作出判断,以便采取适当行动。 类型 在统计学领域,有些人将数据分析划分为描述性统计分析、探索性数据分析以及验证性数据分析;其中,探索性数据分析侧重于在数据之中发现新的特征,而验证性数据分析则侧重于已有假设的

数据挖掘分类算法比较

数据挖掘分类算法比较 分类是数据挖掘、机器学习和模式识别中一个重要的研究领域。通过对当前数据挖掘中具有代表性的优秀分类算法进行分析和比较,总结出了各种算法的特性,为使用者选择算法或研究者改进算法提供了依据。 一、决策树(Decision Trees) 决策树的优点: 1、决策树易于理解和解释.人们在通过解释后都有能力去理解决策树所表达的意义。 2、对于决策树,数据的准备往往是简单或者是不必要的.其他的技术往往要求先把数据一般化,比如去掉多余的或者空白的属性。 3、能够同时处理数据型和常规型属性。其他的技术往往要求数据属性的单一。 4、决策树是一个白盒模型。如果给定一个观察的模型,那么根据所产生的决策树很容易推出相应的逻辑表达式。 5、易于通过静态测试来对模型进行评测。表示有可能测量该模型的可信度。 6、在相对短的时间内能够对大型数据源做出可行且效果良好的结果。 7、可以对有许多属性的数据集构造决策树。 8、决策树可很好地扩展到大型数据库中,同时它的大小独立于数据库的大小。 决策树的缺点: 1、对于那些各类别样本数量不一致的数据,在决策树当中,信息增益的结果偏向于那些具有更多数值的特征。 2、决策树处理缺失数据时的困难。 3、过度拟合问题的出现。 4、忽略数据集中属性之间的相关性。 二、人工神经网络 人工神经网络的优点:分类的准确度高,并行分布处理能力强,分布存储及学习能力强,对噪声神经有较强的鲁棒性和容错能力,能充分逼近复杂的非线性关系,具备联想记忆的功能等。 人工神经网络的缺点:神经网络需要大量的参数,如网络拓扑结构、权值和阈值的初始值;不能观察之间的学习过程,输出结果难以解释,会影响到结果的可信度和可接受程度;学习时间过长,甚至可能达不到学习的目的。

数据挖掘十大算法

数据挖掘十大算法 数据挖掘十大算法—K 近邻算法 k -近邻算法是基于实例的学习方法中最基本的,先介绍基于实例学习的相关概念。 一、基于实例的学习。 1、已知一系列的训练样例,很多学习方法为目标函数建立起明确的一般化描述;但与此不同,基于实例的学习方法只是简单地把训练样例存储起来。 从这些实例中泛化的工作被推迟到必须分类新的实例时。每当学习器遇到一个新的查询实例,它分析这个新实例与以前存储的实例的关系,并据此把一个目标函数值赋给新实例。 2、基于实例的方法可以为不同的待分类查询实例建立不同的目标函数逼近。事实上,很多技术只建立目标函数的局部逼近,将其应用于与新查询实例邻近的实例,而从不建立在整个实例空间上都表现良好的逼近。当目标函数很复杂,但它可用不太复杂的局部逼近描述时,这样做有显著的优势。 3、基于实例方法的不足: (1)分类新实例的开销可能很大。这是因为几乎所有的计算都发生在分类时,而不是在第一次遇到训练样例时。所以,如何有效地索引训练样例,以减少查询时所需计算是一个重要的实践问题。(2)当从存储器中检索相似的训练样例时,它们一般考虑实例的所有属性。如果目标概念仅依赖于很多属性中的几个时,那么真正最“相似”的实例之间很可能相距甚远。 二、k-近邻法基于实例的学习方法中最基本的是k -近邻算法。这个算法假定所有的实例对应于n 维欧氏空间?n 中的点。一个实例的最近邻是根据标准欧氏距离定义的。更精确地讲,把任意的实例x 表示为下面的特征向量:其中a r (x ) 表示实例x 的第r 个属性值。那么两个实例x i 和x j 间的距离定义为d (x i , x j ) ,其中: 说明: 1、在最近邻学习中,目标函数值可以为离散值也可以为实值。 2、我们先考虑学习以下形式的离散目标函数。其中V 是有限集合 {v 1,... v s }。下表给出了逼近离散目标函数的k-近邻算法。 3、正如下表中所指出的,这个算法的返回值f' (x q ) 为对f (x q ) 的估计,它就是距离x q 最近的k 个训练样例中最普遍的f 值。 4、如果我们选择k =1,那么“1-近邻算法”

入侵检测系统研究的论文

入侵检测系统研究的论文 摘要介绍了入侵检测系统的概念,分析了入侵检测系统的模型;并对现有的入侵检测系统进行了分类,讨论了入侵检测系统的评价标准,最后对入侵检测系统的发展趋势作了有意义的预测。 关键词入侵检测系统;cidf ;网络安全;防火墙 0 引言 近年来,随着信息和网络技术的高速发展以及政治、经济或者军事利益的驱动,计算机和网络基础设施,特别是各种官方机构的网站,成为黑客攻击的热门目标。近年来对电子商务的热切需求,更加激化了这种入侵事件的增长趋势。由于防火墙只防外不防内,并且很容易被绕过,所以仅仅依赖防火墙的计算机系统已经不能对付日益猖獗的入侵行为,对付入侵行为的第二道防线——入侵检测系统就被启用了。 1 入侵检测系统(ids)概念 1980年,james 第一次系统阐述了入侵检测的概念,并将入侵行为分为外部滲透、内部滲透和不法行为三种,还提出了利用审计数据监视入侵活动的思想[1]。即其之后,1986年dorothy 提出实时异常检测的概念[2]并建立了第一个实时入侵检测模型,命名为入侵检测专家系统(ides),1990年,等设计出监视网络数据流的入侵检测系统,nsm(network security monitor)。自此之后,入侵检测系统才真正发展起来。 anderson将入侵尝试或威胁定义为:潜在的、有预谋的、未经授权的访问信息、操作信息、致使系统不可靠或无法使用的企图。而入侵检测的定义为[4]:发现非授权使用计算机的个体(如“黑客”)或计算机系统的合法用户滥用其访问系统的权利以及企图实施上述行为的个体。执行入侵检测任务的程序即是入侵检测系统。入侵检测系统也可以定义为:检测企图破坏计算机资源的完整性,真实性和可用性的行为的软件。 入侵检测系统执行的主要任务包括[3]:监视、分析用户及系统活动;审计系统构造和弱点;识别、反映已知进攻的活动模式,向相关人士报警;统计分析异常行为模式;评估重要系统和数据文件的完整性;审计、跟踪管理操作系统,识别用户违反安全策略的行为。入侵检测一般分为三个步骤:信息收集、数据分析、响应。 入侵检测的目的:(1)识别入侵者;(2)识别入侵行为;(3)检测和监视以实施的入侵行为;(4)为对抗入侵提供信息,阻止入侵的发生和事态的扩大; 2 入侵检测系统模型 美国斯坦福国际研究所(sri)的于1986年首次提出一种入侵检测模型[2],该模型的检测方法就是建立用户正常行为的描述模型,并以此同当前用户活动的审计记录进行比较,如果有较大偏差,则表示有异常活动发生。这是一种基于统计的检测方法。随着技术的发展,后来人们又提出了基于规则的检测方法。结合这两种方法的优点,人们设计出很多入侵检测的模型。通用入侵检测构架(common intrusion detection framework简称cidf)组织,试图将现有的入侵检测系统标准化,cidf阐述了一个入侵检测系统的通用模型(一般称为cidf模型)。它将一个入侵检测系统分为以下四个组件: 事件产生器(event generators) 事件分析器(event analyzers) 响应单元(response units) 事件数据库(event databases) 它将需要分析的数据通称为事件,事件可以是基于网络的数据包也可以是基于主机的系统日志中的信息。事件产生器的目的是从整个计算机环境中获得事件,并向系统其它部分提供此事件。事件分析器分析得到的事件并产生分析结果。响应单元则是对分析结果做出反应

分析报告、统计分析和数据挖掘的区别

分析报告、统计分析和数据挖掘的区别 关于数据挖掘的作用,Berry and Linoff的定义尽管有些言过其实,但清晰的描述了数据挖掘的作用。“分析报告给你后见之明 (hindsight);统计分析给你先机 (foresight);数据挖掘给你洞察力(insight)”。 举个例子说。 你看到孙悟空跟二郎神打仗,然后写了个分析报告,说孙悟空在柔韧性上优势明显,二郎神在力气上出类拔萃,所以刚开始不相上下;结果两个人跑到竹林里,在竹子上面打,孙悟空的优势发挥出来,所以孙悟空赢了。这叫分析报告。 孙悟空要跟二郎神打架了,有个赌徒找你预测。你做了个统计,发现两人斗争4567次,其中孙悟空赢3456次。另外,孙悟空斗牛魔王,胜率是89%,二郎神斗牛魔王胜率是71%。你得出趋势是孙悟空赢。因为你假设了这次胜利跟历史的关系,根据经验作了一个假设。这叫统计分析。 你什么都没做,让计算机自己做关联分析,自动找到了出身、教育、经验、单身四个因素。得出结论是孙悟空赢。计算机通过分析发现贫苦出身的孩子一般比皇亲国戚功夫练得刻苦;打架经验丰富的人因为擅长利用环境而机会更多;在都遇得到明师的情况下,贫苦出身的孩子功夫可能会高些;单身的人功夫总比同样环境非单身的高。孙悟空遇到的名师不亚于二郎神,而打架经验绝对丰富,并且单身,所以这次打头,孙悟空赢。这叫数据挖掘。 数据挖掘跟LOAP的区别在于它没有假设,让计算机找出这种背后的关系,而这种关系可能是你所想得到的,也可能是所想不到的。比如数据挖掘找出的结果发现在2亿条打斗记录中,姓孙的跟姓杨的打,总是姓孙的胜利,孙悟空姓孙,所以,悟空胜利。 用在现实中,我们举个例子来说,做OLAP分析,我们找找哪些人总是不及时向电信运营商缴钱,一般会分析收入低的人往往会缴费不及时。通过分析,发现不及时缴钱的穷人占71%。而数据挖掘则不同,它自己去分析原因。原因可能是,家住在五环以外的人,不及时缴钱。这些结论对推进工作有很深的价值,比如在五环外作市场调研,发现需要建立更多的合作渠道以方便缴费。这是数据挖掘的价值。

数据挖掘算法

数据挖掘的10大经典算法 国际权威的学术组织the IEEE International Conference on Data Mining (ICDM) 2006年12月评选出了数据挖掘领域的十大经典算法:C4.5, k-Means, SVM, Apriori, EM, PageRank, AdaBoost, kNN, Naive Bayes, and CART. 不仅仅是选中的十大算法,其实参加评选的18种算法,实际上随便拿出一种来都可以称得上是经典算法,它们在数据挖掘领域都产生了极为深远的影响。 1. C4.5 C4.5算法是机器学习算法中的一种分类决策树算法,其核心算法是ID3算法. C4.5算法继承了ID3算法的优点,并在以下几方面对ID3算法进行了改进: 1) 用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性的不足; 2) 在树构造过程中进行剪枝; 3) 能够完成对连续属性的离散化处理; 4) 能够对不完整数据进行处理。 C4.5算法有如下优点:产生的分类规则易于理解,准确率较高。其缺点是:在 构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效。 2. The k-means algorithm 即K-Means算法 k-means algorithm算法是一个聚类算法,把n的对象根据他们的属性分为k个分割,k < n。它与处理混合正态分布的最大期望算法很相似,因为他们都试图找到数据中自然聚类的中心。它假设对象属性来自于空间向量,并且目标是使各个群组内部的均方误差总和最小。 3. Support vector machines 支持向量机,英文为Support Vector Machine,简称SV机(论文中一般简称SVM)。它是一种監督式學習的方法,它广泛的应用于统计分类以及回归分析中。支持向量机将向量映射到一个更高维的空间里,在这个空间里建立有一个最大间隔超平面。在分开数据的超平面的两边建有两个互相平行的超平面。分隔超平面使两个平行超平面的距离最大化。假定平行超平面间的距离或差距越大,分类器的总误差越小。一个极好的指南是C.J.C Burges的《模式识别支持向量机指南》。van der Walt 和 Barnard 将支持向量机和其他分类器进行了比较。 4. The Apriori algorithm

大数据、数据分析和数据挖掘的区别

大数据、数据分析和数据挖掘的区别 大数据、数据分析、数据挖掘的区别是,大数据是互联网的海量数据挖掘,而数据挖掘更多是针对内部企业行业小众化的数据挖掘,数据分析就是进行做出针对性的分析和诊断,大数据需要分析的是趋势和发展,数据挖掘主要发现的是问题和诊断。具体分析如下: 1、大数据(big data): 指无法在可承受的时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产; 在维克托·迈尔-舍恩伯格及肯尼斯·库克耶编写的《大数据时代》中大数据指不用随机分析法(抽样调查)这样的捷径,而采用所有数据进行分析处理。大数据的5V特点(IBM提出):Volume(大量)、Velocity(高速)、Variety(多样)、Value(价值)Veracity(真实性) 。 2、数据分析:

是指用适当的统计分析方法对收集来的大量数据进行分析,提取有用信息和形成结论而对数据加以详细研究和概括总结的过程。这一过程也是质量管理体系的支持过程。在实用中,数据分析可帮助人们作出判断,以便采取适当行动。 数据分析的数学基础在20世纪早期就已确立,但直到计算机的出现才使得实际操作成为可能,并使得数据分析得以推广。数据分析是数学与计算机科学相结合的产物。 3、数据挖掘(英语:Data mining): 又译为资料探勘、数据采矿。它是数据库知识发现(英语:Knowledge-Discovery in Databases,简称:KDD)中的一个步骤。数据挖掘一般是指从大量的数据中通过算法搜索隐藏于其中信息的过程。数据挖掘通常与计算机科学有关,并通过统计、在线分析处理、情报检索、机器学习、专家系统(依靠过去的经验法则)和模式识别等诸多方法来实现上述目标。 简而言之: 大数据是范围比较广的数据分析和数据挖掘。 按照数据分析的流程来说,数据挖掘工作较数据分析工作靠前些,二者又有重合的地方,数据挖掘侧重数据的清洗和梳理。 数据分析处于数据处理的末端,是最后阶段。 数据分析和数据挖掘的分界、概念比较模糊,模糊的意思是二者很难区分。 大数据概念更为广泛,是把创新的思维、信息技术、统计学等等技术的综合体,每个人限于学术背景、技术背景,概述的都不一样。

数据挖掘中十大经典算法

数据挖掘十大经典算法 国际权威的学术组织the IEEE International Conference on Data Mining (ICDM) 2006年12月评选出了数据挖掘领域的十大经典算法:C4.5, k-Means, SVM, Apriori, EM, PageRank, AdaBoost, kNN, Naive Bayes, and CART. 不仅仅是选中的十大算法,其实参加评选的18种算法,实际上随便拿出一种来都可以称得上是经典算法,它们在数据挖掘领域都产生了极为深远的影响。 1. C4.5 C4.5算法是机器学习算法中的一种分类决策树算法,其核心算法是ID3算法. C4.5算法继承了ID3算法的优点,并在以下几方面对ID3算法进行了改进: 1) 用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性的不足; 2) 在树构造过程中进行剪枝; 3) 能够完成对连续属性的离散化处理; 4) 能够对不完整数据进行处理。 C4.5算法有如下优点:产生的分类规则易于理解,准确率较高。其缺点是:在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效。 2. The k-means algorithm 即K-Means算法 k-means algorithm算法是一个聚类算法,把n的对象根据他们的属性分为k个分割,k < n。它与处理混合正态分布的最大期望算法很相似,因为他们都试图找到数据中自然聚类的中心。它假设对象属性来自于空间向量,并且目标是使各个群组内部的均方误差总和最小。 3. Support vector machines 支持向量机,英文为Support Vector Machine,简称SV机(论文中一般简称SVM)。它是一种監督式學習的方法,它广泛的应用于统计分类以及回归分析中。支持向量机将向量映射到一个更高维的空间里,在这个空间里建立有一个最大间隔超平面。在分开数据的超平面的两边建有两个互相平行的超平面。分隔超平面使两个平行超平面的距离最大化。假定平行超平面间的距离或差距越大,分类器的总误差越小。一个极好的指南是C.J.C Burges的《模式识别支持向量机指南》。van der Walt 和Barnard 将支持向量机和其他分类器进行了比较。 4. The Apriori algorithm Apriori算法是一种最有影响的挖掘布尔关联规则频繁项集的算法。其核心是基于两阶段频集思想的递推算法。该关联规则在分类上属于单维、单层、布尔关联规则。在这里,所有支持度大于最小支持度的项集称为频繁项集,简称频集。 5. 最大期望(EM)算法 在统计计算中,最大期望(EM,Expectation–Maximization)算法是在概率(probabilistic)模型中寻找参数最大似然估计的算法,其中概率模型依赖于无法观测的隐藏变量(Latent Variabl)。最大期望经常用在机器学习和计算机视觉的数据集聚(Data Clustering)领域。 6. PageRank PageRank是Google算法的重要内容。2001年9月被授予美国专利,专利人是Google创始人之一拉里?佩奇(Larry Page)。因此,PageRank里的page不是指网页,而是指佩奇,即这个

数据分析与挖掘实验报告

数据分析与挖掘实验报告

《数据挖掘》实验报告 目录 1.关联规则的基本概念和方法 (1) 1.1数据挖掘 (1) 1.1.1数据挖掘的概念 (1) 1.1.2数据挖掘的方法与技术 (2) 1.2关联规则 (5) 1.2.1关联规则的概念 (5) 1.2.2关联规则的实现——Apriori算法 (7) 2.用Matlab实现关联规则 (12) 2.1Matlab概述 (12) 2.2基于Matlab的Apriori算法 (13) 3.用java实现关联规则 (19) 3.1java界面描述 (19) 3.2java关键代码描述 (23) 4、实验总结 (29) 4.1实验的不足和改进 (29) 4.2实验心得 (30)

1.关联规则的基本概念和方法 1.1数据挖掘 1.1.1数据挖掘的概念 计算机技术和通信技术的迅猛发展将人类社会带入到了信息时代。在最近十几年里,数据库中存储的数据急剧增大。数据挖掘就是信息技术自然进化的结果。数据挖掘可以从大量的、不完全的、有噪声的、模糊的、随机的实际应用数据中,提取隐含在其中的,人们事先不知道的但又是潜在有用的信息和知识的过程。 许多人将数据挖掘视为另一个流行词汇数据中的知识发现(KDD)的同义词,而另一些人只是把数据挖掘视为知识发现过程的一个基本步骤。知识发现过程如下: ·数据清理(消除噪声和删除不一致的数据)·数据集成(多种数据源可以组合在一起)·数据转换(从数据库中提取和分析任务相关的数据) ·数据变换(从汇总或聚集操作,把数据变换和统一成适合挖掘的形式) ·数据挖掘(基本步骤,使用智能方法提取数

据模式) ·模式评估(根据某种兴趣度度量,识别代表知识的真正有趣的模式) ·知识表示(使用可视化和知识表示技术,向用户提供挖掘的知识)。 1.1.2数据挖掘的方法与技术 数据挖掘吸纳了诸如数据库和数据仓库技术、统计学、机器学习、高性能计算、模式识别、神经网络、数据可视化、信息检索、图像和信号处理以及空间数据分析技术的集成等许多应用领域的大量技术。数据挖掘主要包括以下方法。神经网络方法:神经网络由于本身良好的鲁棒性、自组织自适应性、并行处理、分布存储和高度容错等特性非常适合解决数据挖掘的问题,因此近年来越来越受到人们的关注。典型的神经网络模型主要分3大类:以感知机、bp反向传播模型、函数型网络为代表的,用于分类、预测和模式识别的前馈式神经网络模型;以hopfield 的离散模型和连续模型为代表的,分别用于联想记忆和优化计算的反馈式神经网络模型;以art 模型、koholon模型为代表的,用于聚类的自组

数据挖掘主要算法

朴素贝叶斯: 有以下几个地方需要注意: 1. 如果给出的特征向量长度可能不同,这是需要归一化为通长度的向量(这里以文本分类为例),比如说是句子单词的话,则长度为整个词汇量的长度,对应位置是该单词出现的次数。 2. 计算公式如下: 其中一项条件概率可以通过朴素贝叶斯条件独立展开。要注意一点就是的计算方法,而由朴素贝叶斯的前提假设可知, = ,因此一般有两种,一种是在类别为ci的那些样本集中,找到wj出现次数的总和,然后除以该样本的总和;第二种方法是类别为ci的那些样本集中,找到wj出现次数的总和,然后除以该样本中所有特征出现次数的总和。 3. 如果中的某一项为0,则其联合概率的乘积也可能为0,即2中公式的分子为0,为了避免这种现象出现,一般情况下会将这一项初始化为1,当然为了保证概率相等,分母应对应初始化为2(这里因为是2类,所以加2,如果是k类就需要加k,术语上叫做laplace 光滑, 分母加k的原因是使之满足全概率公式)。 朴素贝叶斯的优点: 对小规模的数据表现很好,适合多分类任务,适合增量式训练。 缺点: 对输入数据的表达形式很敏感。 决策树: 决策树中很重要的一点就是选择一个属性进行分枝,因此要注意一下信息增益的计算公式,并深入理解它。 信息熵的计算公式如下:

其中的n代表有n个分类类别(比如假设是2类问题,那么n=2)。分别计算这2类样本在总样本中出现的概率p1和p2,这样就可以计算出未选中属性分枝前的信息熵。 现在选中一个属性xi用来进行分枝,此时分枝规则是:如果xi=vx的话,将样本分到树的一个分支;如果不相等则进入另一个分支。很显然,分支中的样本很有可能包括2个类别,分别计算这2个分支的熵H1和H2,计算出分枝后的总信息熵H’=p1*H1+p2*H2.,则此时的信息增益ΔH=H-H’。以信息增益为原则,把所有的属性都测试一边,选择一个使增益最大的属性作为本次分枝属性。 决策树的优点: 计算量简单,可解释性强,比较适合处理有缺失属性值的样本,能够处理不相关的特征; 缺点: 容易过拟合(后续出现了随机森林,减小了过拟合现象); Logistic回归: Logistic是用来分类的,是一种线性分类器,需要注意的地方有: 1. logistic函数表达式为: 其导数形式为: 2. logsitc回归方法主要是用最大似然估计来学习的,所以单个样本的后验概率为: 到整个样本的后验概率:

对数据挖掘的认识

对数据挖掘的认识 一、数据挖掘的理解 数据挖掘是从大量的、不完全的、有噪声的、模糊的、随机的数据集中识别出有效的、新颖的、潜在有用的,以及最终可理解的知识的非平凡过程。这个定义包括几层含义:数据源必须是真实的、大量的、含噪声的;发现的是用户感兴趣的知识;发现的知识要可接受、可理解、可运用;并不要求发现放之四海皆准的知识,仅支持特定的发现问题。数据挖掘,简单地可理解为通过对环境数据的操作,从数据中发现有用的知识。它是一门涉及面很广的交叉学科,包括机器学习、数理统计、神经网络、数据库、模式识别、粗糙集、模糊数学等相关技术。就具体应用而言,数据挖掘是一个利用各种分析工具在海量数据中发现模型和数据间关系的过程,这些模型和关系可以用来做出预测。 从商业角度上看,数据挖掘是一种新的商业信息处理技术,其主要特点是对商业数据库中的大量业务数据进行抽取、转换、分析和其他模型化处理,从中提取辅助商业决策的关键性数据。数据挖掘与传统的数据分析(如查询、报表、联机应用分析)的本质区别是数据挖掘是在没有明确假设的前提下去挖掘信息、发现知识。数据挖掘所得到的信息应具有先前未知,有效和可实用三个特征。先前未知的信息是指该信息是预先未曾预料到的,既数据挖掘是要发现那些不能靠直觉发现的信息或知识,甚至是违背直觉的信息或知识,挖掘出的信息越是出乎意料,就可能越有价值。 二、数据挖掘的主要方法 数据挖掘技术主要来源于四个领域:统计分析、机器学习、神经网络和数据库。所以,数据挖掘的主要方法可以粗分为:统计方法、机器学习方法、神经网络方法和数据库方法。 统计方法主要包括:回归分析(多元回归、自回归等)、判别分析(贝叶斯判别、费歇尔判别、非参数判别等)、聚类分析(系

《大数据时代下的数据挖掘》试题和答案及解析

《海量数据挖掘技术及工程实践》题目 一、单选题(共80题) 1)( D )的目的缩小数据的取值范围,使其更适合于数据挖掘算法的需要,并且能够得到 和原始数据相同的分析结果。 A.数据清洗 B.数据集成 C.数据变换 D.数据归约 2)某超市研究销售纪录数据后发现,买啤酒的人很大概率也会购买尿布,这种属于数据挖 掘的哪类问题?(A) A. 关联规则发现 B. 聚类 C. 分类 D. 自然语言处理 3)以下两种描述分别对应哪两种对分类算法的评价标准? (A) (a)警察抓小偷,描述警察抓的人中有多少个是小偷的标准。 (b)描述有多少比例的小偷给警察抓了的标准。 A. Precision,Recall B. Recall,Precision A. Precision,ROC D. Recall,ROC 4)将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B. 分类和预测 C. 数据预处理 D. 数据流挖掘 5)当不知道数据所带标签时,可以使用哪种技术促使带同类标签的数据与带其他标签的数 据相分离?(B) A. 分类 B. 聚类 C. 关联分析 D. 隐马尔可夫链 6)建立一个模型,通过这个模型根据已知的变量值来预测其他某个变量值属于数据挖掘的 哪一类任务?(C) A. 根据内容检索 B. 建模描述 C. 预测建模 D. 寻找模式和规则 7)下面哪种不属于数据预处理的方法? (D) A.变量代换 B.离散化

C.聚集 D.估计遗漏值 8)假设12个销售价格记录组已经排序如下:5, 10, 11, 13, 15, 35, 50, 55, 72, 92, 204, 215 使用如下每种方法将它们划分成四个箱。等频(等深)划分时,15在第几个箱子内? (B) A.第一个 B.第二个 C.第三个 D.第四个 9)下面哪个不属于数据的属性类型:(D) A.标称 B.序数 C.区间 D.相异 10)只有非零值才重要的二元属性被称作:( C ) A.计数属性 B.离散属性 C.非对称的二元属性 D.对称属性 11)以下哪种方法不属于特征选择的标准方法: (D) A.嵌入 B.过滤 C.包装 D.抽样 12)下面不属于创建新属性的相关方法的是: (B) A.特征提取 B.特征修改 C.映射数据到新的空间 D.特征构造 13)下面哪个属于映射数据到新的空间的方法? (A) A.傅立叶变换 B.特征加权 C.渐进抽样 D.维归约 14)假设属性income的最大最小值分别是12000元和98000元。利用最大最小规范化的方 法将属性的值映射到0至1的范围内。对属性income的73600元将被转化为:(D) A.0.821 B.1.224 C.1.458 D.0.716 15)一所大学内的各年纪人数分别为:一年级200人,二年级160人,三年级130人,四年 级110人。则年级属性的众数是: (A) A.一年级 B.二年级 C.三年级 D.四年级

数据挖掘十大算法

1.C4.5算法是机器学习算法中的一种分类决策树算法 2. k-means algorithm算法是一个聚类算法,其核心算法是ID3算法. C4.5算法继承了ID3算法的优点 3. Support vector machines,支持向量机,简称SV机(论文中一般简称SVM)。它是一种監督式學習的方法,它广泛的应用于统计分类以及回归分析中 4. Apriori算法是一种最有影响的挖掘布尔关联规则频繁项集的算法 5.最大期望(EM,Expectation–Maximization)算法是在概率(probabilistic)模型中寻找参数最大似然估计的算法 6.PageRank是Google算法的重要内容。PageRank根据网站的外部链接和内部链接的数量和质量俩衡量网站的价值 7. Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。其算法本身是通过改变数据分布来实现的8. kNN: k-nearest neighbor classification K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别 9. Naive Bayes 在众多的分类模型中,应用最为广泛的两种分类模型是决策树模型(Decision Tree Model)和朴素贝叶斯模型(Naive Bayesian Model,NBC) 10. CART: 分类与回归树 CART, Classification and Regression Trees。在分类树下面有两个关键的思想。第一个是关于递归地划分自变量空间的想法;第二个想法是用验证数据进行剪枝 一C4.5 机器学习中,决策树是一个预测模型;他代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值。决策树仅有单一输出,若欲有复数输出,可以建立独立的决策树以处理不同输出。 从数据产生决策树的机器学习技术叫做决策树学习, 通俗说就是决策树。 决策树学习也是数据挖掘中一个普通的方法。在这里,每个决策树都表述了一种树型结构,他由他的分支来对该类型的对象依靠属性进行分类。每个决策树可以依靠对源数据库的分割进行数据测试。这个过程可以递归式的对树进行修剪。当不能再进行分割或一个单独的类可以被应用于某一分支时,递归过程就完成了。另外,随机森林分类器将许多决策树结合起来以提升分类的正确率。 决策树同时也可以依靠计算条件概率来构造。决策树如果依靠数学的计算方法可以取得更加理想的效果。 决策树是如何工作的 决策树一般都是自上而下的来生成的。 选择分割的方法有好几种,但是目的都是一致的:对目标类尝试进行最佳的分割。

相关文档
最新文档