一、计划进度
计划安排时间 | 计划完成内容 | 是否完成 |
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); 开始训练
参考文档:
对做出的结果画出图形:
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=[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);