BP神经网络用于分类

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

clear,clc

% 关闭图形窗口

close all

%% 读入数据

% 打开文件

fid = fopen('german.data', 'r');

% 按格式读取每一行

% 每行包括21项,包括字符串和数字

C = textscan(fid, '%s %d %s %s %d %s %s %d %s %s %d %s %d %s %s %d %s %d %s %s %d\n'); % 关闭文件

fclose(fid);

% 将字符串转换为整数

N = 20;

% 存放整数编码后的数值矩阵

C1=zeros(N+1,1000);

for i=1:N+1

% 类别属性

if iscell(C{i})

for j=1:1000

% eg: 'A12' -> 2

if i<10

d = textscan(C{i}{j}, '%c%c%d'); % eg: 'A103' -> 3

else

d = textscan(C{i}{j}, '%c%c%c%d'); end

C1(i,j) = d{end};

end

% 数值属性

else

C1(i,:) = C{i};

end

end

%% 划分训练样本与测试样本

% 输入向量

x = C1(1:N, :);

% 目标输出

y = C1(N+1, :);

% 正例

posx = x(:,y==1);

% 负例

negx = x(:,y==2);

% 训练样本

trainx = [ posx(:,1:350), negx(:,1:150)]; trainy = [ones(1,350), ones(1,150)*2];

% 测试样本

testx = [ posx(:,351:700), negx(:,151:300)]; testy = trainy;

%% 样本归一化

% 训练样本归一化

[trainx, s1] = mapminmax(trainx);

% 测试样本归一化

testx = mapminmax('apply', testx, s1);

%% 创建网络,训练

% 创建BP网络

net = newff(trainx, trainy);

% 设置最大训练次数

net.trainParam.epochs = 1500;

% 目标误差

net.trainParam.goal = 1e-13;

% 显示级别

net.trainParam.show = 1;

% 训练

net = train(net,trainx, trainy);

%% 测试

y0 = net(testx);

% y0为浮点数输出。将y0量化为1或2。

y00 = y0;

% 以1.5为临界点,小于1.5为1,大于1.5为2

y00(y00<1.5)=1;

y00(y00>1.5)=2;

% 显示正确率

fprintf('正确率: \n');

disp(sum(y00==testy)/length(y00));

(学习的目的是增长知识,提高能力,相信一分耕耘一分收获,努力就一定可以获得应有的回报)

相关文档
最新文档