Matlab中多回归器留一法交叉验证脚本扩展及RSQ表格输出需求
多元回归留一法交叉验证(3个回归器)脚本修正与扩展
以下是适配3个回归器的MATLAB脚本,同时实现了预测结果与RSQ值的表格化输出:
clc clear all close all warning off % 读取数据集:假设前3列为回归器,第4列为因变量,可根据实际列顺序调整 data = readtable('Leave_One_Out.csv'); X = table2array(data(:, 1:3))'; % 3个回归器,转置后每行对应一个特征,每列对应一个样本 y = table2array(data(:, 4))'; n = length(y); predictions = zeros(1, n); % 预分配内存提升效率 for p = 1:n % 留一法划分训练/测试集 train_idx = setdiff(1:n, p); test_idx = p; X_train = X(:, train_idx); y_train = y(train_idx); X_test = X(:, test_idx); % 构建带截距项的设计矩阵,无需循环拼接 design_matrix = [X_train', ones(n-1, 1)]; % 求解多元回归系数 coeffs = design_matrix \ y_train'; % 预测测试样本 y_pred = [X_test', 1] * coeffs; predictions(p) = y_pred; end % 计算整体RSQ值 residuals = y - predictions; ss_res = sum(residuals.^2); ss_tot = sum((y - mean(y)).^2); rsq_overall = (1 - ss_res / ss_tot) * 100; % 生成包含详细结果的表格 results_table = table((1:n)', y', predictions', residuals', ... 'VariableNames', {'样本索引', '真实值y', '预测值', '残差'}); % 输出结果 disp('留一法交叉验证整体RSQ值(百分比):'); disp(rsq_overall); disp(' '); disp('详细预测结果表格:'); disp(results_table); % 可选:将表格写入CSV文件保存 writetable(results_table, 'LOOCV_Results.csv');
关键改动说明
- 多回归器适配:将单变量输入改为读取3列回归器数据,构建包含3个特征+截距项的设计矩阵,适配多元回归计算。
- 修正原脚本错误:原脚本中
Z为未定义变量,已替换为正确的特征变量X;同时移除低效的循环拼接设计矩阵逻辑,改用向量化操作。 - 内存预分配:提前创建
predictions数组替代动态拼接,大幅提升大样本量下的运行效率。 - 表格化输出:用
table函数生成包含样本索引、真实值、预测值、残差的结构化表格,同时计算并输出整体RSQ值,结果更直观。
自定义调整提示
如果你的数据集列顺序不同,只需修改data(:, 1:3)和data(:, 4)的索引即可。例如若因变量是第2列,三个回归器是第1、3、4列,可改为:
X = table2array(data(:, [1, 3, 4]))'; y = table2array(data(:, 2))';
内容的提问来源于stack exchange,提问作者kev
相关产品推荐
相关产品推荐

