在 R 中,有一个“vip”包,它接受一个拟合的 PLSDA 模型并输出特征的 vip 分数。我正在尝试在 Python 中找到相应的函数。我使用了 Github https://github.com/scikit-learn/scikit-learn/issues/7050上的以下函数:
def vip(x, y, model):
t = model.x_scores_
w = model.x_weights_
q = model.y_loadings_
m, p = df1.iloc[:, 1:].shape
_, h = t.shape
vips = np.zeros((p,))
s = np.diag(t.T @ t @ q.T @ q).reshape(h, -1)
total_s = np.sum(s)
for i in range(p):
weight = np.array([ (w[i,j] / np.linalg.norm(w[:,j]))**2 for j in range(h) ])
vips[i] = np.sqrt(p*(s.T @ weight)/total_s)
return vips
但是,vip 包和上述功能没有给我与 R vip 包相同的值。我不熟悉如何计算 PLSDA 的 vip 分数。我试图通读 vip 包源代码以找到他们进行数学运算的代码片段,但没有成功。如果有人可以帮助我完成数学并解释为什么这两个不同的函数会给出两个不同的结果。我会很感激!提前致谢!