机器学习与Web安全结合的基础

  • 注:本篇博客可以看作是拜读《Web安全之机器学习入门》后的笔记。

人工智能从提出至今,已经得到了长足的发展。从谷歌大脑,到百度无人车,到阿尔法狗围棋大战,人工智能越来越具有生机与活力。

与此同时,国内外的网络安全形势更加严峻,而信息安全人才却一直存在较大的缺口。安全技术和人工智能的人结合已成为大势所趋。事实上已经如此实现了,人工智能在黄反鉴定、 恶意链接、 业务风控领域、 病毒分析、APT检测方面都取得了不错的进展。

我们知道,机器学习的算法就是对数据进行处理,从大量的数据中学得知识并加以运用。所谓巧妇难为无米之炊,人工智能与Web安全的结合发展,势必需要各种有关网络信息安全的数据集来进行机器学习,这是人工智能实现的基础。在众多数据集合中,譬如KDD 99、HTTP DATASET CSIC 2010、SEA数据集、ADFA-LD数据集、Alexa域名数据、Sclikit-Learn数据集、MNIST数据集、Movie Review Data、SpamBase数据集、Enron数据集等数据集。

数字型特征提取有标准化、正则化和归一化操作:

>>> from sklearn import preprocessing
>>> import numpy as np
>>> X=np.array([[1.,-1.,2.],
	       [2.,0.,0.],
	       [0.,1.,-1.]])
>>> X_scaled=preprocessing.scale(X)
>>> X_scaled
array([[ 0.        , -1.22474487,  1.33630621],
       [ 1.22474487,  0.        , -0.26726124],
       [-1.22474487,  1.22474487, -1.06904497]])
>>> X_normalized=preprocessing.normalize(X,norm='l2')
>>> X_normalized
array([[ 0.40824829, -0.40824829,  0.81649658],
       [ 1.        ,  0.        ,  0.        ],
       [ 0.        ,  0.70710678, -0.70710678]])
>>> min_max_scaler=preprocessing.MinMaxScaler()
>>> X_train_minmax=min_max_scaler.fit_transform(X)
>>> X_train_minmax
array([[0.5       , 0.        , 1.        ],
       [1.        , 0.5       , 0.33333333],
       [0.        , 1.        , 0.        ]])

文本型数据的提取本质是单词切分,不同的单词当作一个新的特征:

以hash结构为例:
>>> measurements=[
	{'city':'Dubai','temperature':33.},
	{'city':'London','temperature':12.},
	{'city':'Beijing','temperature':18.},
	]
>>> from sklearn.feature_extraction import DictVectorizer
>>> vec= DictVectorizer()
>>> vec.fit_transform(measurements).toarray()
array([[ 0.,  1.,  0., 33.],
       [ 0.,  0.,  1., 12.],
       [ 1.,  0.,  0., 18.]])
>>> vec.get_feature_names()
['city=Beijing', 'city=Dubai', 'city=London', 'temperature']

在文本特征提取中,词袋模型在词集模型的基础上加上了频率的维度:

导入相关函数库:
>>> from sklearn.feature_extraction.text import CountVectorizer

实例化分词对象:
>>> vectorizer=CountVectorizer(min_df=1)
>>> vectorizer
CountVectorizer(analyzer='word', binary=False, decode_error='strict',
        dtype=, encoding='utf-8', input='content',
        lowercase=True, max_df=1.0, max_features=None, min_df=1,
        ngram_range=(1, 1), preprocessor=None, stop_words=None,
        strip_accents=None, token_pattern='(?u)\\b\\w\\w+\\b',
        tokenizer=None, vocabulary=None)

将文本进行词袋处理:
>>> corpus = [
	'This is the first document.',
	'This is the secend document.',
	'And the third one.',
	'Is this the first document?',
	]
>>> X=vectorizer.fit_transform(corpus)
>>> X
<4x9 sparse matrix of type ''
	with 19 stored elements in Compressed Sparse Row format>

获得对应的特征名称
>>> corpus = [
	'This is the first document.',
	'This is the second document.',
	'And the third one.',
	'Is this the first document?',
	]
>>> X=vectorizer.fit_transform(corpus)
>>> X
<4x9 sparse matrix of type ''
	with 19 stored elements in Compressed Sparse Row format>
>>> vectorizer.get_feature_names()==(
	['and','document','first','is','one','second','the','third','this'])
True
>>> 

词袋化后,下面进行向量化:
>>> vocabulary=vectorizer.vocabulary_

我个人做数据挖掘项目时,喜欢Neo4j数据库,常常需要使用到csv格式文件。事实上,处理数据时,CSV是最常见的格式。

机器学习与Web安全结合的基础_第1张图片

效果验证时机器学习非常重要的环节,每次写论文,导师都会敲我脑袋说“性能呢?”。最常使用的就是交叉验证了:

机器学习与Web安全结合的基础_第2张图片

机器学习与Web安全结合的基础_第3张图片

说到web安全,形势极其严峻。像以前学过的XSS攻击、SQL注入相关的安全事件层出不穷。webshell是一种命令执行环境,常常被黑客用来长期控制被害服务器,并进一步进行渗透。webshell功能强大,如文件编辑、注册表管理等等。近年来webshell被控制的事件也屡屡发生,中国菜刀等工具也成为了宠儿。僵尸网络可以说是一对多的典型黑客控制例子,僵尸网络危害巨大。

我们已知在安全中已经产生了各种各样的数据集,结合机器学习,能够快速较为准确的检测恶意操作,这也是机器学习和Web安全结合的前提和基础。

 

 

你可能感兴趣的:(17.人工智能,3.Web程序,数据挖掘)