本文共 2000 字,大约阅读时间需要 6 分钟。
Iris数据集是机器学习领域的经典数据集,包含150个样本,用于花的分类任务。每个样本由4个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度)和一个类别标签(1-Setosa、2-Versicolour、3-Virginica)组成。数据集以5列的形式存储,前4列为特征值,第5列为类别标签。
在监督学习任务中,需要将数据集划分为训练集和测试集。通常,iris数据集将近一半的数据(如前50个样本)作为训练集,剩余数据作为测试集。为了保证模型的泛化能力,训练集和测试集的划分应尽量遵循类别分布。需要注意的是,在实际应用中,数据预处理步骤可能会因任务需求而有所不同。
特征归一化
对输入特征值进行归一化处理,使用minmax函数获取输入信号的最大值和最小值,确保神经网络收敛。 神经网络创建
使用newff函数创建一个两层的神经网络,网络结构为: logsigpurelinpurelin 选择traingdx作为训练函数,支持自适应学习率。训练参数设置
网络训练
使用train函数对网络进行训练,训练目标是输出与实际标签一致。 测试数据归一化
对测试集的特征值进行归一化处理,与训练集保持一致。网络仿真
使用sim函数对训练后的网络进行仿真,获取对测试集的分类结果。 准确率计算
通过比较预测结果与真实标签,计算分类准确率。逻辑如下:hitNum为0。% 读取训练数据clear clc% 创建神经网络net = newff(minmax(input), [10 3], {'logsig' 'purelin'}, 'traingdx'); minmax(input):获取输入信号的最大值和最小值。[10 3]:网络层数和节点数,前一层为10个神经元,输出层为3个神经元。{ 'logsig' 'purelin' }:激活函数配置,第一层为logsig,第二层为purelin。'traingdx':使用自适应学习率的梯度下降训练函数。% 设置训练参数net.trainparam.show = 50;net.trainparam.epochs = 500;net.trainparam.goal = 0.01;net.trainParam.lr = 0.01;% 开始训练[net, input, output] = train(net, input, output');
net.trainparam.show:设置训练显示周期。net.trainparam.epochs:设置最大迭代次数。net.trainparam.goal:设置训练目标误差。net.trainParam.lr:设置学习速率。% 读取测试数据[t1 t2 t3 t4 c] = textread('testData.txt', '%f%f%f%f%f', 150);% 测试数据归一化testInput = minmax([t1 t2 t3 t4]');% 仿真测试Y = sim(net, testInput);% 统计准确率[s1, s2] = size(Y);hitNum = 0;for i = 1:s2 [m, Index] = max(Y(:, i)); if Index == c(i) hitNum = hitNum + 1; endendprintf('识别率是 %3.3f%%', 100 * hitNum / s2); testInput = minmax([t1 t2 t3 t4']):对测试数据进行归一化处理。Y = sim(net, testInput):对训练好的网络进行仿真,获取预测结果。hitNum:统计正确分类的数量。通过以上方法,我们可以使用ANN算法对鸢尾花数据集进行分类。MATLAB的神经网络工具箱提供了便捷的接口,使得构建和训练分类模型变得简单。无论是训练集还是测试集,都需要经过数据预处理,确保模型的泛化能力。通过调整网络结构和训练参数,可以进一步提升分类准确率。这种方法不仅适用于鸢尾花分类,还可以广泛应用于其他分类任务。
转载地址:http://iebc.baihongyu.com/