文章目录

  • 前言
  • 一、原理
  • 二、预处理
    • 2.1 变量筛选
    • 2.2 制作训练集和测试集
  • 三、实现过程
    • 3.1 回归拟合(建模)
    • 3.2 测试
    • 3.3 预测
  • 总结

前言

使用matlab对tif格式的遥感影像进行多元线性回归,建立用NDVI、EVI、VV、VH等数据反演地上森林生物量(AGB)的方程。

一、原理


Y=a0+a1∗X1+a2∗X2+⋅⋅⋅+an∗XnY=a_0+a_1*X_1+a_2*X_2+···+a_n*X_nY=a0​+a1​∗X1​+a2​∗X2​+⋅⋅⋅+an​∗Xn​

其中YYY是AGB,自变量XiX_iXi​分别为Red、NDVI、VV等值。现需要通过已知的同名点(Xi,Y)(X_i,Y)(Xi​,Y)建立方程求解各自变量系数aia_iai​,然后将Red、NDVI、VV等影像带入公式中,求解出Y的值(即待反演的AGB影像)。

二、预处理

2.1 变量筛选

共有blue、green、red、NIR、SWIR1、SWIR2、SR、NDVI、EVI、SAVI、MSAVI、contrast、correlation、Dissimilarity、 Entropy、Homogeneity、mean、Second Moment、variance、VV、VH、VV/VH22个自变量和AGB用来回归,首先进行变量的筛选

%A=xlsread('D:\shixi\model\data.xlsx');
%Y=A(:,1);
%for i=1:23%   X(i)=A(:,i);
%end
%X1=A(:,2);%data3=xlsread('D:\shixi\model\data.xlsx');%figure
% 求维度之间的相关系数
%rho = corr(data3, 'type','pearson');
% 绘制热图
%string_name={'AGB','blue','green','red','NIR','SWIR1','SWIR2','SR','NDVI','EVI','SAVI','MSAVI','contrast','correlation','Dissimilarity','Entropy','Homogeneity','mean','Second Moment','variance','VV','VH','VV/VH'};
%xvalues = string_name;
%yvalues = string_name;
%h = heatmap(xvalues,yvalues, rho, 'FontSize',10,'FontName','宋体');
%h.Title = '皮尔逊相关性';
%colormap summer

结果:从图中可以看出来变量的相关性有大有小,为方便,我们简单筛选出绝对值>0.5的变量用于后续的建模。

2.2 制作训练集和测试集

现在需要把用于回归建模的同名点(Xi,Y)(X_i,Y)(Xi​,Y)按照2:1分成训练集和测试集。
注:此处用的python,测试集:X_test y_test,训练集: x_train y_train

from sklearn.model_selection import train_test_split
import pandas as pd
import pandas as pd
import numpy as np
from sklearn.model_selection import GridSearchCV
import matplotlib.pyplot as plt
from sklearn.metrics import r2_score
from sklearn import neighborsfeature=pd.read_excel("D:\\shixi\\model\\feature.xlsx",header=0)
target=pd.read_excel("D:\\shixi\\model\\target.xlsx",header=0)
# #target = target.values.ravel()# #############################################################################
#  数据分割,随机化分割,测试集33%
x_train, x_test, y_train, y_test = train_test_split(feature, target, random_state=46, test_size=0.33)
print(x_test.shape)  # 输出测试集的大小# #存储数据
writer = pd.ExcelWriter("D:\\shixi\\model\\data_SAR+GUANG.xlsx")      # 写入Excel文件
y_train= pd.DataFrame(y_train)
y_test=pd.DataFrame(y_test)
x_train= pd.DataFrame(x_train)
x_test=pd.DataFrame(x_test)#y_forecast.to_excel(writer,sheet_name='forecast',na_rep='nana',index=False)        # ‘page_1’是写入excel的sheet名
y_test.to_excel(writer,sheet_name='y_test',na_rep='nana',index=False)
x_test.to_excel(writer,sheet_name='x_test',na_rep='nana',index=False)
x_train.to_excel(writer,sheet_name='x_train',na_rep='nana',index=False)
y_train.to_excel(writer,sheet_name='y_train',na_rep='nana',index=False)
writer.save()

三、实现过程

3.1 回归拟合(建模)

代码如下(示例):

data=xlsread('D:\shixi\model\x_train.xlsx');
Y=xlsread('D:\shixi\model\y_train.xlsx');X1=data(:,1);
X2=data(:,2);
X3=data(:,3);
X4=data(:,4);
X5=data(:,5);
X6=data(:,6);
X7=data(:,7);
X8=data(:,8);
X9=data(:,9);
X10=data(:,10);X_part = [ones(size(X1)) X1 X2  X3 X4 X5 X6 X7 X8 X9 X10];
[b_part,bint_part,r_part,rint_part,stats_part] = regress(Y,X_part);

b_part中存放的即为自变量的系数aia_iai​,至此我们得到了建立的模型
Ypre=73.2581830366806−5217.90689393932∗X1−2392.40872194445∗X2+4763.08909146459∗X3−65.0148457996989∗X4+7.58869625169745∗X5−55.9981404371055∗X6+1625.08894546664∗X7−1283.26083235081∗X8+12.4042711909978∗X9+108.253740289186∗X10;Y_{pre}=73.2581830366806-5217.90689393932*X1-2392.40872194445*X2 +4763.08909146459*X3-65.0148457996989*X4 +7.58869625169745*X5 -55.9981404371055*X6 +1625.08894546664*X7-1283.26083235081* X8 +12.4042711909978*X9 +108.253740289186*X10;Ypre​=73.2581830366806−5217.90689393932∗X1−2392.40872194445∗X2+4763.08909146459∗X3−65.0148457996989∗X4+7.58869625169745∗X5−55.9981404371055∗X6+1625.08894546664∗X7−1283.26083235081∗X8+12.4042711909978∗X9+108.253740289186∗X10;

3.2 测试

data2=xlsread('D:\shixi\model\x_test.xlsx');
Y_test=xlsread('D:\shixi\model\y_test.xlsx');
T1=data2(:,1);
T2=data2(:,2);
T3=data2(:,3);
T4=data2(:,4);
T5=data2(:,5);
T6=data2(:,6);
T7=data2(:,7);
T8=data2(:,8);
T9=data2(:,9);
T10=data2(:,10);Y_pre=73.2581830366806-5217.90689393932*T1-2392.40872194445*T2 +4763.08909146459*T3-65.0148457996989*T4 +7.58869625169745*T5 -55.9981404371055*T6 +1625.08894546664*T7-1283.26083235081* T8 +12.4042711909978*T9 +108.253740289186*T10;
Y_pre_part = [ones(size(Y_pre)) Y_pre];
[b_pre_part,bint_pre_part,r_pre_part,rint_pre_part,stats_pre_part] = regress(Y_test,Y_pre_part);

精度如下:

3.3 预测

读取NDVI等影像,用于预测AGB。
代码如下(示例):

[a,R]=geotiffread('D:\shixi\AGB\8.tif');%先导入某个图像的投影信息,为后续图像输出做准确
info=geotiffinfo('D:\shixi\AGB\8.tif')
k=1;
for num=1:8file=['D:\shixi\AGB\',int2str(num),'.tif'];bz=importdata(file);[c,o]=size(bz);bz=reshape(bz,c*o,1);data(:,k)=bz;k=k+1;
end
T1=data(:,1);
T2=data(:,2);
T3=data(:,3);
T4=data(:,4);
T5=data(:,5);
T6=data(:,6);
T7=data(:,7);
T8=data(:,8);
T9=data(:,9);
T10=data(:,10);
Y_pre=73.2581830366806-5217.90689393932*T1-2392.40872194445*T2 +4763.08909146459*T3-65.0148457996989*T4 +7.58869625169745*T5 -55.9981404371055*T6 +1625.08894546664*T7-1283.26083235081* T8 +12.4042711909978*T9 +108.253740289186*T10;AGB= reshape(data, c,o);
name2='D:\shixi\AGB\predict.tif';
geotiffwrite(name2,AGB,R,'GeoKeyDirectoryTag',info.GeoTIFFTags.GeoKeyDirectoryTag);

结果:


总结

总的过程大致可以分为:数据预处理、建模(多元线性)、测试、预测这四个步骤。如需后续建不同的模型,只需把建模的过程换成其他的模型(如RF\KNN\SVR等机器学习或深度学习)即可。
注:①、个人认为现阶段遥感参数反演大部分进入了半经验半理论模型时期(至少我从课堂和参加一些会议时看到的情况是这样的),也就是说从理论层面提取出来我们所需要的自变量,然后用经验公式来建模这个方法几乎用在了参数反演的方方面面。所以我们学会这一个最简单的方法后举一反三再去做其他模型大同小异。
②、至于影响精度的因素就是各方面的了,“数据质量决定了模型精度的极限,而你选用的模型和参数只能无限逼近这个极限”。前期数据的选取和数据的预处理还是极其重要的,毕竟巧妇难为无米之炊。

Matlab 多元线性回归相关推荐

  1. MATLAB 多元线性回归(regress)

    MATLAB 多元线性回归(regress) 语法 b = regress(y,X) [b,bint] = regress(y,X) [b,bint,r] = regress(y,X) [b,bint ...

  2. 多元线性回归分析matlab实验报告,利用MATLAB进行多元线性回归.ppt

    <利用MATLAB进行多元线性回归.ppt>由会员分享,可在线阅读,更多相关<利用MATLAB进行多元线性回归.ppt(15页珍藏版)>请在人人文库网上搜索. 1.2.线性回归 ...

  3. 多元线性回归模型-数学建模类-matlab详解

    如果本文有点小难理解的话,可以看看我之前的基础线性规划啥的,有lingo,matlab还有python 就不给大家放链接了,想看的话,点击头像即可!! 文章目录 (1)一元线性回归之旧轿车价格案例 ( ...

  4. matlab重复线性回归,(MATLAB)一元线性回归和多元线性回归

    (MATLAB)一元线性回归和多元线性回归 (MATLAB)一元线性回归和多元线性回归 (MATLAB)一元线性回归和多元线性回归1.一元线性回归 2.多元线性回归2.1数据说明 2.2程序运行结果 ...

  5. matlab中多元线性回归regress函数精确剖析(附实例代码)

    matlab中多元线性回归regress函数精确剖析(附实例代码) 目录 前言 一.何为regress? 二.regress函数中的参数 三.实例分析 总结 前言 regress函数功能十分强大,它可 ...

  6. 【Matlab】多元线性回归(Excel可直接替换数据)

    [Matlab]多元线性回归(Excel可直接替换数据) 1.模型原理 2.模型说明 3.数据说明 4.代码绘图 5.输出回归模型 6.代码及注释 1.模型原理 多元线性回归原理概述如下: 多元线性回 ...

  7. 【Matlab】多元线性回归

    多元线性回归 一元线性回归 绘图 求参 多元线性回归 regress函数 matlab 文档非常有用 一元线性回归 一个旧东西随着时间价格也在变动,数据如下: 1 2 3 4 5 6 7 8 9 10 ...

  8. 多元线性回归matlab代码例题_matlab多元线性回归

    1.matlab多元回归示例如下: 解决问题:油价预测 方法:多元线性回归 实现:matlab regress()函数 技巧:通过增加X1^2,X2^2,或者X1*X2等构造的特征项,可以提高回归模型 ...

  9. (MATLAB)一元线性回归和多元线性回归

    (MATLAB)一元线性回归和多元线性回归 1.一元线性回归 2.多元线性回归 2.1数据说明 2.2程序运行结果 1.一元线性回归 直接看代码,目标是建立 y y y和 x x x的函数关系,即求 ...

最新文章

  1. 虚拟机centos7繁忙关不了机的解决方法(转载)
  2. linux脚本获取当前用户,bash shell 获取当前正在执行脚本的绝对路径
  3. framebuffer显示JPEG图片
  4. python外星人入侵游戏代码_Python游戏:外星人入侵游戏编程完整版!内附代码
  5. nginx操作指南之二
  6. 区块链和java哪个更难_java 区块链中设计合理的难度系数
  7. 求ax bx c 0的根c语言,关于求方程ax2+bx+c=0根的问题
  8. Matplotlib - bar(条形图)
  9. java jsch session 多久会断开_What?纯Java居然能实现Xshell!
  10. 最大似然估计与最小二乘
  11. 2009年02月《安全天下事》、2009年02月《安全天下事之12月,辩证法之月》、《2008信息安全技术与产业大盘点》...
  12. ArcMap10.2 本地安装教程
  13. JAVA编译器eclipse的安装教程
  14. C 语言绝对值函数abs实现技巧
  15. 学Python运维,这知识点你肯定会遇到,【必收藏之】nginx 域名跳转相关配置
  16. elementUi中的图片预览功能(图片放大、缩小)preview-src-list属性
  17. attributeerror: module 'numpy.random' has no attribute 'randon'
  18. 知网下载的PDF论文,如何加目录的方法
  19. 内鬼黑客狂卖个人信息 “年产值”飙上千亿
  20. 对流氓软件应群起攻之

热门文章

  1. EasyRecovery15MacPro离线便捷扫描恢复数据
  2. mysql做十亿条数据查询_数据库优化:mysql数据库单机数十亿数据查询设计
  3. 【JNU】网络配置大题详解(E口与G口两种类型)
  4. spring integration 入门
  5. Windows7和Windows10设置屏保保护程序-冒泡
  6. Java 多态实际操练--使用多态的特征创建不同宠物的玩耍方法
  7. 解决大型企业项目规划难题,「ONES Plan 项目集管理」重磅发布
  8. 【19考研】复试英语 自我介绍模板
  9. linux命令中插入制表符,linux 中grep 匹配制表符 和 换行符的命令
  10. 计算机系活动主题,计算机科学系“传承大钊精神,让青春绽放光彩”主题团日活动...