一、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模型。
原創文章,作者:ZHMPK,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/368046.html