一、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模型。