目录

1 区间偏最小二乘法原理(ipls)

2 ipls的python实现

3 实验结果图


1 区间偏最小二乘法原理(ipls)

区间偏最小二乘法可以用来提取特征波段,它将整个光谱区域划分为多个等宽的子区间, 假设为n个; 在每个子区间上进行偏最小二乘回归,建立待测品质的"局部回归模型",也就是可以得到n个局部回归模型;以均方根无误差MSE值为各模型的精度衡量标准,取精度最高的局部模型所在的子区间为特征波段。

2 ipls的python实现

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from utility_spectrum import spxy, ipls
import scipy.io as sio
from sklearn.cross_decomposition import PLSRegression
from sklearn.metrics import mean_squared_errordef splitspectrum(interval_num, x_train, x_test):""":param interval_num:  int (common values are 10, 20, 30 or 40):param x_train:  shape (n_samples, n_features):param x_test:  shape (n_samples, n_features):return: x_train_block:intervals splitting for training sets(dict)x_test_black: intervals splitting for test sets (dict)"""feature_num = x_train.shape[1]x_train_block = {}x_test_black = {}remaining = feature_num % interval_num  # 用于检查是否能等分# (一)特征数量能够等分的情况if not remaining:interval_size = feature_num / interval_num  # 子区间波点数量for i in range(1, interval_num+1):# (1)取对应子区间的光谱数据feature_start, feature_end = int((i-1) * interval_size), int(i * interval_size)x_train_block[str(i)] = x_train[:, feature_start:feature_end]x_test_black[str(i)] = x_test[:, feature_start:feature_end]# (二)特征数量不能等分的情况(将多余波点等分到后面的几个区间里)else:separation = interval_num - remaining  # 前几个区间intervalsize1 = feature_num // interval_numintervalsize2 = feature_num // interval_num + 1# (2)前几个子区间(以separation为界)for i in range(1, separation+1):feature_start, feature_end = int((i-1) * intervalsize1), int(i * intervalsize1)x_train_block[str(i)] = x_train[:, feature_start:feature_end]x_test_black[str(i)] = x_test[:, feature_start:feature_end]# (3)后几个子区间(以separation为界)for i in range(separation+1, interval_num+1):feature_s = int((i - separation-1) * intervalsize2) + feature_endfeature_e = int((i - separation) * intervalsize2) + feature_endx_train_block[str(i)] = x_train[:, feature_s:feature_e]x_test_black[str(i)] = x_test[:, feature_s:feature_e]return x_train_block, x_test_blackdef ipls(intervals, x_train, x_test, y_train, y_test):""":param intervals: 区间数量:param x_train: shape (n_samples, n_features):param x_test: shape (n_samples, n_features):param y_train: shape (n_samples, ):param y_test: shape (n_samples, ):return:"""x_train_block, x_test_black = splitspectrum(intervals, x_train, x_test)mse = []for i in range(1, intervals + 1):print("当前区间:", i)x_train_interval, x_test_interval = x_train_block[str(i)], x_test_black[str(i)]current_fn = x_train_interval.shape[1]if current_fn >= 100:ncom_upper = 100elif current_fn >= 50:ncom_upper = current_fn - 10else:ncom_upper = current_fn - 5ncomp = np.arange(5, ncom_upper)error = []for nc in ncomp:print("迭代当前主成分数量:", nc)pls = PLSRegression(n_components=nc,scale=True,max_iter=500,tol=1e-06,copy=True)pls.fit(x_train_interval, y_train.reshape(-1, 1))y_test_pred = pls.predict(x_test_interval)mse_temp = mean_squared_error(y_test, y_test_pred.ravel())error.append(mse_temp)mse.append(np.min(error))print(mse)plt.figure(figsize=(5.5, 4), dpi=300)plt.bar(np.arange(1, intervals + 1), mse, width=0.5, color='bgrk', linewidth=0.4)plt.xlabel("intervals")plt.ylabel("mse")plt.show()# 1.数据获取
mat = sio.loadmat('ndfndf.mat')
data = mat['ndfndf']
x, y = data[:, :1050], data[:, 1050]
print(x.shape, y.shape)# 2.样本集划分
x_train, x_test, y_train, y_test = spxy(x, y, test_size=0.33)
print(x_train.shape, y_train.shape)
print(x_test.shape, y_test.shape)intervals = 20
ipls(intervals, x_train, x_test, y_train, y_test)

3 实验结果图

划分为20 个区间

近红外光谱建模之区间偏最小二乘法python实现(ipls算法)相关推荐

  1. matlab pls rmsecv,偏最小二乘法PLS回归NIPALS算法及Matlab程序及例子.doc

    偏最小二乘法PLS回归NIPALS算法及Matlab程序及例子 偏最小二乘法PLS回归NIPALS算法的Matlab程序及例子 function [T,P,W,Wstar,U,b,C,B_pls,.. ...

  2. 偏最小二乘法 Partial Least square

    最小二乘法:http://baike.so.com/doc/723226.html 偏最小二乘法(Partial Least square) http://blog.sciencenet.cn/blo ...

  3. Matlab中的偏最小二乘法(PLS)回归模型,离群点检测和变量选择

    全文下载:http://tecdat.cn/?p=22319 本文建立偏最小二乘法(PLS)回归(PLSR)模型,以及预测性能评估.为了建立一个可靠的模型,我们还实现了一些常用的离群点检测和变量选择方 ...

  4. 关系模式最小依赖集怎么求_偏最小二乘法的原理与实现

    偏最小二乘法的原理与实现 近几年来,机器学习在各个领域都有不错的表现,在生物信息领域也有相关的应用.然而,在诸如基因组学.转录组学.蛋白组学以及代谢组学等高通量数据的一大特点是特征量多.样本数少. 以 ...

  5. 数学建模——支持向量机模型详解Python代码

    数学建模--支持向量机模型详解Python代码 from numpy import * import random import matplotlib.pyplot as plt import num ...

  6. 数学建模——线性规划模型详解Python代码

    数学建模--线性规划模型详解Python代码 标准形式为: min z=2X1+3X2+x s.t x1+4x2+2x3>=8 3x1+2x2>=6 x1,x2,x3>=0 上述线性 ...

  7. H.264视频质量评价算法(基于偏最小二乘法回归)

    Zhiyuan Shi等人(这是中国人写的,但是我没看见中文论文,厦门大学的)在论文<Research on Quality Assessment Metric Based on H.264/A ...

  8. 回归预测 | MATLAB实现PLS(偏最小二乘法)和PCR(主成分回归)多输入单输出

    回归预测 | MATLAB实现PLS(偏最小二乘法)和PCR(主成分回归)多输入单输出 目录 回归预测 | MATLAB实现PLS(偏最小二乘法)和PCR(主成分回归)多输入单输出 预测效果 基本介绍 ...

  9. 基于PCA和PLS的近红外光谱建模

    系列文章目录 近红外光谱分析技术属于交叉领域,需要化学.计算机科学.生物科学等多领域的合作.为此,在(北京邮电大学杨辉华老师团队)指导下,近期准备开源传统的PLS,SVM,ANN,RF等经典算和SG, ...

  10. 偏最小二乘法中的权值w和载荷p

    先介绍一下奇异值分解,也称为谱分解 A=UΣVTA = U\Sigma V^T A=UΣVT 这里UUU称为左奇异向量,VVV称为右奇异向量,Σ\SigmaΣ为奇异矩阵. 奇异值分解常常用来做低秩逼近 ...

最新文章

  1. 55道常见的计算机面试题
  2. USTC English Club Note20211208
  3. [react] 你用过react版本有哪些?
  4. gui编程实践(2)--qq聊天界面 JTextArea多行文本框组件
  5. 做餐饮服务员有前途吗
  6. 简单的Java代码实现斗地主
  7. 如何将本地项目上传到码云
  8. EXCEL-数据透视表、日数据整理成月数据
  9. python爬取京东商品评价信息
  10. Python 简单的人名对话
  11. system函数和signal(SIGCHLD, SIG_DFL)的“固定搭配”
  12. DBeaver显示系统数据库不全
  13. 云计算开发(二) 分布式计算与分布式系统
  14. zookeeper shell_李孟_新浪博客
  15. 模拟实现list和vector反向迭代器
  16. 高性能MySQL(3th)(第六章 sql优化) —— 01 减少冗余数据
  17. Dialogue System for Unity使用(三)本地化语言
  18. Pyplot tutorial
  19. 中国5A级旅游景区名单
  20. 【微电影视频网站】介绍

热门文章

  1. 同义词词林 使用 java_利用同义词林计算词的相似度——基于路径与深度的同义词词林词语相似度计算...
  2. 相爱相杀:移动联通IT支撑回忆录(十四)
  3. 物理学的过去、现在与未来
  4. 年会抽奖程序,开箱即用
  5. 魔兽世界怀旧服正式服风铃键盘鼠标同步器TBC70级燃烧远征
  6. 08CMS之AJAX
  7. CSS3 3D旋转魔方
  8. c语言:简单的客户管理系统
  9. easyar android 开发,EasyAR 使用Unity如何导出android项目
  10. 优学派看视频显示连接服务器,为何优学派WiFi连起了却进不去腾讯网