精华内容
下载资源
问答
  • 连续投影算法

    2018-04-19 15:44:18
    连 续 投 影 算 法(SPA)是 一 种 使 矢 量 空 间 共 线 性最小化的前向变量选择算法, 它的优势...近年来 ,国内外学者在利用光谱分析技术检测作物和食品中某些重要成分的含量时利用了连续投影算法作有效波长的选取。
  • 连续投影算法,实现光谱数据特征波长的选择
  • 连续投影算法.zip

    2020-07-22 15:42:09
    连续投影算法spa的 matlab程序源代码压缩文件,用于可见-近红外光谱数据的特征波长提取,内含8个文件,可以下载试试,还不错。
  • 对老版本代码进行了调试,找了一个光谱的数据进行降维测试,效果不错,有需要的小伙伴下载吧,调试不易,谢谢支持。
  • 连续投影算法,实现光谱数据特征波长的选择
  • 可以实现光谱特征波段的提取,减少建模时间。
  • 连续投影算法,matlab程序可用,直接将数据放入excel就可运行。
  • SPA提取特征,数据为高光谱数据,感兴趣区域数据,最后一列为标签
  • 连续投影算法用于特征变量筛选,可以用于复杂数据降维
  • 比较了光谱预处理和建模方法对节子识别的影响, 研究了单一树种板材节子识别模型对其他树种板材节子识别的适应性, 建立了混合树种板材的节子识别模型, 并利用连续投影算法(SPA)进行了节子特征波长优选。结果显示, ...
  • 共识连续投影算法-多元线性回归分析近红外光谱的方法。
  • 连续投影算法的使用,具体安装使用过程可以百度,降维数据
  • 光谱选取特征波长
  • 实现特征波长的提取,连续投影算法可以实现特征光谱信息,结合PCA实现样品分类
  • matlab连续投影算法SPA使用示例

    千次阅读 热门讨论 2021-07-04 22:09:51
    连续投影算法(Successive Projections Algorithm,SPA)是一种使矢量空间共线性最小化的前向变量选择算法, 它的优势在于提取全波段的几个特征波长,能够消除原始光谱矩阵中冗余的信息,可用于光谱特征波长的筛选。

    连续投影算法(Successive Projections Algorithm,SPA)是一种使矢量空间共线性最小化的前向变量选择算法, 它的优势在于提取全波段的几个特征波长,能够消除原始光谱矩阵中冗余的信息,可用于光谱特征波长的筛选。
    ——百度百科

    论文写作需要用到SPA对高光谱数据进行波段选择,在网上找到相关代码SPA_GUIhttp://www.ele.ita.br/~kawakami/spa/后不知道如何使用,于是参考帮助文档一步一步的做。以下内容来自帮助文档内第七章节示例。
    在这里插入图片描述

    前情提要

    网上看的问题大多出在不知道Xcal、Ycal和Xval、Yval是什么东西,根据我的理解,Xcal、Ycal 分别是建模集的光谱反射率矩阵和待测物质含量(比如植株含水量、叶面积指数、生物量等等这些生理参数,我这里是拿农业方面做例子,还可以是其他学科的一些参数);Xval、Yval 分别是验证集或者叫预测集光谱反射率矩阵和待测物质含量。就是说,同一批光谱数据分析之前先要划分样本集,将所有样本划分为建模集和验证集。而且这些矩阵是行为样本,列为波段,也就是说第一行是样本1,这一行从第一列开始往后都是这个样本的反射率。

    算法实现

    1、数据设置

    数据使用示例数据,获取数据代码如下(也是从网站http://www.ele.ita.br/~kawakami/spa/Extract_corn_dataset.m直接获取的):

    urlwrite(['http://www.eigenvector.com/data/Corn/corn.mat'],'corn.mat'); % Extracts the corn data set from URL www.eigenvector.com
    %%
    warning('off')
    load('corn.mat') % Loads the data set
    warning('on')
    data = [m5spec.data propvals.data(:,1)];% Arranges the data into a matrix: Samples x (Spectral variables + Moisture content)
    clearvars -except data
    save corn_dataset % Saves the dataset
    delete('corn.mat') % Removes the temporary file
    

    直接运行,运行时间很长慢慢等待就好,运行完毕后会出现corn_dataset.mat这个文件,打开可以看到,是一个80×701的一个矩阵,正如前情提要里说到,行为样本列为波段。根据帮助文档里所写,这个数据是80个玉米样本反射率数据1到700列,而且第701列数据为玉米含水量(The data set used in this example consists of spectra from 80 corn samples, which were acquired in the range 1100–1498 nm, together with moisture content for each sample.光谱范围是1100到1498但是为啥会有700个波段可能是帮助文档写错了吧)。
    在这里插入图片描述

    2、数据导入Loading the data

    运行SPA_GUI.p文件,会出现下列界面,然后选择Load,把那个玉米数据集导入。

    In the “Load Data” module (section 3) use the “load” button to load the contents of data file tothe workspace.Once the data file is loaded, the matrix “data” is presented at the “Data matrices in the workspace” group.

    在这里插入图片描述
    然后在Objects里选择Matrix Columns,意思是按列选择。然后点击Edit,输入1:700,点击确定就会选择前700列数据,点击Extract提取当作X(后续还要对X进行处理,处理得到Xcal、Xval)。

    The next step is to split the data matrix will in the matrices X (instrumental responses) and Y (parameter of interesting). In order to do that, first select the “Matrix Columns” checkbox and press the “Edit” button in the “Objects” group. The following window will appear. In this window, select the columns with index of 1 to 700 and press the OK button.To extract the data to Y, repeat the process selecting only the column 701.

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    这个时候Data matrices in the workspace里就会出现提取的X。同样方法提取第701列数据玉米含水量当作Y(后续还要对Y进行处理,处理得到Ycal、Yval)。
    在这里插入图片描述

    3、数据预处理Preprocessing

    这个示例使用了Savitzky–Golay一阶平滑消除光谱噪声,降低环境背景干扰等因素的影响。当然程序还提供了wavelet denoising小波去噪的处理方法。

    This module contains the following groups: “Savitzky-Golay Smoothing”, “Savitzky-Golay Differentiation”, and “Wavelet Denoising”.

    首先要先全部选择X中的数据。Objects里选择Matrix Rows,然后Select All。

    To perform this preprocessing, select the matrix “X” in the “Data matrices in the workspace” group. Then, in the “Objects” group, select the “Matrix rows” option and press the button “Select All” to select all samples.

    在这里插入图片描述
    随后切换到Data Pre-Processing界面,设置S-G平滑的相关参数。

    Switch to the “Data Pre-Processing” module. In this module, inform the Savitzky-Golay filter parameters (the frame size, polynomial order, and differentiation order), according to the figure below.

    Frame Size一定是奇数,值越大,则平滑效果越明显。
    Polynomnial设置平滑多项式的次数。通常设置为2~4。较低的次数能够产生平滑结果,但是有可能出现偏置。较高的次数能降低偏置,但有可能过拟合而导致结果噪声过多。次数必须小于滤波器宽度,即Frame Size。
    Order设置导数阶数。设置为0,表示仅平滑;设置为1,表示一阶导数平滑结果;设置为2,表示二阶导数。以此类推(Order必须小于等于Polynomial)。

    The frame size must be odd, and the polynomial order must be less than the frame length. If invalid parameters are entered, error messages will appear.
    The same parameters specified for Savitzky-Golay smoothing will be also used for Savitzky- Golay differentiation. To run the differentiation, it is also necessary to specify the differentiation order (1 or 2, meaning first or second derivative).

    在这里插入图片描述

    然后Apply即可,会出现S-G平滑后的结果。
    在这里插入图片描述
    可以用+ -来修改S-G平滑的参数。

    If want to test other preprocessing configurations, press the “+” and “-” buttons to change the frame size and polynomial order.

    随后点击Save Signal来保存S-G平滑结果,结果保存为Xnew 。

    Press the “Save signal” button in the Savitzky-Golay screen to save the processed samples. A window requesting the name of the matrix will appear. In this window, inform the name of the matrix as “Xnew”.

    4、样本选择Selection of samples

    这个示例使用了Kennard-Stone算法来选择样本。当然程序还提供了随机选择Random Sampling和SPXY算法。

    把这80个样本分成40建模20验证20预测,切换到Sample Selection界面,参数设置如下图所示。

    The KS algorithm is used to divide the available samples into calibration, validation, and prediction sets. The corn data were divided into 40 samples for calibration, 20 samples for validation, and 20 samples for prediction. These sets are used for model-building and performance evaluation.
    To select the 40 samples for calibration, switch to the “Sample Selection” module and set the parameters as in the following figure.

    在这里插入图片描述
    点击run,便会对X和Y数据进行选择。
    在这里插入图片描述
    可以看到,Xnew_ks_sel包含被选择作为建模的样本,也就是Xcal,而Xnew_ks_notsel中是未被选中建模的样本,这个矩阵中包含验证和预测的样本所以要进一步拆分。Y_ks_sel就是Ycal

    The “Xnew_ks_sel” matrix, which contains the selected samples, is the set to be used for calibration. The “Xnew_ks_notsel’ matrix, which contains the samples that were not selected, will be divided in two sets, for validation and prediction.
    Before dividing the “Xnew_ks_notsel” matrix, it will first be ordered according with Euclidian distances using the KS algorithm. This procedure can be performed by setting the parameters as in the following figure.

    对Xnew_ks_notsel进一步拆分,参数设置如下。(根据自己的需要来设置,如果需要预测集就进行拆分,如果不需要预测集直接开始运行SPA了,Xnew_ks_notsel就是Xval。)
    在这里插入图片描述
    在这里插入图片描述

    虽然设置的还是40,而且Xnew_ks_notsel_ks_sel与Xnew_ks_notsel所含内容是一致的,但是新生成的Xnew_ks_notsel_ks_sel是按照欧氏距离进行排序的。为了对其进行选择,切换到Load Data界面,在Data matrices in the workspace界面中选择Xnew_ks_notsel_ks_sel。

    The new matrix “Xnew_ks_notsel_ks_sel” contains the same samples of “Xnew_ks_notsel”, but ordered by distance. In order to split this matrix in the validation and prediction sets, switch to the “Load Data” module and select the “Xnew_ks_notsel_ks_sel” matrix in the “Data matrices in the workspace” group.

    然后点击Edit,参数设置为1:2:40,意思是以2为间隔对数据进行选择。

    Then, press the “Edit” button in the “Objects” group and select the samples 1:2:40, as illustrated in the figure below.

    在这里插入图片描述
    然后将其提取,点击Extract作为Xval。

    In order to extract the selected samples, press the “Extract” button in the “Data matrices in the workspace” group. The following window will appear. In this window, inform the name of the new matrix as “Xval” and press the OK button.

    在这里插入图片描述
    帮助文档中还写到,提取Xval后要将其导出以备后续之用。导出为idx_validation。(其实这个是为了保证后续Yval的选择是与Xval相对应的)

    After that, press the “Export Selection” button in the “Objects” group to export the selected indices (for future use). The following window will appear. Inform the name of the array as “idx_validation”.

    然后开始提取Yval。选择Y_ks_notsel_ks_sel,可以按照提取Xval的方法(就是设置1:2:40),也可以使用刚才导出的idx_validation。点击Select from array,并选择idx_validation,这样就会保证Xval与Yval是对应的(也就是一组反射率对应一个生理参数)。

    Now, select the “Y_ks_notsel_ks_sel” matrix in the “Data matrices in the workspace” group to extract the moisture content for the validation samples.
    The same indices used for matrix Xval must be used for matrix Yval. These indices can be informed by using the same procedure used above. An alternative procedure is to press the “Select from array” button in the “Objects” group. After pressing this button, a list of numeric matrices is presented. In this list, select the “idx_validation” array that was saved before. This will ensure that the same indices are used for Xval and Yval matrix.

    在这里插入图片描述
    选择预测数据集。先选择Xnew_ks_notsel_ks_sel,然后选择Select from array,再选idx_validation,再点击Invert就会反向选择,意思就是把Xnew_ks_notsel_ks_sel剩下的数据全选上。

    To choose the samples of prediction, select the matrix Xnew_ks_notsel_ks_sel again in the “Data matrices in the workspace” group. Use the “Select from array” button to load again the list of indices available in the “idx_validation” array.
    Press the “Invert” button in the “Objects” group to invert the selection, i.e., to select the remaining samples.

    在这里插入图片描述
    然后Extract,提取为Xpred。

    Now, set the matrix X for prediction using the “Extract” button in the “Data matrices in the workspace” group.

    在这里插入图片描述
    提取Ypred是同样的方法。

    Select the matrix Y_ks_notsel_ks_sel in the “Data matrices in the workspace” group to extract the moisture content for the prediction samples.
    Now, set the matrix Y for prediction using the “Extract” button in the “Data matrices in the workspace” group.

    在这里插入图片描述

    5、SPA算法运行Variable selection for multivariate calibration using SPA

    5.1 建模

    切换到SPA界面,把之前提取的Xcal等等参数设置一下,再设置筛选波段数量最大最小值即可。下图的参数都是按照帮助文档里的参数设置的,可以根据自己需要进行设置最大最小值。波段选择数据存储为var_sel。

    To use the SPA algorithm, set the calibration and validation matrices, minimum and maximum number of variables as described in the section 6.1. In this example, specify the parameters as in the following figure and press the “Run SPA” button.

    这个m_max一定小于样本数-1,但是也不一定非得设置为样本数-1,可以适当小一点这样才能选的多。有时候设置的大了SPA才选了1个波段出来。
    在这里插入图片描述
    run之后会出现两个图,左边是误差分析图,右边是波段选择图。可以看到在第17次迭代时RMSE达到最小,于是选择了17个波段。波段选择的数据可以打开var_sel查看。

    Two figures are presented: scree plot and the variables selected.
    The scree plot tends to level off after a certain number of variables is added to the model. The number of variables selected in the third phase of SPA is indicated by square marker. This is the point at which the RMSE is not significantly larger than RMSEmin according to an F-test with a = 0.25.
    The variables selected by SPA are plotted at the first calibration samples. This figure is presented below.

    在这里插入图片描述
    在这里插入图片描述
    如果想保存RMSE这个图的数据,在RMSE这个figure里,点击刷亮/选择数据,然后全选数据,右键选择创建变量,保存RMSE数据即可。
    在这里插入图片描述

    5.2 样本预测

    一般到SPA算法运行部分就可以了,样本预测这个部分我的论文里没有涉及,所以直接上帮助文档。
    In this example, specify the “Prediction” group parameters as in the following figure.
    The graph reference versus predicted is presented together with the statistics parameters PRESS, RMSEP, SDV, and r, for the prediction set. The figure below shows the obtained results.
    在这里插入图片描述
    To know the statistics parameter of the validation set, use the validation matrices in the spaces of prediction (Xpred and ypred). If they are left blank, leave-one-out cross-validation will be carried out in the calibration samples.
    意思是如果Xpred和Ypred没有设置的话,会使用留一交叉验证法进行预测。
    在这里插入图片描述
    做完之后保存数据。
    Switch to the “Load Data” module and press either the “Save” or the “Save As” button in the “Data File” group to save the data matrices to the data file (file with .mat extension).
    In the main menu, choose the option “File: Save” or “File: Save As” to save the configuration file (file with .spr extension used to store the parameters specified in the graphical user interface).

    展开全文
  • 连续投影算法-python版

    千次阅读 热门讨论 2020-09-20 16:27:23
    连续投影算法 - SPA python版 文章目录连续投影算法 - SPA python版原理代码注意事项 连续投影算法大量用于光谱特征波长选择中,翻遍全网,SPA算法只找到了MATLAB版本。 原理 连续投影算法(successive projections ...

    连续投影算法 - SPA python版


    连续投影算法大量用于光谱特征波长选择中,翻遍全网,SPA算法只找到了MATLAB版本。

    原理

    连续投影算法(successive projections algorithm, SPA) 是前向特征变量选择方法。SPA利用向量的投影分析,通过将波长投影到其他波长上,比较投影向量大小,以投影向量最大的波长为待选波长,然后基于矫正模型选择最终的特征波长。SPA选择的是含有最少冗余信息及最小共线性的变量组合。该算法简要步骤如下。

    记初始迭代向量为 x k ( 0 ) x_{k(0)} xk(0),需要提取的变量个数为 N N N,光谱矩阵为 J J J列。

    1. 任选光谱矩阵的1列(第 j j j列),把建模集的第 j j j列赋值给 x j x_j xj,记为 x k ( 0 ) x_{k(0)} xk(0)

    2. 将未选入的列向量位置的集合记为 s s s,
      s = { j , 1 ≤ j ≤ J , j ∉ { k ( 0 ) , ⋯   , k ( n − 1 ) } } s=\lbrace j,1\leq{j}\leq{J}, j\notin \lbrace k(0), \cdots, k(n-1) \rbrace \rbrace s={j,1jJ,j/{k(0),,k(n1)}}

    3. 分别计算 x j x_j xj对剩余列向量的投影:
      P x j = x j − ( x j T x k ( n − 1 ) ) x k ( n − 1 ) ( x k ( n − 1 ) T x k ( n − 1 ) ) − 1 , j ∈ s P_{x_j} = x_j-(x^T_j x_{k(n-1)})x_{k(n-1)}(x^T_{k(n-1)}x_{k(n-1)})^{-1},j\in s Pxj=xj(xjTxk(n1))xk(n1)(xk(n1)Txk(n1))1,js

    4. 提取最大投影向量的光谱波长,
      k ( n ) = a r g ( m a x ( ∥ P ( x j ) ∥ ) , j ∈ s ) k(n) = arg(max(\| P_(x_j) \|), j \in s) k(n)=arg(max(P(xj)),js)

    5. x j = p x , j ∈ s x_j = p_x, j \in s xj=px,js

    6. n = n + 1 n = n + 1 n=n+1,如果 n < N n < N n<N,则按公式(1)循环计算。

    最后,提取出的变量为 { x k ( n ) = 0 , ⋯   , N − 1 } \lbrace x_{k(n)} = 0, \cdots, N-1 \rbrace {xk(n)=0,,N1}。对应每一次循环中的 k ( 0 ) k(0) k(0) N N N,分别建立多元线性回归分析(MLR)模型,得到建模集交互验证均方根误差(RMSECV),对应不同的候选子集,其中最小的RMSECV值对应的 k ( 0 ) k(0) k(0) N N N就是最优值。一般SPA选择的特征波长分数 N N N不能很大。

    ​ -------------------------摘自《光谱及成像技术在农业中的应用》P130
    代码以 仓库为准 ,待作者研究一下《开源法则》进一步编写使用文档,在此之前 请遵守开源协议 BSD-3-Clause
    数据暂不提供 使用前请熟悉 pandas numpy matplot的使用 数据操作问题不予回答

    注意事项

    1. 光谱矩阵(m * n)m行为样本,n列为波段

    2. 进行建模前需要对光谱进行 建模集测试集分割 与 数据归一化 ,可先进行分割再归一,也可以先归一再分割,下边为分割再归一

      from sklearn.model_selection import train_test_split
      from sklearn.preprocessing import MinMaxScaler
      
      Xcal, Xval, ycal, yval = train_test_split(x, y, test_size=0.4, random_state=0)
      
      min_max_scaler = MinMaxScaler(feature_range=(-1, 1))  
      Xcal = min_max_scaler.fit_transform(Xcal)
      Xval = min_max_scaler.transform(Xval)
      

    3.源码仓库 https://gitee.com/aBugsLife/SPA

    展开全文
  • 再利用连续投影算法提取特征波段,但是基于一阶导数和二阶导数预处理下提取的特征波段是连续的是为什么 <p style="text-align:center"><img alt="" src=...
  • 连续投影算法,连续投影算法原理,matlab源码.rar
  • 连续投影算法,连续投影算法原理,matlab源码.zip
  • 连续投影算法,连续投影算法原理,matlab源码 (1).rar
  • 连续投影算法,连续投影算法原理,matlab源码 (1).zip
  • 连续投影算法,连续投影算法原理,matlab源码 (1).zip.zip
  • 针对煤炭近红外光谱原始数据的高维、多重共线性、建模容易过拟合等问题,研究了煤炭光谱的特征波长筛选方法,提出了基于平均影响值的改进连续投影算法。实验表明,所提出的算法可以有效降低数据维数、提高数据质量。
  • 数据是光谱数据 用连续投影算法筛选波长 所以求搭救 给提供个matlab代码啊 小弟感激不尽!!
  • 为了探索分数阶微分在高光谱估算小麦叶片含水量上的可行性,在农田尺度上,利用春小麦野外光谱数据与实测叶片含水量数据,以0.2阶为步长,计算光谱0~2阶微分,并分析其与小麦叶片含水量的相关性,再利用连续投影算法(SPA)...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,067
精华内容 6,826
关键字:

连续投影算法