数据集
1、KDD 99数据
KDD是知识发现与数据挖掘(Knowledge Discovey and Data Mining)的简称。
2、HTTP DATASET CSIC 2019
HTTP DATASET CSIC 2019包含大量标注过的针对web服务器的36000个正常请求及25000个攻击请求,攻击类型包括sql注入、缓冲区溢出、信息泄露、文件包含、xss等,被广泛用于WAF类产品的功能评测。
3、SEA数据集
数据集SEA被广泛用于内部伪装者威胁检测研究,涵盖70多个UNIX系统用户的行为日志,这些数据来自于UNIX系统acct机制记录的用户使用的命令。数据集链接:http://www.schonlau.net/
4、ADFA-LD数据集
ADFA-LD数据集是澳大利亚国防学院对外发布的一套主机级入侵检测系统的数据集合,被广泛应用于入侵检测类产品的测试。该数据集包括Linux和Windows,记录了系统调用数据。项目主页:https://www.unsw.adfa.edu.au
5、Alexa域名数据
Alexa对外提供了全球排名TOP一百万的网站域名的下载,文件是CSV格式,以排名、域名组成。
6、Scikit-Learn数据集
其中最常见的是iris数据集。
7、MNIST数据集
MNIST是一个入门级的计算机视觉数据集,包括各种手写数字图片。
网址为:http://yann.lecun.com/exdb/mnist/
8、Movie Review Data
Movie Review Data数据集包括1000条正面的评论和1000条负面评论,被广泛应用于文本分类,尤其是恶意评论识别方面。
网址:http://www.cs.cornell.edu/People/pabo/movie-review-data/DŽ
9、SpamBase数据集
SpamBase是入门级的垃圾邮件分类训练集。网址:http://archive.ics.uci.edu/ml/datasets/SpambaseDŽ
10、Enron数据集
机器学习领域使用Enron公司的归档邮件来研究文档分类、词性标注、垃圾邮件识别等。网址:http://www2.aueb.gr/users/ion/data/enron-spam/
特征提取
1、数字型特征提取
对于一个多维的特征,某一个特征的取值范围特别大,很可能导致其他特征对结果的影响被忽略。所以要先对数字型特征进行预处理。常见的预处理方式有以下几种。
【1】标准化:
安装sklearn的时候要注意顺序。安装顺序:numpy / scipy / matplotlib / scikit-learn
# pip安装
pip install --index https://pypi.mirrors.ustc.edu.cn/simple/ numpy
pip install --index https://pypi.mirrors.ustc.edu.cn/simple/ scipy
pip install --index https://pypi.mirrors.ustc.edu.cn/simple/ matplotlib
pip install --index https://pypi.mirrors.ustc.edu.cn/simple/ scikit-learn
【2】正则化
【3】归一化
2、文本型特征提取
文本型数据特征提取本质上是做单词的切分,不同的单词当作一个新的特征,以hash结构为例:
以上列子中键值'city'有多个取值,可直接将每个取值作为新的特征即可。键值temperature是数值型,可以直接作为特征使用。
文本特征提取有两个非常重要的模型:
词集模型:单词构成的集合,集合中的每个元素都只有一个,即词集中的每个单词都只有一个。
词袋模型:如果一个单词在文档中出现不止一次,并统计其出现的次数(频数)。
两者本质上的区别,词袋是在词集的基础上增加了频率的维度:词集只关注有和没有,词袋还要关注有几个。
对一篇文章进行特征化,最常见的方式就是词袋。
导入相关的函数库:
CountVectorizer是属于常见的特征数值计算类,是一个文本特征提取方法。对于每一个训练文本,它只考虑每种词汇在该训练文本中出现的频率。
CountVectorizer会将文本中的词语转换为词频矩阵,它通过fit_transform函数计算各个词语出现的次数。
关于CountVectorizer参数和方法信息,输入命令help(CountVectorizer)查看。
实例化分词对象:
将文本进行词袋处理:
获取对应的特征名称:
获取词袋数据,完成了词袋化。
使用现有的词袋的特征对程序中其他文本进行向量化:
这里将各个单词出现的频率情况以数组形式展现了出来。9列为提取的9个特征值,4行是文本有4个,对应的每个单词在每个文本出现的频率。
定义词袋的特征空间叫做词汇表vocabulary:
针对其他文本进行词袋处理时,可以直接使用现有的词汇表:
3、数据读取
处理数据时,最常见的格式是CSV,文件的每行记录一个向量,其中最后一列为标记。TensorFlow提供了非常便捷的方式从CSV文件中读取数据集。
加载对应的函数库:
import tensorflow as tf
import numpy as np
从CSV文件中读取数据(tensorflow2.0版本开始没有tf.contrib了):
training_set = tf.contrib.learn.datasets.base.load_csv_with_header(
filename=" iris_training.csv",
target_dtype=np.int,
features_dtype=np.float32)
feature_columns = [tf.contrib.layers.real_valued_column("", dimension=4)]
其中各个参数定义为:
fliename,文件名;
target_dtype ,标记数据类型;
features_dtype,特征数据类型。
访问数据集合的特征以及标记的方式为:
x=training_set.data
y=training_set.target
效果验证
最常使用的是交叉验证。以SVM为例,导入SVM库以及Scikit-Learn自带的样本库datasets:
为了保证效果,使用函数train_test_spli随机分割样本为训练样本和测试样本:
调用SVM进行训练:
判断预测结果与测试样本标记的结果,得到准确率:
常使用K折交叉验证来提高验证的准确度。K折交叉验证就是初始采样分割成K个子样本,一个单独的子样本被保留作为验证模型的数据,其他K-1个样本用来训练。交叉验证重复K次,每个子样本验证一次,平均K次的结果或者使用其他结合方式,最终得到一个单一估测。三折交叉验证原理如下。这个方法的优势在于同时重复运用随机产生的子样本进行训练和验证,每次的结果验证一次,十折交叉验证是最常用的。实现如下: