您的位置:

PLS模型:从基本模型到高级应用技巧的全面介绍

一、PLS基础模型

PLS(偏最小二乘回归)是一种线性回归技术,主要用于分析多维数据的相关性。其最大的特点是在处理高维数据问题时能够有效地降维。PLS基础模型是最常用也是最简单的模型之一。

PLS模型旨在通过找到有预测能力的线性关系来预测响应变量,并且能够同时有效地处理多个自变量的协方差问题。以下是一个简单的PLS模型的代码示例:

from sklearn.cross_decomposition import PLSRegression
X = [[0., 0., 1.], [1.,0.,0.], [2.,2.,2.], [2.,5.,4.]]
y = [[0.1, 0.2], [0.9, 1.1], [6.2, 5.9], [11.9, 12.3]]
pls2 = PLSRegression(n_components=2)
pls2.fit(X, y)
print(pls2.coef_)

上述代码中使用了 4 个自变量 'X' 预测 2 个响应变量 'y'。PLSRegression() 函数指定了潜在变量数量 n_components=2。该函数返回一个训练后的模型实例,fit() 方法用于拟合模型,并计算得出系数 'pls2.coef_'。

系数数组 'pls2.coef_' 给出了 n_components 个维度上的线性权重,用于将 X 转换到满足 y 最优的至少一维。通过这种方式,PLS 模型在分析中可以快速进行特征选择和变量筛选。

二、PLS高级模型

PLS高级模型是基础模型的进一步扩展,能够处理更复杂的数据问题。在高级模型中,一些额外的约束可以添加到基础PLS算法中,从而提高了预测精度。以下是一个PLS高级模型的代码示例:

from sklearn.cross_decomposition import PLSRegression
from sklearn import preprocessing
X_scaled = preprocessing.scale(X)
y_scaled = preprocessing.scale(y)
pls2 = PLSRegression(n_components=2)
pls2.fit(X_scaled, y_scaled)
print(pls2.coef_)

与基础模型不同,高级模型的特征之间的关系更加复杂,因此需要通过对特征进行缩放等额外处理方式达到更好的结果。在上述代码中,使用了 'preprocessing.scale()' 函数进行缩放处理,即对每个特征沿样本轴进行标准化,然后添加到新的特征矩阵 X_scaled 和 y_scaled 中。接下来使用 'fit()' 函数训练模型,最终通过 'pls2.coef_' 计算出系数。

三、PLS的应用技巧

除了基础和高级模型之外,还有一些有用的PLS应用技巧,可以提高模型的准确性和实用性。以下是一些常见的应用技巧:

1.选取最优组件数量:

组件数量是在拟合PLS模型期间需要指定的重要参数。通常,组件数量越多,模型的精度越高。但实际上,也存在过度拟合的风险。为了避免这种情况,可以通过交叉验证方法选择最优的组件数量。

from sklearn.model_selection import KFold, cross_val_score
from sklearn.linear_model import Ridge
kf = KFold(n_splits=5, shuffle=True, random_state=42)
pls = PLSRegression()
pls_scores = []
pls_scores_std = []
n_comp_range = range(1, n_features)
for n_comp in n_comp_range:
 pls.n_components = n_comp
 score = cross_val_score(pls, X, Y, cv=kf, scoring='neg_mean_squared_error').mean()
 pls_scores.append(-score)
 pls_scores_std.append(cross_val_score(pls, X, Y, cv=kf, scoring='neg_mean_squared_error').std())

plt.errorbar(n_comp_range, pls_scores, np.array(pls_scores_std) / np.sqrt(len(X)), linewidth=2, color='navy')
plt.xlabel('nb of components')
plt.ylabel('CV score')
plt.title('PLS')

2.进行特征选择:

PLS模型具有自动执行特征选择的功能。可以通过点积运算计算自变量和因变量之间的相关系数,以确定那些自变量与因变量具有相关性比较高,然后保留这些自变量对模型进行训练。

from sklearn.cross_decomposition import PLSRegression
pls = PLSRegression()
pls.fit(X, Y)
pls_scores = np.abs(pls.coef_)
pls_scores /= pls_scores.sum()
plt.bar(range(1, len(variables) + 1), pls_scores, align='center')
plt.xticks(range(1, len(variables) + 1), variables)
plt.xlabel('variables')
plt.ylabel('PLS scores')
plt.ylim(0, 1)
plt.title('Feature importance')

3.多数据集交叉验证:

当PLS模型应用于多领域分析时,常常需要每个领域数据的交叉验证结果。可以通过设置新的交叉验证函数,最终得到所有领域的交叉验证结果。

from sklearn.model_selection import LeaveOneGroupOut
logo = LeaveOneGroupOut()
pls = PLSRegression()
n_components = np.arange(1, 10)
pls_grid_search = GridSearchCV(pls, [{'n_components': n_components}], cv=logo.split(X, Y, groups))
pls_grid_search.fit(X, Y)
best_n_components = pls_grid_search.best_params_['n_components']

上述代码中的 LeaveOneGroupOut() 函数可以将数据集划分为 N 个互补的样本组。然后,可以使用 GridSearchCV() 函数搜索最佳参数组合。

总结

PLS模型是一种高效的多维数据分析工具,尤其适用于处理高维数据问题。在本文中,我们对PLS基础模型、高级模型以及一些实用技巧进行了全面介绍,并提供了一些Python代码示例。我们希望这些例子可以为您提供足够的参考,从而更好地理解PLS模型。

PLS模型:从基本模型到高级应用技巧的全面介绍

2023-05-22
java基础知识学习笔记一,Java基础笔记

2022-11-21
印象笔记记录java学习(Java成长笔记)

2022-11-12
js高级程序设计笔记14(js高级程序设计笔记14页)

本文目录一览: 1、JavaScript高级程序设计 该怎么看 2、JavaScript学习笔记之数组基本操作示例 3、JS中有关sort以及return的问题 JavaScript高级程序设计 该怎

2023-12-08
golang模型,golang 模型

2022-11-27
python基础学习整理笔记,Python课堂笔记

2022-11-21
PLS回归

2023-05-20
python技巧笔记(python自学笔记)

2022-11-12
重学java笔记,java笔记总结

2022-11-23
python的用法笔记本(笔记本学python)

2022-11-16
数据库的笔记mysql,数据库管理系统笔记

2022-11-24
cesiumjs模型,cesium 模型格式

本文目录一览: 1、Cesiumjs可以加载倾斜摄影的OSGB数据吗 2、Cesium 3Dtiles模型多边形裁剪简单整理 3、Cesium的扩展工具包-EarthSDK使用指南1 4、影像加载篇:

2023-12-08
python课堂整理32(python笔记全)

2022-11-12
javascript一句话笔记,javascript基本语句

2022-11-16
二级c语言操作题技巧,二级c语言程序题技巧

2022-11-23
提高应用界面层次感的技巧

2023-05-14
java学习的一些基础笔记(java初学笔记)

2022-11-14
使用WPF技术打造高端界面——从入门到实战技巧

2023-05-18
每日java学习笔记(java高手笔记)

2022-11-15
我的ipynb笔记本

2023-05-10