数据分享|Python用偏最小二乘回归Partial Least Squares,PLS分析桃子近红外光谱数据可视化

本文涉及的产品
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 数据分享|Python用偏最小二乘回归Partial Least Squares,PLS分析桃子近红外光谱数据可视化

PLS,即偏最小二乘(Partial Least Squares),是一种广泛使用的回归技术,用于帮助客户分析近红外光谱数据点击文末“阅读原文”获取完整代码数据

相关视频

image.png

如果您对近红外光谱学有所了解,您肯定知道近红外光谱是一种次级方法,需要将近红外数据校准到所要测量的参数的主要参考数据上。这个校准只需在第一次进行。一旦校准完成且稳健,就可以继续使用近红外数据预测感兴趣参数的值。

PCR只是使用通过PCA得到的若干主成分构建的回归模型。显然,这并不是最佳选择,而PLS就是解决这个问题的方法。

在本文中,我将向您展示如何使用Python构建一个简单的PLS回归模型。以下是我们将要做的概述。

  1. 展示PLS的基本代码
  2. 讨论我们要分析的数据及所需的预处理。我们将使用新鲜桃子水果的近红外光谱查看文末了解数据免费获取方式,其关联的Brix值与PCR相同。这是我们要校准的量。
  3. 我们将使用交叉验证方法构建我们的模型

PLS Python代码

好的,以下是基于Python 3.5.2的运行PLS交叉验证的基本代码。

# 导入需要的库
from sklearn.metrics import mean_squared_error, r2_score # 导入均方误差和R2得分指标
from sklearn.model_selection import cross_val_predict # 导入交叉验证函数
 
# 定义PLS对象
pls = PLSReg......
nts=5) # 定义保留5个成分的PLS回归模型
 
# 拟合数据
pls.f......
 Y) # 将数据拟合到PLS模型中
 
# 交叉验证
y_cv = cros......
y, cv=10) # 用10折交叉验证计算模型性能
 
# 计算得分
score = r2_score(y,v) # 计算R2得分
mse = mean_squa......
_cv) # 计算均方误差

为了检查我们的校准效果如何,我们使用通常的指标来衡量。我们通过将交叉验证结果y_cv与已知响应进行比较来评估这些指标。为了优化我们的PLS回归参数(例如预处理步骤和成分数量),我们将跟踪这些指标,最常见的是均方差(MSE)。

还有一件事。在实际代码中,各种数组X, y等通常是从电子表格中读取的numpy数组。因此,您可能需要导入numpy(当然),pandas和其他一些库,我们将在下面看到。

这是Python中PLS回归的基本代码块。看一下数据导入和预处理了。

近红外数据导入和预处理

from sys import stdout
 ......
from sklearn.metrics import mean_squared_error, r2_score

接下来,让我们导入数据,这些数据保存在一个csv文件中。该数据由50个新鲜桃子的近红外光谱组成。每个光谱都有对应的Brix值(响应变量)。最后,每个光谱在1100 nm到2300 nm之间取600个波长点,步长为2 nm。

data = pd.read_csv('./datavalues.csv')
# 获取参考值
y = data[......
lues
# 获取光谱
X = data......
axis=1).values
# 获取波长
wl = np.a......
0,2300,2)

558461c4b80ef24168eaf4f1116920e9.png

如果需要,数据可以通过主成分分析进行排序,并使用乘法散射校正进行校正,然而,一个简单但有效的去除基线和线性变化的方法是对数据进行二阶导数。让我们这样做并检查结果。

# 计算二阶导数
X2 = savgol_fi
......
order = 2,deriv=2)
 
# 绘制二阶导数图像
plt.figure(fi......
(8,4.5))
with plt.style.context(('ggplot')):
......
    plt.show()

7971a649479ae34300597f6df6b7bef2.png

偏移已经消失,数据看起来更加紧密。


点击标题查阅往期内容


MATLAB偏最小二乘回归(PLSR)和主成分回归(PCR)分析光谱数据



左右滑动查看更多

f72fd323237c719d5bb925364edb23d2.png

偏最小二乘回归

现在是时候优化偏最小二乘回归了。如上所述,我们想要运行一个具有可变组分数的偏最小二乘回归,并在交叉验证中测试其性能。实际上,我们想要找到最小化均方误差的组件数。让我们为此编写一个函数。

def optimisls_cv(X, ......
=True):
 
    '''运行包括可变组件数量的偏最小二乘回归,最多到n_comp,并计算均方误差'''
 
    mse = []
......
    for i in component:
        pls = PLSR......
        # 交叉验证
        y_cv = cross_v......
 
        comp = 100*(i+1)/n_comp
        # 在同一行上更新状态的技巧
        stdout.write("\r%
......
 
    # 计算并打印均方误差最小值的位置
    msemin = np......
    stdout.write("\n")
 
    if plot_components is True:
        ......
          
            plt.title('PLS')
            plt.xlim(left=-1)
 
        plt.show()
 
    # 使用最佳组件数定义PLS对象
    pls_opt = PLSRe......
    # 对整个数据集进行拟合
    pls_opt.......
t.predict(X)
 
    # 交叉验证
    y_cv = cros......
 cv=10)
 
    # 计算校准和交叉验证的得分
    score_c = r2......
e(y, y_cv)
 
    # 计算校准和交叉验证的均方误差
    mse_c = mean_......
y, y_cv)
 
 
    # 绘制回归图和评估指标
    rangey = m......
- min(y_c)
 
    # 将交叉验证和响应拟合为一条直线
    z = np.poly......
'red', edgecolors='k')
        # 绘制最佳拟合线
        ax.plot(np.p......
, linewidth=1)
        # 绘制理想的1:1线
        ax.plot(y, ......
idth=1)
     
 
        plt.show()
 
    return

这个函数首先运行了一个循环,通过偏最小二乘回归的组件数计算预测的均方误差。其次,它找到最小化均方误差的组件数,并使用该值再次运行偏最小二乘回归。在第二次计算中,计算了一堆指标并将其打印出来。

让我们通过将最大组件数设置为40来运行此函数。

optimise......
, plot_components=True)

第一个图表是均方误差作为组件数的函数。建议最小化均方误差的组件数在该图中突出显示。

a74f0921aa43a01e9c2f6b591416d332.png

第二个图表是实际的回归图,包括预测指标。

fa21a6a762057271e0599037e784d17c.png

同时,在屏幕上会打印出以下信息。

f79e0786889318fe13b2a9760d53fd58.png

该模型在校准数据上似乎表现良好,但在验证集上的表现则不尽如人意。这是机器学习中所谓的过拟合的经典例子。

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
打赏
0
0
0
0
111
分享
相关文章
利用Python获取网络数据的技巧
抓起你的Python魔杖,我们一起进入了网络之海,捕捉那些悠游在网络中的数据鱼,想一想不同的网络资源,是不是都像数不尽的海洋生物,我们要做的,就是像一个优秀的渔民一样,找到他们,把它们捕获,然后用他们制作出种种美味。 **1. 打开魔法之门:请求包** 要抓鱼,首先需要一个鱼网。在Python的世界里,我们就是通过所谓的“请求包”来发送“抓鱼”的请求。requests是Python中常用的发送HTTP请求的库,用它可以方便地与网络上的资源进行交互。所谓的GET,POST,DELETE,还有PUT,这些听起来像偶像歌曲一样的单词,其实就是我们鱼网的不同方式。 简单用法如下: ``` im
38 14
Python 原生爬虫教程:京东商品列表页面数据API
京东商品列表API是电商大数据分析的重要工具,支持开发者、商家和研究人员获取京东平台商品数据。通过关键词搜索、分类筛选、价格区间等条件,可返回多维度商品信息(如名称、价格、销量等),适用于市场调研与推荐系统开发。本文介绍其功能并提供Python请求示例。接口采用HTTP GET/POST方式,支持分页、排序等功能,满足多样化数据需求。
用Python爬虫抓取数据并保存为JSON的完整指南
用Python爬虫抓取数据并保存为JSON的完整指南
Python 原生爬虫教程:京东商品详情页面数据API
本文介绍京东商品详情API在电商领域的应用价值及功能。该API通过商品ID获取详细信息,如基本信息、价格、库存、描述和用户评价等,支持HTTP请求(GET/POST),返回JSON或XML格式数据。对于商家优化策略、开发者构建应用(如比价网站)以及消费者快速了解商品均有重要意义。研究此API有助于推动电商业务创新与发展。
Python 高级编程与实战:深入理解性能优化与调试技巧
本文深入探讨了Python的性能优化与调试技巧,涵盖profiling、caching、Cython等优化工具,以及pdb、logging、assert等调试方法。通过实战项目,如优化斐波那契数列计算和调试Web应用,帮助读者掌握这些技术,提升编程效率。附有进一步学习资源,助力读者深入学习。
[oeasy]python081_ai编程最佳实践_ai辅助编程_提出要求_解决问题
本文介绍了如何利用AI辅助编程解决实际问题,以猫屎咖啡的购买为例,逐步实现将购买斤数换算成人民币金额的功能。文章强调了与AI协作时的三个要点:1) 去除无关信息,聚焦目标;2) 将复杂任务拆解为小步骤,逐步完成;3) 巩固已有成果后再推进。最终代码实现了输入验证、单位转换和价格计算,并保留两位小数。总结指出,在AI时代,人类负责明确目标、拆分任务和确认结果,AI则负责生成代码、解释含义和提供优化建议,编程不会被取代,而是会更广泛地融入各领域。
65 28
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
|
27天前
|
[oeasy]python074_ai辅助编程_水果程序_fruits_apple_banana_加法_python之禅
本文回顾了从模块导入变量和函数的方法,并通过一个求和程序实例,讲解了Python中输入处理、类型转换及异常处理的应用。重点分析了“明了胜于晦涩”(Explicit is better than implicit)的Python之禅理念,强调代码应清晰明确。最后总结了加法运算程序的实现过程,并预告后续内容将深入探讨变量类型的隐式与显式问题。附有相关资源链接供进一步学习。
34 4

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等