近红外光谱建模之区间偏最小二乘法python实现(ipls算法)
目录
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算法)相关推荐
- matlab pls rmsecv,偏最小二乘法PLS回归NIPALS算法及Matlab程序及例子.doc
偏最小二乘法PLS回归NIPALS算法及Matlab程序及例子 偏最小二乘法PLS回归NIPALS算法的Matlab程序及例子 function [T,P,W,Wstar,U,b,C,B_pls,.. ...
- 偏最小二乘法 Partial Least square
最小二乘法:http://baike.so.com/doc/723226.html 偏最小二乘法(Partial Least square) http://blog.sciencenet.cn/blo ...
- Matlab中的偏最小二乘法(PLS)回归模型,离群点检测和变量选择
全文下载:http://tecdat.cn/?p=22319 本文建立偏最小二乘法(PLS)回归(PLSR)模型,以及预测性能评估.为了建立一个可靠的模型,我们还实现了一些常用的离群点检测和变量选择方 ...
- 关系模式最小依赖集怎么求_偏最小二乘法的原理与实现
偏最小二乘法的原理与实现 近几年来,机器学习在各个领域都有不错的表现,在生物信息领域也有相关的应用.然而,在诸如基因组学.转录组学.蛋白组学以及代谢组学等高通量数据的一大特点是特征量多.样本数少. 以 ...
- 数学建模——支持向量机模型详解Python代码
数学建模--支持向量机模型详解Python代码 from numpy import * import random import matplotlib.pyplot as plt import num ...
- 数学建模——线性规划模型详解Python代码
数学建模--线性规划模型详解Python代码 标准形式为: min z=2X1+3X2+x s.t x1+4x2+2x3>=8 3x1+2x2>=6 x1,x2,x3>=0 上述线性 ...
- H.264视频质量评价算法(基于偏最小二乘法回归)
Zhiyuan Shi等人(这是中国人写的,但是我没看见中文论文,厦门大学的)在论文<Research on Quality Assessment Metric Based on H.264/A ...
- 回归预测 | MATLAB实现PLS(偏最小二乘法)和PCR(主成分回归)多输入单输出
回归预测 | MATLAB实现PLS(偏最小二乘法)和PCR(主成分回归)多输入单输出 目录 回归预测 | MATLAB实现PLS(偏最小二乘法)和PCR(主成分回归)多输入单输出 预测效果 基本介绍 ...
- 基于PCA和PLS的近红外光谱建模
系列文章目录 近红外光谱分析技术属于交叉领域,需要化学.计算机科学.生物科学等多领域的合作.为此,在(北京邮电大学杨辉华老师团队)指导下,近期准备开源传统的PLS,SVM,ANN,RF等经典算和SG, ...
- 偏最小二乘法中的权值w和载荷p
先介绍一下奇异值分解,也称为谱分解 A=UΣVTA = U\Sigma V^T A=UΣVT 这里UUU称为左奇异向量,VVV称为右奇异向量,Σ\SigmaΣ为奇异矩阵. 奇异值分解常常用来做低秩逼近 ...
最新文章
- 55道常见的计算机面试题
- USTC English Club Note20211208
- [react] 你用过react版本有哪些?
- gui编程实践(2)--qq聊天界面 JTextArea多行文本框组件
- 做餐饮服务员有前途吗
- 简单的Java代码实现斗地主
- 如何将本地项目上传到码云
- EXCEL-数据透视表、日数据整理成月数据
- python爬取京东商品评价信息
- Python 简单的人名对话
- system函数和signal(SIGCHLD, SIG_DFL)的“固定搭配”
- DBeaver显示系统数据库不全
- 云计算开发(二) 分布式计算与分布式系统
- zookeeper shell_李孟_新浪博客
- 模拟实现list和vector反向迭代器
- 高性能MySQL(3th)(第六章 sql优化) —— 01 减少冗余数据
- Dialogue System for Unity使用(三)本地化语言
- Pyplot tutorial
- 中国5A级旅游景区名单
- 【微电影视频网站】介绍