目录
- 1 介绍
- 1.1 变量投影重要性(VIP)分析
- 1.2. 灰色关联度(GRA)分析
- 1.3. 皮尔逊相关性分析
- 1.4 总结
- 2 GRA灰色关联度
- 3 皮尔逊(Person)相关性
- 4 变量投影重要性(Variable importance in projection,VIP)分析
- 5 机器学习
1 介绍
使用三种特征提取方式,变量投影重要性(VIP)分析、灰色关联度(GRA)分析和皮尔逊相关性分析的简要介绍。对多个光谱指标进行特征提取,然后使用机器学习模型进行训练和预测,包含matlab代码
1.1 变量投影重要性(VIP)分析
定义:
变量投影重要性(Variable Importance in Projection, VIP)分析是一种用于评估数据集中每个变量对目标变量解释的重要性的方法。VIP分析常用于主成分分析(PCA)或偏最小二乘回归(PLS)中。
主要特点:
- 计算方法:VIP值通过计算每个变量在主成分或因子分析中的投影贡献来得出。具体而言,VIP值是基于每个变量对解释方差的贡献进行加权计算的。
- 应用:VIP分析可用于特征选择,帮助识别对模型预测能力贡献最大的变量,从而去除冗余或不重要的特征,提升模型的可解释性和性能。
- 阈值:一般来说,VIP值大于1的变量被认为对模型有较大影响,值小于1的变量对模型的贡献较小。
1.2. 灰色关联度(GRA)分析
定义:
灰色关联度(Gray Relational Analysis, GRA)是一种基于灰色系统理论的方法,用于分析不同因素之间的关联程度。GRA能够处理小样本、少信息、不确定性的问题,广泛应用于工程、经济、管理等领域。
主要特点:
- 计算方法:GRA通过计算不同变量之间的关联度来评估其影响。具体步骤包括:标准化数据、计算灰色关联系数、计算综合关联度。
- 分辨系数:GRA引入分辨系数(通常取0.5),用于调整关联度的计算,以提高分析的准确性。
- 应用:GRA适用于多因素决策分析、系统优化等场景,能够有效识别影响目标变量的主要因素。
1.3. 皮尔逊相关性分析
定义:
皮尔逊相关性分析(Pearson Correlation Analysis)是一种用于评估两个变量之间线性关系的统计方法。其核心是计算皮尔逊相关系数(Pearson Correlation Coefficient),该系数的取值范围在-1到1之间。
主要特点:
- 解释:系数值接近1表示正相关,接近-1表示负相关,而接近0则表示无相关性。
- 应用:皮尔逊相关性分析广泛用于探究变量之间的关系、特征选择及数据探索等场景,但需注意其只能捕捉线性关系,对非线性关系的解释能力有限。
1.4 总结
- VIP分析:用于评估每个变量对目标变量的贡献,常用于特征选择和模型优化。
- GRA分析:用于评估多个因素之间的关联度,适合处理不确定性的问题。
- 皮尔逊相关性分析:用于评估两个变量之间的线性关系,广泛应用于数据分析。
这三种分析方法各有其特点和适用场景,结合使用可以更全面地理解数据及其关系。
2 GRA灰色关联度
(Gray relational analysis,GRA)
% 加载数据 (请确保 data.mat 中包含变量 x 和 y)
load('data.mat'); % x 为特征矩阵,y 为目标变量% 设定分辨系数 zeta
zeta = 0.5;% 计算灰色关联度
GCD = gray_relational_analysis(x, y, zeta);% 绘制柱状图展示每个特征的灰色关联度
figure;
bar(GCD);
xlabel('特征编号');
ylabel('灰色关联度系数');
title('每个特征的灰色关联度系数');
grid on;
c
% 设置阈值 (根据实际需求设置一个合理的阈值,比如0.6)
threshold = 0.6;% 筛选与目标变量灰色关联度高的特征
important_features = find(GCD > threshold);% 显示结果
disp('灰色关联度系数:');
disp(GCD);
disp('重要特征 (关联度 > 0.6):');
disp(important_features);% 如果需要,可以将筛选后的特征用于后续分析
x_selected = x(:, important_features);
3 皮尔逊(Person)相关性
clc;
clear;% 加载数据
load('data.mat'); % 假设 data.mat 中包含特征矩阵 x 和目标变量 y% 计算每个特征与目标变量 y 的皮尔森相关系数
corr_with_y = corr(x, y); % 计算每个特征与 y 的相关系数% 设置相关系数阈值,选择与 y 相关性绝对值大于阈值的特征
threshold = 0.1; % 可以根据需要调整这个阈值
selected_features = find(abs(corr_with_y) > threshold); % 选择重要特征的索引% 打印选择的特征
fprintf('选择了 %d 个与 y 相关性较高的特征:\n', length(selected_features));
disp(selected_features);% 从原始特征矩阵中提取选择的特征
x_selected = x(:, selected_features);% 计算这些选择的特征之间的皮尔森相关系数矩阵
corr_matrix = corr(x_selected);% 绘制选择的特征之间的相关系数矩阵热图
figure;
heatmap(corr_matrix, 'Colormap', parula, 'ColorbarVisible', 'on');
title('选择特征之间的皮尔森相关系数矩阵');
4 变量投影重要性(Variable importance in projection,VIP)分析
% 使用 VIP 进行特征筛选
load data.mat
% 使用 plsregress 进行 PLS 回归
ncomp = 11;
[XL,yl,XS,YS,beta,PCTVAR,MSE,stats] = plsregress(x,y,ncomp);
W0 = stats.W ./ sqrt(sum(stats.W.^2,1));
p = size(XL,1);
sumSq = sum(XS.^2,1).*sum(yl.^2,1);
vipScore = sqrt(p* sum(sumSq.*(W0.^2),2) ./ sum(sumSq,2));
indVIP = find(vipScore >= 1);
scatter(1:length(vipScore),vipScore,'x')
hold on
scatter(indVIP,vipScore(indVIP),'rx')
plot([1 length(vipScore)],[1 1],'--k')
hold off
axis tight
xlabel('Predictor Variables')
ylabel('VIP Scores')
5 机器学习
% 使用 SVR 进行训练
mdl = fitrsvm(x_train, y_train);% 在测试集上进行预测
y_pred = predict(mdl, x_test);% 计算评估指标
R2 = 1 - sum((y_test - y_pred).^2) / sum((y_test - mean(y_test)).^2);
RMSE = sqrt(mean((y_test - y_pred).^2));
RRMSE = RMSE / mean(y_test);% 输出指标
fprintf('R²: %.4f\n', R2);
fprintf('RMSE: %.4f\n', RMSE);
fprintf('RRMSE: %.4f\n', RRMSE);% 绘制真实值和预测值的对比图
figure;
plot(y_test, '-o');
hold on;
plot(y_pred, '-x');
legend('真实值', '预测值');
xlabel('样本编号');
ylabel('值');
title('真实值与预测值对比');
hold off;
% 如果使用,请联系 596520206