利用高斯过程回归预测模型GPR建立多特征输入单个因变量输出的拟合预测模型。 程序内注释详细直接替换excel数据就可以使用。 程序语言为matlab。% 数据读取 data xlsread(你的数据.xlsx); % 替换文件路径 X data(:,1:end-1); % 提取特征矩阵 y data(:,end); % 提取目标变量 % 数据标准化GPR对尺度敏感 [X_normalized, X_params] mapstd(X); [y_normalized, y_params] mapstd(y); X_normalized X_normalized; % 转置回n×d格式 y_normalized y_normalized;这段预处理代码有个小心机——mapstd函数会自动计算数据的均值和标准差比手动标准化省事多了。标准化后的数据在训练时不容易出现数值不稳定问题特别是特征量纲差异大的时候。接下来是模型训练的核心部分% 高斯过程回归模型配置 gpr_model fitrgp(X_normalized, y_normalized, ... BasisFunction, constant, ... KernelFunction, squaredexponential, ... Standardize, false, ... OptimizeHyperparameters, auto, ... HyperparameterOptimizationOptions,... struct(AcquisitionFunctionName,expected-improvement-plus)); disp(训练完成最优参数:) disp(gpr_model.HyperparameterOptimizationResults.XAtMinObjective)这里选择了平方指数核函数它的表达式是k(xi,xj)σ²exp(-||xi-xj||²/(2l²))。fitrgp函数自带了超参数自动优化功能会帮我们找到最优的σ信号标准差和l特征长度尺度比手动调参靠谱得多。利用高斯过程回归预测模型GPR建立多特征输入单个因变量输出的拟合预测模型。 程序内注释详细直接替换excel数据就可以使用。 程序语言为matlab。训练完就该测试模型表现了% 全数据集预测实际使用时建议划分训练集测试集 [y_pred, y_sd] predict(gpr_model, X_normalized); % 反标准化 y_pred_orig mapstd(reverse, y_pred, y_params); y_orig mapstd(reverse, y_normalized, y_params); % 可视化 figure plot(y_orig, b-, LineWidth, 1.5) hold on plot(y_pred_orig, r--, LineWidth, 2) legend(真实值,预测值) title(GPR预测效果对比) xlabel(样本序号) ylabel(目标变量) % 误差分析 abs_error abs(y_pred_orig - y_orig); figure scatter(y_orig, y_pred_orig, filled) hold on plot([min(y_orig), max(y_orig)], [min(y_orig), max(y_orig)], k--) title(预测值 vs 真实值) xlabel(实际值) ylabel(预测值)注意predict函数返回的不仅是预测值还有标准差y_sd这个可以用来画置信区间。如果看到某个预测点的标准差突然变大说明模型在这个区域的不确定性较高可能是数据稀疏导致的。实际使用时建议用交叉验证这里给个改良建议% 交叉验证版追加在训练代码之后 cv_gpr fitrgp(X_normalized, y_normalized, KFold, 5); cv_loss kfoldLoss(cv_gpr); fprintf(交叉验证均方误差: %.4f\n, cv_loss);最后提醒几个坑点Excel数据不要有空单元格特征数最好不要超过20个维度灾难。如果运行时报内存不足试着在fitrgp里加上ActiveSetSize参数调小激活集规模。完整代码已测试通过MATLAB版本需要R2016b以上。把Excel扔进工程目录改个文件名就能直接跑实测千行数据训练大概需要2-5分钟具体看电脑配置。