首页 > 代码库 > 第四次任务计划书
第四次任务计划书
计划安排时间 | 计划完成内容 | 是否完成 |
2017.3.25---2017.4.1 | 完成数据预处理,以及尝试使用伪代码描述算法 | |
2017.4.2---2017.4.8 | 尝试进行代码实现,并进行小规模数据集作为输入,进行测试 | |
2017.4.9---2017.4.15 | 完善具体代码,并着手进行毕业论文撰写 | |
2017.4.16---2017.4.22 | 进行Python更加深入学习,利用一些扩展包,尝试对数据结果进行展示 | |
2017.4.23---2017.4.29 | 撰写毕业论文,并且与老师共同修改 | |
2017.4.30---2017.5.6 | 继续完善毕业设计,与老师沟通 | |
2017.5.7---2017.5.12 | 毕业论文定稿,准备毕业答辩 |
二、本周研究内容。
1、 数据预处理:
步骤一:将离散值转化为连续值:对于非连续的属性,如:protocol_type(3种类型),service(70种类型),flag (11种类型),以及最后的label属性(23种类型)分为进行编号,将离散型转换化成连续型。
步骤二:属性取值情况较少的属性删除
(1)land属性及land攻击的删除:所有的land属性取值为1的22条连接记录中有21条均属于land攻击,且land攻击和normal 之间,除land 属性之外的其他属性之间并无明显区别,因此可以忽略。(2)urgent 属性的删除:该属性值几乎全部为 0,只有 4 条记录取值不为 0。只要将这四条记录加以标记,便可以删除该属性。(3)su_attempted和 num_shells
属性的删除:属性值几乎全部为0,只有个别连接记录的值为1或2,将特殊值记录加以标识便可以删除该属性。
步骤三:数据分块
根据service(网络服务类型)数据分块可以看出,有42种服务类型基本上攻击类型为neptune,其他的攻击类型较样本来说影响较小。还有7种服务类型基本上也对应着是normal则同理其他的攻击类型可以忽略。这样一来,数据集就从66减少到17个。在剩下的服务类型中,cr_i网络服务类型占了一大半的数据量,但是通过数据集分块,该数据集中只有6 个决策类型,同时通过属性的二次删除,其特征属性的个数也只剩下13 个。而对于决策类型较多的三个数据集块 ftp、ftp_data 和 telnet 来说,其特征属性个数也相对较多,但是其连接记录条目一般并不多,最多也只有四千多条而已。
2、参考的部分朴素贝叶斯的代码:
from numpy import *
class NaiveBayesClassifier(object):
def __init__(self):
self.dataMat = list()
self.labelMat = list()
self.pLabel1 = 0
self.p0Vec = list()
self.p1Vec = list()
def loadDataSet(self,filename):
fr = open(filename)
for line in fr.readlines():
lineArr = line.strip().split()
dataLine = list()
for i in lineArr:
dataLine.append(float(i))
label = dataLine.pop() # pop the last column referring to label
self.dataMat.append(dataLine)
self.labelMat.append(int(label))
def train(self):
dataNum = len(self.dataMat)
featureNum = len(self.dataMat[0])
self.pLabel1 = sum(self.labelMat)/float(dataNum)
p0Num = zeros(featureNum)
p1Num = zeros(featureNum)
p0Denom = 1.0
p1Denom = 1.0
for i in range(dataNum):
if self.labelMat[i] == 1:
p1Num += self.dataMat[i]
p1Denom += sum(self.dataMat[i])
else:
p0Num += self.dataMat[i]
p0Denom += sum(self.dataMat[i])
self.p0Vec = p0Num/p0Denom
self.p1Vec = p1Num/p1Denom
def classify(self, data):
p1 = reduce(lambda x, y: x * y, data * self.p1Vec) * self.pLabel1
p0 = reduce(lambda x, y: x * y, data * self.p0Vec) * (1.0 - self.pLabel1)
if p1 > p0:
return 1
else:
return 0
def test(self):
self.loadDataSet(‘testNB.txt‘)
self.train()
print(self.classify([1, 2]))
if __name__ == ‘__main__‘:
NB = NaiveBayesClassifier()
NB.test()
三、你本周的体会及需要改进地方。
数据预处理方面还是存在着一些问题。算法暂时还没有和数据入口对接,算法的一些细节部分仍然需要完善,整体设计思路还是要重新整理,多参考一些硕士论文,Python部分也要多去学习,还有很多东西需要补充。
五、你本周参考的文献。
1、KDDCUP99数据集的数据分析研究_吴建胜
2、http://www.cnblogs.com/Finley/p/5334987.html
第四次任务计划书