% 导入数据集(特征矩阵X和标签向量y),并进行数据预处理
load(‘dataset.mat’); % 替换为实际的数据集文件
% 数据归一化(假设使用MinMax归一化)
minX = min(X);
maxX = max(X);
X_normalized = (X - minX) ./ (maxX - minX);
% 划分训练集和测试集
trainRatio = 0.7; % 训练集比例
[trainX, trainY, testX, testY] = splitDataset(X_normalized, y, trainRatio);
% 设置神经网络的参数
inputSize = size(trainX, 2); % 输入层大小
hiddenSize = 10; % 隐藏层大小
outputSize = numel(unique(y)); % 输出层大小
% 初始化神经网络权重和偏置
theta = initializeParameters(inputSize, hiddenSize, outputSize);
% 使用OOA-BP算法优化神经网络权重和偏置
maxIterations = 100; % 最大迭代次数
[thetaOptimized, costHistory] = ooa_bp(trainX, trainY, theta, maxIterations);
% 在训练集上进行预测
trainPredictions = predict(trainX, thetaOptimized);
% 在测试集上进行预测
testPredictions = predict(testX, thetaOptimized);
% 计算预测准确率
trainAccuracy = calculateAccuracy(trainPredictions, trainY);
testAccuracy = calculateAccuracy(testPredictions, testY);
% 打印准确率
fprintf(‘训练集准确率:%f\n’, trainAccuracy);
fprintf(‘测试集准确率:%f\n’, testAccuracy);
% 定义数据集划分函数
function [trainX, trainY, testX, testY] = splitDataset(X, y, trainRatio)
numSamples = size(X, 1);
numTrainSamples = round(numSamples * trainRatio);
trainIndices = randperm(numSamples, numTrainSamples);
testIndices = setdiff(1:numSamples, trainIndices);
trainX = X(trainIndices, 😃;
trainY = y(trainIndices);
testX = X(testIndices, 😃;
testY = y(testIndices);
end
% 定义权重和偏置初始化函数
function theta = initializeParameters(inputSize, hiddenSize, outputSize)
epsilon = sqrt(6) / sqrt(inputSize + hiddenSize + outputSize);
theta1 = rand(hiddenSize, inputSize) * 2 * epsilon - epsilon;
theta2 = rand(outputSize, hiddenSize) * 2 * epsilon - epsilon;
theta = [theta1(😃; theta2(😃];
end
% 定义预测函数
function predictions = predict(X, theta)
theta1 = reshape(theta(1:hiddenSize * (inputSize + 1)), hiddenSize, []);
theta2 = reshape(theta(hiddenSize * (inputSize + 1) + 1:end), outputSize, []);
m = size(X, 1);
X = [ones(m, 1) X];
a1 = sigmoid(X * theta1’);
a1 = [ones(m, 1) a1];
a2 = sigmoid(a1 * theta2’);
[~, predictions] = max(a2, [], 2);
end
% 定义激活函数
function g = sigmoid(z)
g = 1 ./ (1 + exp(-z));
end
% 定义准确率计算函数
function accuracy = calculateAccuracy(predictions, y)
numCorrect = sum(predictions == y);
accuracy = numCorrect / numel(y);
end