```matlab
% 主程序代码
close all;
warning off;
% 数据读取
data = Wine;
data = data(randperm(size(data,1)),:); % 打乱原始样本
input = data(:,1:end-1);
output1 = data(:,end);
% 将输出从1维变成3维
for i=1:size(data,1)
switch output1(i)
case 1
output(i,:)=[1 0 0];
case 2
output(i,:)=[0 1 0];
case 3
output(i,:)=[0 0 1];
end
end
% 选取训练数据和测试数据
m = fix(size(data,1)*0.7);
input_train = input(1:m,:)';
output_train = output(1:m,:)';
input_test = input(m+1:end,:)';
output_test = output(m+1:end,:)';
% 数据归一化
[inputn,inputps]=mapminmax(input_train,0,1);
% 创建BP神经网络
net = newp([-40 1;-1 50],1); % 输入向量的范围和神经元数量
% 设置训练参数
net.adaptparam.passes=3;
% 训练网络
for a=1:25
[net,Y,E]=adapt(net,input_train,output_train);
drawnow;
end
% 测试网络
Y_test = net(input_test);
% 计算误差
error = output_test - Y_test;
% 显示结果
disp('测试集上的误差:');
disp(mean(abs(error)));
```
这段代码首先关闭了所有打开的图形窗口和警告信息,然后加载了Wine数据集,并对数据进行了随机排序。接着,它将输出变量从1维扩展到了3维,以便与三个输出节点相匹配。然后,代码划分了训练集和测试集,并对输入和输出数据进行了归一化处理。
创建BP神经网络时,指定了输入层和隐含层的节点数,以及隐含层的激活函数为Sigmoid函数。网络使用`adapt`函数进行训练,该函数会根据训练数据自动调整权重。最后,代码测试了网络在测试集上的性能,并计算了平均绝对误差作为性能指标。
请注意,这个代码示例是一个简化的版本,实际应用中可能需要更复杂的网络结构、更多的训练迭代次数、不同的激活函数和正则化技术来提高网络性能。此外,对于大型数据集或复杂的模型,可能需要使用其他更高效的训练方法,如随机梯度下降(SGD)或批量梯度下降(BGD)。