计算智能技术-序列检测

1. 实验内容简介

系统调用输入:不定长的离散序列,如A调用序列[10, 22, 23, 33, 32],有5条调用指令,B调用序列[1, 33],只存在两条调用序列,无法直接输入到多层感知机,我们所要做的是让输入规范化,每条指令对应相同长度的特征序列,比如,总共词库量是3000,我们可以定义一个3000长度的向量,每个元素对应一个词的调用频率即出现次数。在序列数据中提取到固定长度的特征向量后,可以训练人工神经网络模型对 系统调用进行分类判别。人工神经网络模型能够学习到每个类别下样本的特点, 并构造出一个从输入的特征向量到输出的类别判断的映射。训练完成后,对于任意给定的一条系统调用序列,即可以按同样的方法提取 特征向量,并输入到人工神经网络中进行预测,以判断其是否为恶意入侵 数据集中0表示正常,1表示攻击,在实验中,用70%的数据作为训练集,剩下作为测试30%,正常攻击序列和异常攻击序列的比例约为7:1 在本实验中,我们通过对系统调用序列提取特征向量,并构建人工神经网络模型来解决系统调用序列的入侵检测问题。系统调用序列是不定长的离散符号序列,无法直接输入到多层感知机,需要使用合适的方法提取出合适的特征向量。实验中需要实现并测试词袋模型、n-gram模型等不同的特征提取方法,了解每种特征提取方法的特点。 另一方面,本实验还对人工神经网络的不同参数设置进行测试,通过选取不同的模型参数,测试不同参数下模型的检测效果,分析这些参数对检测效果的影响。 最后,分析实验方法存在的局限性,对提供的数据集中的正常序列和攻击序列的特点进行分析,结合课程学习的相关计算智能技术,调研相关文献,对实验的入侵检测方法进行改进,以达到更好的检测效果。

2. 特征提取方法特点介绍

2.1 词袋

  1. 词袋模型(Bag of Words,简称BoW),即将所有词语装进一个袋子里,不考虑其词法和语序的问题,即每个词语都是独立的,把每一个单词都进行统计,同时计算每个单词出现的次数。也就是说,词袋模型不考虑文本中词与词之间的上下文关系,仅仅只考虑所有词的权重,而权重与词在文本中出现的频率有关。

优点:每个词都有统计,考虑了词的出现频率
缺点:不考虑文本中词与词之间的上下文关系,仅仅只考虑所有词的权重,不考虑语序关系
因此会丢失一部分文本的语义。但是大多数时候,如果我们的目的是分类聚类,则词袋模型表现的很好。

  1. 词袋步骤:
    • 分词:对语句进行划分,得到一个个单词,统计单词在系统调用序列中出现的次数
    • 统计修订词特征值(counting):得到该文本基于词的特征后,需要进行权重的修正,有些词在文本中尽管词频高,但是并不重要,这个时候就可以用TF-IDF技术,进行特征的权重修正。
    • TF-IDF是一种统计方法,用以评估一个字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语。不同词语在同一个句子中的重要性是不一样的。
    • TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。TF-IDF实际上是:TF * IDF
    • 逆向文件频率(Inverse Document Frequency,IDF):是一个词语普遍重要性的度量,强调词对文档的区分能力。某一特定词语的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到。IDF反应了一个词在所有文本中出现的频率,如果一个词在很多的文本中出现,那么它的IDF值应该低,比如“to”;反过来,如果一个词在比较少的文本中出现,那么它的IDF值应该高。

向量化的方法很好用,也很直接,但是在有些场景下很难使用,比如分词后的词汇表非常大,达到100万+,此时如果我们直接使用向量化的方法,将对应的样本对应特征矩阵载入内存,有可能将内存撑爆,在这种情况下怎么办呢?第一反应是要进行特征的降维,说的没错!

2.3 N-gram

  1. 该模型基于这样一种假设,第n个词的出现只与前面N-1个词相关,而与其它任何词都不相关,整句的概率就是各个词出现概率的乘积。这些概率可以通过直接从语料中统计N个词同时出现的次数得到。常用的是二元的Bi-Gram和三元的Tri-Gram。
  2. 我们给定一个词,然后猜测下一个词是什么。当我说“艳照门”这个词时,你想到下一个词是什么呢?我想大家很有可能会想到“陈冠希”,基本上不会有人会想到“陈志杰”吧。N-gram模型的主要思想就是这样的。
  3. 对于一个句子T,我们怎么算它出现的概率呢?假设T是由词序列W1,W2,W3,…Wn组成的,那么P(T)=P(W1W2W3Wn)=P(W1)P(W2|W1)P(W3|W1W2)…P(Wn|W1W2…Wn-1)
    在这里插入图片描述

在这里插入图片描述

但是这种方法存在两个致命的缺陷:一个缺陷是参数空间过大,不可能实用化;另外一个缺陷是数据稀疏严重。

  1. 如果一个词的出现仅依赖于它前面出现的两个词,那么我们就称之为trigram。
  2. P(T) = P(W1W2W3…Wn)=P(W1)P(W2|W1)P(W3|W1W2)…P(Wn|W1W2…Wn-1)
    ≈P(W1)P(W2|W1)P(W3|W2)…P(Wn|Wn-1)
    N-Gram模型
    在这里插入图片描述
    在这里插入图片描述

3. 人工神经网络

3.1 神经网络结构

在这里插入图片描述

  1. 通常一个神经网络由一个input layer,多个hidden layer和一个output layer构成。
  2. 图中圆圈可以视为一个神经元(又可以称为感知器)
  3. 设计神经网络的重要工作是设计hidden layer,及神经元之间的权重
  4. 添加少量隐层获得浅层神经网络SNN;隐层很多时就是深层神经网络DNN
  5. 线性回归模型:z=b+w1x1+w2x2
  6. sigmoid函数:g(z)=1/(1+ex)
    在这里插入图片描述
    神经网络应用在分类问题中效果很好。 工业界中分类问题居多。LR或者linear SVM更适用线性分割。如果数据非线性可分(现实生活中多是非线性的),LR通常需要靠特征工程做特征映射,增加高斯项或者组合项;SVM需要选择核。 而增加高斯项、组合项会产生很多没有用的维度,增加计算量。GBDT可以使用弱的线性分类器组合成强分类器,但维度很高时效果可能并不好。

为什么要加上一个激活函数?
简单理解上,如果不加激活函数,无论多少层隐层,最终的结果还是原始输入的线性变化,这样一层隐层就可以达到结果,就没有多层感知器的意义了。所以每个隐层都会配一个激活函数,提供非线性变化。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值