GNU Octave 语言 实战 模型评估与交叉验证

GNU Octave阿木 发布于 2025-06-22 6 次阅读


GNU Octave:模型评估与交叉验证实战

GNU Octave 是一款免费、开源的数值计算软件,它提供了丰富的数学函数和工具,非常适合进行数据分析、建模和仿真。在机器学习和数据科学领域,模型评估和交叉验证是至关重要的步骤,可以帮助我们了解模型的性能,并避免过拟合。本文将围绕这一主题,使用 GNU Octave 语言进行实战演练。

环境准备

在开始之前,请确保您的系统中已安装 GNU Octave。可以从官方网站(https://www.gnu.org/software/octave/)下载并安装。

数据准备

为了演示模型评估与交叉验证,我们将使用一个简单的数据集。这里我们使用著名的鸢尾花(Iris)数据集,它包含了150个样本,每个样本有4个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度)和1个类别标签(三种鸢尾花之一)。

octave

% 加载鸢尾花数据集


data = load('iris.csv');


X = data(:, 1:4); % 特征


y = data(:, 5); % 标签


模型选择

为了演示,我们将使用逻辑回归模型进行分类。逻辑回归是一种简单的线性模型,适用于二分类问题。

octave

% 创建逻辑回归模型


model = fitglm(X, y, 'Distribution', 'binomial');


模型评估

模型评估是了解模型性能的关键步骤。我们可以使用多种指标来评估模型,如准确率、召回率、F1 分数等。

octave

% 预测标签


y_pred = predict(model, X);

% 计算准确率


accuracy = sum(y_pred == y) / numel(y);


fprintf('Accuracy: %.2f%%', accuracy 100);

% 计算混淆矩阵


confMat = confusionmat(y, y_pred);


disp(confMat);

% 计算召回率、F1 分数


recall = sum(diag(confMat)) / sum(confMat);


f1Score = 2 recall (sum(diag(confMat))) / (sum(diag(confMat)) + sum(confMat) - sum(diag(confMat)));


fprintf('Recall: %.2f%%', recall 100);


fprintf('F1 Score: %.2f%%', f1Score 100);


交叉验证

交叉验证是一种评估模型性能的统计方法,它将数据集分成多个子集,然后在这些子集上训练和测试模型。常用的交叉验证方法有 k 折交叉验证。

octave

% 设置 k 折交叉验证


k = 5;


cv = cvpartition(size(X, 1), 'KFold', k);

% 初始化指标


accuracyCV = zeros(k, 1);


recallCV = zeros(k, 1);


f1ScoreCV = zeros(k, 1);

% 进行交叉验证


for i = 1:k


% 获取训练集和测试集


idxTrain = cv.training(i);


idxTest = cv.test(i);


XTrain = X(idxTrain, :);


yTrain = y(idxTrain);


XTest = X(idxTest, :);


yTest = y(idxTest);



% 训练模型


modelCV = fitglm(XTrain, yTrain, 'Distribution', 'binomial');



% 预测测试集标签


y_predCV = predict(modelCV, XTest);



% 计算指标


accuracyCV(i) = sum(y_predCV == yTest) / numel(yTest);


recallCV(i) = sum(diag(confusionmat(yTest, y_predCV))) / sum(confusionmat(yTest, y_predCV));


f1ScoreCV(i) = 2 recallCV(i) sum(diag(confusionmat(yTest, y_predCV))) / (2 recallCV(i) sum(diag(confusionmat(yTest, y_predCV))) + sum(confusionmat(yTest, y_predCV)) - sum(diag(confusionmat(yTest, y_predCV))));


end

% 计算平均指标


meanAccuracyCV = mean(accuracyCV);


meanRecallCV = mean(recallCV);


meanF1ScoreCV = mean(f1ScoreCV);

fprintf('Mean Accuracy (CV): %.2f%%', meanAccuracyCV 100);


fprintf('Mean Recall (CV): %.2f%%', meanRecallCV 100);


fprintf('Mean F1 Score (CV): %.2f%%', meanF1ScoreCV 100);


结论

本文介绍了如何使用 GNU Octave 语言进行模型评估与交叉验证。通过实际操作,我们了解了如何选择模型、评估模型性能以及进行交叉验证。这些技能对于机器学习和数据科学领域的研究和实践至关重要。

在实际应用中,您可能需要根据具体问题调整模型选择、参数设置和评估指标。GNU Octave 还提供了丰富的工具和函数,可以帮助您进行更深入的数据分析和模型构建。

希望本文能帮助您更好地理解模型评估与交叉验证,并在 GNU Octave 中进行相关实践。