当前位置: 首页 > news >正文

光谱指标-预测含水量-多种特征提取方式

目录

  • 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

在这里插入图片描述


http://www.mrgr.cn/news/58285.html

相关文章:

  • vue3使用webSocket
  • 【vue】Mammoth.js的使用:将.docx和doc 文件转换成HTML
  • 利用 Google AI 工具提升应用智能化:ML Kit、TensorFlowLite、Cloud Vision、AutoML、Gemini
  • 探索PDFMiner:Python中的PDF解析利器
  • Linux的目录结构 常用基础命令(2)
  • 如何使用 pnpm 进行打补丁patch操作?推荐两个方法
  • 【数据结构和算法】一、算法复杂度:时间复杂度和空间复杂度)
  • Electron 是一个用于构建跨平台桌面应用程序的开源框架
  • Docker:容器化的革命
  • 【EndNote使用教程】创建文献库、导入文献、文献分类
  • DAY62WEB 攻防-PHP 反序列化CLI 框架类PHPGGC 生成器TPYiiLaravel 等利用
  • 设备管理智能化:中小企业的Spring Boot系统
  • 介绍一款Java开发的企业接口管理系统和开放平台
  • 27.8 把target做一致性哈希进行分发
  • 双十一电容笔选哪个好?!西圣、益博思、吉玛仕电容笔实测对比!
  • 区块链行业低迷的原因及未来发展展望
  • 【贪心算法】(第十四篇)
  • 落实安全左移迫在眉睫 | 伊朗APT34组织针对阿联酋及海湾关键基础设施发动攻击
  • uniapp:sqlite最详细教程,小白可直接粘贴复制
  • Linux 学习笔记(十七)—— 文件系统
  • MultipartFile文件与传递body并存问题
  • RK3568 android11 usb接口TP与电磁笔触点上报优先级问题
  • 【运维心得】U盘启动安装Dell服务器踩坑指南
  • 【JavaScript】JavaScript 进阶-2-构造函数数据常用函数(更新中)
  • Python:背景知识及环境安装
  • Linux内核常见的网络丢包场景分析,零基础入门到精通,收藏这一篇就够了