基于Python(sklearn)计算PLS中的VIP值
生活随笔
收集整理的這篇文章主要介紹了
基于Python(sklearn)计算PLS中的VIP值
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
基于Python(sklearn)計算PLS中的VIP值
sklearn中PLS回歸模型并沒有計算VIP值的方法,但VIP又是很重要的篩選變量方法。下附代碼思路與完整代碼,若有錯誤,萬望指正。
1.首先亮明計算公式:
其中:
VIPj:對應于第j個特征的VIP值;
p:預測變量的總數;
A:PLS成分的總數;
R矩陣:A個PLS成分中,每個成分a都對應一套系數wa將X轉換為成分得分,系數矩陣寫作R,大小為p×A;
T矩陣:n個樣本中,每個樣本會計算出A個成分得分,得分矩陣記做T,大小為n×A,ta代表n個樣本的第a個成分的得分列表;
以上有T = XR
qa:
e是殘差,X0和y0代表數據和標簽。
2. 按照sklearn中對屬性的解釋:
該x_rotations_應對應于R矩陣,T矩陣對應于transform后生成的降維數據。
又依據:
有模型中e殘差應為0,即y = yhat = X coef_
3. 組織計算步驟
1)計算qa2:qa = yhat.T ta -> Q2 = q2 = np.square(y.T, T)
2) p = X.shape[1]
3) = np.sum(Q2)
4) R = x_rotations_
4) = R[j, a] / np.linalg.norm(R[:, a])
Ok,萬事具備,開搞。
下付完整代碼
下面為函數調用代碼:
X, Y = np.zero() # 此處應用自己的數據 x_train, x_test, y_train, y_test = model_selection.train_test_split(X, Y, test_size=0.3)# 然后對y進行轉換(啞變量) y_train_labels = pd.get_dummies(y_train)# 建模 n_component = 3 model = PLSRegression(n_components=n_component) model.fit(x_train, y_train_labels)# x_test_trans = model.transform(x_test) VIPs = compute_VIP(x_test, y_test, model.x_rotations_, x_test_trans, n_component) plt.scatter(np.arange(0, X.shape[1]), VIPs) plt.show()總結
以上是生活随笔為你收集整理的基于Python(sklearn)计算PLS中的VIP值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于英语作文AI批改的思考(含定向高分方
- 下一篇: 【UE·Editor篇】UE编辑器开发的