B题 洪水灾害的数据分析与预测
- 解题思路
- 问题一
- 问题二
- 问题三
- 问题四
- 论文
- 问题一
- 2.1 Kolmogorov-Smirnov分布检验模型的建立与求解
- 2.2 基于斯皮尔曼相关系数的相关性检验
- 代码
- 问题一
- Q1_1.m
- Q1_2.m
- Q1_3.m
(后续资料更新 关注公众号 云顶数模 领取相关资料)
解题思路
问题一
对于问题一,题目要求分析并可视化20个指标中哪些指标与洪水的发生有着密切的关联。对于这一问,可以先基于Kolmogorov-Smirnov分布检验分析各个指标及洪水发生概率的分布,然后根据分布选择皮尔逊相关性检验或斯皮尔曼相关性检验对指标与洪水的发生的概率进行相关性分析。对于分析结果,可以在排序后采用柱状图进行可视化,利用肘部法分别找出与洪水发生关系密切与不密切的指标。并进行文字建模提出对应的预防措施。
问题二
对于问题二,题目要求将附件 train.csv 中洪水发生的概率聚类成不同类别,并选取合适的指标,计算不同指标的权重,建立发生洪水不同风险的预警评价模型,并在最后进行灵敏度分析。对于这个问题,可以先基于K-means算法对事件进行聚类,然后通过Kruskal-Wallis H检验分析各个指标与洪水发生概率之间的相关显著性,找出最能影响洪水时间发生的指标。然后建立AHP-TOPSIS综合评价模型,在计算出各个指标的权重后得出每个事件的风险评价得分。最后改变AHP算法中的判断矩阵进行灵敏度分析。
问题三
对于问题三,题目要求建立洪水发生概率的预测模型,从20个指标中选取合适指标,预测洪水发生的概率。并在此基础上选取5个指标,改进原有模型进行预测。对于这一问,可以先基于问题一中得出的相关性排序对指标进行筛选,利用基础的浅层神经网络进行预测。然后基于RBP神经网络对特征的重要性进行反解,并将反解得到的特征输入CNN深度神经网络中进行预测,得到预测结果,并分别对两个模型的预测结果进行评价。
问题四
对于问题四,题目要求基于问题2中建立的洪水发生概率的预测模型预测附件test.csv中所有事件发生洪水的概率,并绘制发生洪水的概率的直方图和折线图,分析此结果的分布是否服从正态分布。对于这一问,可以先基于问题2中所建立的CNN深度神经网络对test.csv中事件的洪水发生概率进行预测。然后,对发生洪水的概率进行可视化,并基于Kolmogorov-Smirnov分布检验分析洪水发生概率的分布是否服从正态分布。
论文
问题一
2.1 Kolmogorov-Smirnov分布检验模型的建立与求解
2.2 基于斯皮尔曼相关系数的相关性检验
代码
问题一
Q1_1.m
clc;clear;close all;
load('train.mat')
data(:,1) = [];
% 初始化存储相关系数的向量
rho = zeros(1, 20);
% 计算斯皮尔曼相关系数
for i = 1:20
rho(i) = corr(data(:,i), data(:,21), 'Type', 'Spearman');
end
% 计算皮尔逊相关系数
rho2 = corr(data(:,1:20), data(:,21), 'Type', 'Pearson');
% 显示相关系数
disp(rho);
disp(rho2);
Q1_2.m
clc;clear;close all;
data = xlsread('斯皮尔曼相关性分析结果.xlsx');
factors = {'基础设施恶化','地形排水','季风强度','大坝质量','河流管理',...
'淤积','人口得分','气候变化','森林砍伐','滑坡','无效防灾','农业实践',...
'湿地损失','流域','政策因素','规划不足','城市化','侵蚀','排水系统','海岸脆弱性'};
correlation = data; % 你的相关性数据
% 绘制折线图
figure;
h = plot(correlation, '-o', 'LineWidth', 1.5, 'MarkerSize', 8, 'MarkerFaceColor', 'b', 'Color', 'r');
xticks(1:20);
xticklabels(factors);
xtickangle(45);
xlabel('指标', 'FontSize', 12, 'FontWeight', 'bold');
ylabel('与洪水发生概率的相关性', 'FontSize', 12, 'FontWeight', 'bold');
title('不同因素与洪水发生概率的相关性', 'FontSize', 14, 'FontWeight', 'bold');
grid on;
set(gca, 'TickDir', 'out');
set(gca, 'LineWidth', 1.5);
set(gca, 'FontName', '宋体');
set(gca, 'FontSize', 10);
box off;
Q1_3.m
clc;clear;close all;
data = xlsread('斯皮尔曼相关性分析结果.xlsx');
factors = {'基础设施恶化','地形排水','季风强度','大坝质量','河流管理',...
'淤积','人口得分','气候变化','森林砍伐','滑坡','无效防灾','农业实践',...
'湿地损失','流域','政策因素','规划不足','城市化','侵蚀','排水系统','海岸脆弱性'};
% 绘制箱线图
figure;
h = boxplot(data, 'Whisker', 1.5);
set(findobj(gca,'tag','Box'), 'Color', [1 0.8 0.8]); % 将箱子的底色改为淡粉色
set(findobj(gca,'type','line'),'Color','k','LineWidth',2); % 将箱线的颜色改为纯黑色并加粗
set(gca, 'XTickLabel', factors, 'XTickLabelRotation', 45, 'FontSize', 10);
xlabel('因素', 'FontSize', 12, 'FontWeight', 'bold');
ylabel('与洪水发生概率的相关性', 'FontSize', 12, 'FontWeight', 'bold');
title('不同因素与洪水发生概率的相关性分布', 'FontSize', 14, 'FontWeight', 'bold');
set(gcf, 'color', [1 1 1]); % 设置背景色为白色
% 标注数据点的位置和标签
hold on;
for i = 1:length(data)
x = 1; % x 坐标为因素的序号
y = data(i); % y 坐标为数据值
plot(x, y, 'ro', 'MarkerFaceColor', 'r'); % 以红色圆点形式标出数据点
text(x, y, num2str(factors{i}), 'HorizontalAlignment', 'right', 'VerticalAlignment', 'bottom');
end
set(gca,'xtick',[]);
hold off;
(后续资料更新 关注公众号 云顶数模 领取相关资料)