证明$R^2=[corr(y,\hat{y})]^2$

这篇内容详细证明了$R^2$等于相关系数平方的数学推导,通过展示$R^2 = [corr(y, hat{y})]^2$的等式成立,涉及协方差、方差和均值的概念。最后,通过一系列代数操作验证了等式的正确性。" 118464948,11209044,Java编程选择题解析及答案,"['Java基础', '编程知识', '字符串操作', '数据类型']

R2=[corr(y,y^)]2R^2=[corr(y,\hat{y})]^2R2=[corr(y,y^)]2
Proof:
R2=SSESST=∑i=1n(yi^−yˉ)2∑i=1n(yi−yˉ)2R^2=\dfrac{SSE}{SST}=\dfrac{\sum\limits_{i=1}^n(\hat{y_i}-\bar{y})^2}{\sum\limits_{i=1}^n(y_i-\bar{y})^2}R2=SSTSSE=i=1n(yiyˉ)2i=1n(yi^yˉ)2
[corr(y,y^)]2=[Cov(y,y^)Var(y)Var(y^)]2=(Cov(y,y^))2Var(y)Var(y^)[corr(y,\hat{y})]^2=[\dfrac{Cov(y,\hat{y})}{\sqrt{Var(y)Var(\hat{y})}}]^2=\dfrac{(Cov(y,\hat{y}))^2}{Var(y)Var(\hat{y})}[corr(y,y^)]2=[Var(y)Var(y^) Cov(y,y^)]2=Var(y)Var(y^)(Cov(y,y^))2
Cov(y,y^)=1n∑i=1n(yi−yˉ)(yi^−y^ˉ)Cov(y,\hat{y})=\dfrac{1}{n}\sum\limits_{i=1}^n(y_i-\bar{y})(\hat{y_i}-\bar{\hat{y}})Cov(y,y^)=n1i=1n(yiyˉ)(yi^y^ˉ)
Var(y)=1n∑i=1n(yi−yˉ)2Var(y)=\dfrac{1}{n}\sum\limits_{i=1}^n(y_i-\bar{y})^2Var(y)=

%% 0. 初始化环境 clear; % 清除工作区变量 clc; % 清空命令窗口 close all; % 关闭所有已打开的图形窗口 %% 1. 输入数据(确保数据是一一对应的列向量) % InSAR数据 (50个数据点) insar_data = [ 0, 4.032, -1.512, 2.394, 0.882, 1.512, -2.772, 0.126, 1.89, -1.512, ... -2.016, -3.276, -6.553, -6.553, -7.183, -8.317, -9.577, -9.829, -9.451, -9.073, ... -9.829, -10.333, -8.947, 7.183, -5.671, -7.057, -7.309, -7.057, -6.553, -7.057, ... -8.443, -6.175, -5.544, -6.805, -6.679, -5.797, -6.679, -8.065, -7.057, -9.577, ... -10.333, -11.845, -16.129, -22.556, -3.402, -3.528, -15.121, -10.711, -2.646, -6.175 ]'; % 使用 ' 转置为列向量 % 水准数据 (基准, 50个数据点) level_data = [ 0, -0.7936, -0.839, -1.3391, -1.9063, -2.1556, -1.8861, -3.1277, -4.4598, -4.5877, ... -5.1288, -6.2155, -6.8116, -6.8608, -6.759, -6.6287, -6.7041, -7.1898, -7.8614, -8.2184, ... -7.9948, -7.5098, -7.16, -7.0876, -7.3173, -7.4182, -7.5127, -7.6449, -7.8294, -8.0468, ... -8.2534, -8.4, -8.4796, -8.5277, -8.5817, -8.6646, -8.7423, -8.7852, -8.8098, -8.836, ... -8.868, -8.9049, -8.9446, -9.0116, -9.0566, -9.0997, -9.1586, -9.2271, -9.2888, -9.3383 ]'; % 使用 ' 转置为列向量 %% 2. 数据有效性验证 if length(insar_data) ~= length(level_data) error('InSAR数据与水准数据长度不一致,请检查数据输入!'); end num_points = length(insar_data); % 获取数据点数量 %% 3. 核心指标计算 (与您代码的核心逻辑完全一致) % 计算误差 (观测值 - 真实值) error = insar_data - level_data; % 3.1 RMSE (均方根误差, mm): 衡量预测值与真实值之间的整体误差大小,对大误差更敏感。 rmse = sqrt(mean(error.^2)); % 3.2 MAE (平均绝对误差, mm): 所有单个观测值与算术平均值的偏差的绝对值的平均。 mae = mean(abs(error)); % 3.3 R² (决定系数): 表示因变量的变化中可以由自变量解释的比例。 % 采用皮尔逊相关系数的平方来计算,直观反映两者线性相关强度。 corr_matrix = corrcoef(insar_data, level_data); pearson_r = corr_matrix(1, 2); r2 = pearson_r^2; % 3.4 MAPE (平均绝对百分比误差, %): 衡量预测准确性的统计指标。 % 注意:为避免除以零,计算时需排除水准值为0的数据点。 non_zero_idx = level_data ~= 0; if ~any(non_zero_idx) mape = NaN; % 如果所有基准值都为0,则MAPE无定义 else mape = mean(abs(error(non_zero_idx) ./ level_data(non_zero_idx))) * 100; end %% 4. 数据可视化 % --- 图1: 时序对比图 --- figure('Name', 'InSAR vs. 水准数据 时序对比', 'Position', [100, 100, 1000, 600]); plot(1:num_points, level_data, 'b-o', 'LineWidth', 2, 'MarkerFaceColor', 'b', 'DisplayName', '水准数据 (基准)'); hold on; plot(1:num_points, insar_data, 'r--s', 'LineWidth', 1.5, 'DisplayName', 'InSAR 数据'); grid on; box on; hold off; xlabel('数据点序号', 'FontSize', 12); ylabel('沉降量 (mm)', 'FontSize', 12); title('InSAR 与 水准数据对比分析', 'FontSize', 14, 'FontWeight', 'bold'); legend('show', 'Location', 'best', 'FontSize', 11); set(gca, 'FontSize', 11); % --- 图2: 散点相关图 --- figure('Name', 'InSAR vs. 水准数据 散点相关图', 'Position', [150, 150, 700, 600]); scatter(level_data, insar_data, 50, 'filled', 'MarkerFaceColor', [0.3010 0.7450 0.9330], 'MarkerEdgeColor', 'k'); hold on; % 绘制 y=x 完美拟合线 ax_limits = [min([xlim, ylim]), max([xlim, ylim])]; plot(ax_limits, ax_limits, 'r--', 'LineWidth', 2, 'DisplayName', '完美拟合线 (y=x)'); grid on; box on; hold off; xlabel('水准数据 (mm)', 'FontSize', 12); ylabel('InSAR 数据 (mm)', 'FontSize', 12); title_str = sprintf('数据相关性分析 (R^2 = %.4f)', r2); title(title_str, 'FontSize', 14, 'FontWeight', 'bold'); legend('show', 'Location', 'best', 'FontSize', 11); axis equal; % 使坐标轴比例相同,更直观地看出偏差 set(gca, 'FontSize', 11); %% 5. 结果输出与解读 fprintf('==================== InSAR数据精度评估结果 ====================\n'); fprintf('均方根误差 (RMSE) : %.4f mm\n', rmse); fprintf('平均绝对误差 (MAE) : %.4f mm\n', mae); fprintf('相关性系数 (R²) : %.4f\n', r2); fprintf('平均绝对百分比误差 (MAPE) : %.4f %%\n', mape); fprintf('================================================================\n\n'); disp('------------------------ 结果解读 ------------------------'); fprintf('1. RMSE 和 MAE: InSAR数据的测量值平均偏离水准基准值约 %.2f mm 到 %.2f mm。\n', min(mae, rmse), max(mae, rmse)); fprintf('2. R²: 值为 %.4f,表明InSAR数据与水准数据之间的线性相关性较弱。\n', r2); fprintf('3. MAPE: %.2f%% 的值相对较高,说明在沉降量较小(接近零)时,相对误差非常显著。\n', mape); disp('------------------------------------------------------------'); 这个代码中决定系数计算对吗
11-13
%% 神经网络验证完整代码 % 注意:运行前需确保工作路径下存在 trained_network.mat 和测试集数据 %% 步骤1:加载已训练网络及参数 load('trained_network.mat'); % 加载训练好的网络 %% 步骤2:加载测试数据集 % 假设测试集文件为test_table.mat,包含同名变量 load('test_table.mat'); X_test = test_table(:, 1:5); y_test = test_table(:, 6:7); %% 步骤3:测试集预处理 % 使用训练集的归一化参数(关键!) X_test_normalized = (X_test - X_min) ./ (X_max - X_min); % 对y_test应用相同变换 y_test_log = log(y_test + 1e-6); % 相同的小常数 y_test_normalized = (y_test_log - y_min) ./ (y_max - y_min); %% 步骤4:进行预测 % 输入需要转置为[特征数×样本数] predictions_test_normalized = net(X_test_normalized'); %% 步骤5:结果反变换 % 反归一化 predictions_test_log = predictions_test_normalized' .* (y_max - y_min) + y_min; % 指数反变换 predictions_test = exp(predictions_test_log) - 1e-6; %% 步骤6:计算评估指标 % 误差指标 mse_test = mean((y_test - predictions_test).^2, 1); % 按输出维度计算 mae_test = mean(abs(y_test - predictions_test), 1); rmse_test = sqrt(mse_test); % 相关性指标 SS_res = sum((y_test - predictions_test).^2, 1); SS_tot = sum((y_test - mean(y_test, 1)).^2, 1); R2_test = 1 - (SS_res ./ SS_tot); % Pearson相关系数 corr_coef1 = corr(y_test(:,1), predictions_test(:,1)); corr_coef2 = corr(y_test(:,2), predictions_test(:,2)); %% 步骤7:结果显示 fprintf('==== 输出变量1评估结果 ====\n'); fprintf('MSE: %.4f \t MAE: %.4f \t RMSE: %.4f\n', mse_test(1), mae_test(1), rmse_test(1)); fprintf('R²: %.4f \t Pearson: %.4f\n\n', R2_test(1), corr_coef1); fprintf('==== 输出变量2评估结果 ====\n'); fprintf('MSE: %.4f \t MAE: %.4f \t RMSE: %.4f\n', mse_test(2), mae_test(2), rmse_test(2)); fprintf('R²: %.4f \t Pearson: %.4f\n\n', R2_test(2), corr_coef2); %% 步骤8:可视化验证 % 预测-实际值对比图 figure('Name','预测效果可视化', 'Position', [100 100 1200 500]) subplot(1,2,1) plot(y_test(:,1), predictions_test(:,1), 'bo', 'MarkerFaceColor', [0.5 0.7 1]) hold on plot([min(y_test(:,1)) max(y_test(:,1))], [min(y_test(:,1)) max(y_test(:,1))], 'r--') title(['输出变量1对比 (R²=', num2str(R2_test(1),'%.3f'), ')']) xlabel('实际值'), ylabel('预测值') axis equal tight grid on subplot(1,2,2) plot(y_test(:,2), predictions_test(:,2), 'ro', 'MarkerFaceColor', [1 0.6 0.6]) hold on plot([min(y_test(:,2)) max(y_test(:,2))], [min(y_test(:,2)) max(y_test(:,2))], 'b--') title(['输出变量2对比 (R²=', num2str(R2_test(2),'%.3f'), ')']) xlabel('实际值'), ylabel('预测值') axis equal tight grid on % 误差分布直方图 figure('Name','误差分布', 'Position', [100 100 1000 400]) subplot(1,2,1) histogram(y_test(:,1) - predictions_test(:,1), 50,... 'FaceColor', [0.3 0.6 1], 'EdgeColor', 'none') title('输出变量1误差分布') xlabel('误差值'), ylabel('频次') subplot(1,2,2) histogram(y_test(:,2) - predictions_test(:,2), 50,... 'FaceColor', [1 0.4 0.4], 'EdgeColor', 'none') title('输出变量2误差分布') xlabel('误差值'), ylabel('频次') %% 步骤9:过拟合检查 try % 需要训练时记录训练集误差 disp('==== 过拟合检验 ====') fprintf('训练集MSE: [%.4f, %.4f]\n', mse_value(1), mse_value(2)) fprintf('测试集MSE: [%.4f, %.4f]\n', mse_test(1), mse_test(2)) catch warning('缺少训练集误差数据,请确保训练代码保存mse_value变量') end'table' 类型的操作数不支持运算符 '-'。 出错 test (第 16 行) X_test_normalized = (X_test - X_min) ./ (X_max - X_min);
03-13
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值