首页 > 代码库 > 第五次毕业设计

第五次毕业设计

一、计划进度

计划安排时间 计划完成内容 是否完成
2017.4.2-4.10 完成数据集参数的整理挑选。完成matlab下的神经网络程序编写 完成
2017.4.11-4.17 研究怎么不使用工具箱,自己实现神经网络的核心算法  
2017.4.18-4.25 基本能够完成核心算法的内容  
2017.4.26-5.1 实现基本的数据训练  

 二、本周完成情况:

下面是matlab的程序和实验截图

代码难点分析:

 

[~, ~, raw] = xlsread(‘finaltrain.xlsx‘,‘sheet0‘);

[m,n]=size(raw);

for i=1:m

    for j=1:n

        data(i,j)=str2num(cell2mat(raw(i,j)));

    end

end

[~, ~, raw] = xlsread(‘finallabe.xlsx‘,‘sheet0‘);

[m,n]=size(raw);

for i=1:m

    for j=1:n

        test(i,j)=str2num(cell2mat(raw(i,j)));

    end

end

 

数据的导入:

[~, ~, raw] = xlsread(‘finaltrain.xlsx‘,‘sheet0‘);

将训练数据集导入支持Excel文件的读取,放在raw矩阵也可以像下面这么写

[num,txt,rawdata] = xlsread(‘textdata.xls‘) %是xlsread的一般用法,数据保存在num矩阵里, 标题行文本保存在txt里,rawdata是一个cellarray, 包含了num矩阵和txt的内容

 

cell2mat是matlab 特有的元胞数组,类似于python 的元组,提取出一行然后将string类型转化成数字型

test(i,j)=str2num(cell2mat(raw(i,j)));

 

将生成的 .mat 文件保存,双击打开就是一个数据表。但是下次进行训练的时候就不需要继续读取文件

 

 

x=mapminmax(f‘,0,1);

 

归一化处理:http://jingyan.baidu.com/article/48b37f8d649ce31a646488e9.html

MATLAB 帮助文档中告诉我们,这种对应关系是

y = (ymax-ymin)*(x-xmin)/(xmax-xmin) + ymin

 

因为matlab不支持对于行的选取

所以对数据进行转置

x=x‘;  只需要在参数后面加个 ’

 

output=full(ind2vec(lab_tr‘));

ind2vec 函数:https://zhidao.baidu.com/question/144156953.html 是为了将数值转化为列向量,为了后面的sim 函数仿真使用

 

full 函数: http://baike.baidu.com/item/FULL/7145619

能够将压缩的稀疏矩阵恢复成完整矩阵

 

newff 函数:设置神经网络模型的参数

net=newff(fea_tr‘,output,10);

net.trainParam.epochs=1000;

net.trainParam.lr=0.1;

net.trainParam.goal=0.00001;

net=train(net,fea_tr‘,output);  开始训练

参考文档:

http://baike.baidu.com/link?url=2nZi0O6eiUDCNAPlQu1PNiuboiCJpNZ1M7j80uCP9rgHPsymJt_PHE9Xnt__IW5Cpjc365rq2Lr45e75weEi8sznqRx_qjigmb0BIjNjTY_

对做出的结果画出图形:

figure 函数:http://jingyan.baidu.com/article/870c6fc333c78bb03ee4be4d.html

 

matlab代码全篇参考:http://blog.csdn.net/ldd530314297/article/details/41824507

          http://blog.csdn.net/sinat_23137713/article/details/51136127

 

 

matlab处理所有代码

修改代码 增加数据

 

clear

clc

[~, ~, raw] = xlsread(‘45.xlsx‘,‘sheet0‘);

 [m,n]=size(raw);

 for i=1:m

     for j=1:n

         add(i,j)=str2num(cell2mat(raw(i,j)));

     end

 end

load(‘train.mat‘);

load(‘add.mat‘)

load(‘test.mat‘);%载入数据

data=http://www.mamicode.com/[data;add];

[m,~]=size(data);

[n,~]=size(test);

f=[data(:,1:end-1);test(:,1:end-1)];%将训练集和预测集一起归一化

x=mapminmax(f‘,0,1);%g归一化

x=x‘;

fea_tr=x(1:m,:);%提取训练特征

lab_tr=data(:,end)+1;%训练标签(这里标签+1是因为原始标签中有0,现在全部+1)

fea_ts=x(m+1:end,:);%测试特征

lab_ts=test(:,end)+1;%测试标签

output=full(ind2vec(lab_tr‘));%这里先将标签向量变成矩阵,预测的时候输出最大的那个值的位置即为类别

net=newff(fea_tr‘,output,[30]);%建立神经网络

net.trainParam.epochs=1000;

net.trainParam.lr=0.1;

net.trainParam.goal=0.00001;

net=train(net,fea_tr‘,output);%调用TRAINGDM算法

y=sim(net,fea_ts‘);

predict=vec2ind(y)‘;%得到训练结果

p=sum(predict==lab_ts)/length(predict);%得到匹配准确率

for i=1:7

s(i)=sum(lab_ts==i);%计算每一类个数

p_l(i)=(1-sum(predict(lab_ts==i)==i)/s(i))*100;%计算漏报率

p_w(i)=(1-sum(lab_ts(predict==i)==i)/sum(predict==i))*100;%计算误报率

if sum(predict==i)==0

    p_w(i)=0;

end

end

figure,bar(s);

for i = 1:7

text(i-0.3,s(i)+1800,num2str(s(i)));

end

set(gca,‘xticklabel‘,{‘normal‘,‘dos‘,‘neptune‘,‘smurf‘,‘u2r‘,‘r2l‘,‘probe‘});

title(‘样本个数‘);

figure,bar(p_l);

ylim([0,100]);

for i = 1:7

text(i-0.4,p_l(i)+0.02,num2str(p_l(i)),‘fontsize‘,8);

end

set(gca,‘xticklabel‘,{‘normal‘,‘dos‘,‘neptune‘,‘smurf‘,‘u2r‘,‘r2l‘,‘probe‘});

title(‘漏报率 %‘);

figure,bar(p_w);

ylim([0,100]);

for i = 1:7

text(i-0.4,p_w(i)+0.02,num2str(p_w(i)),‘fontsize‘,8);

end

set(gca,‘xticklabel‘,{‘normal‘,‘dos‘,‘neptune‘,‘smurf‘,‘u2r‘,‘r2l‘,‘probe‘});

title(‘误报率 %‘);

 

 

 

第一份:

 

clear

clc

[~, ~, raw] = xlsread(‘finaltrain.xlsx‘,‘sheet0‘);

[m,n]=size(raw);

for i=1:m

    for j=1:n

        data(i,j)=str2num(cell2mat(raw(i,j)));

    end

end

[~, ~, raw] = xlsread(‘finallabe.xlsx‘,‘sheet0‘);

[m,n]=size(raw);

for i=1:m

    for j=1:n

        test(i,j)=str2num(cell2mat(raw(i,j)));

    end

end

% load(‘train.mat‘);

% load(‘test.mat‘);

[m,~]=size(data);

[n,~]=size(test);

f=[data(:,1:end-1);test(:,1:end-1)];

x=mapminmax(f‘,0,1);

x=x‘;

fea_tr=x(1:m,:);

lab_tr=data(:,end)+1;

fea_ts=x(m+1:end,:);

lab_ts=test(:,end)+1;

output=full(ind2vec(lab_tr‘));

net=newff(fea_tr‘,output,10);

net.trainParam.epochs=1000;

net.trainParam.lr=0.1;

net.trainParam.goal=0.00001;

net=train(net,fea_tr‘,output);

y=sim(net,fea_ts‘);

predict=vec2ind(y)‘;

p=sum(predict==lab_ts)/length(predict);

 技术分享

 技术分享

技术分享

 

第五次毕业设计