szcf-weiya / ESL-CN

The Elements of Statistical Learning (ESL)的中文翻译、代码实现及其习题解答。
https://esl.hohoweiya.xyz
GNU General Public License v3.0
2.4k stars 588 forks source link

Ex. 3.22 #175

Closed szcf-weiya closed 2 years ago

szcf-weiya commented 5 years ago

image

szcf-weiya commented 5 years ago

Actually, I do not use the estimation of $\Sigma$ in my solution to #174 Ex. 3.21, thus the result doesn't change. PNG image

bxdd commented 3 years ago

@szcf-weiya Hi,您好。我认为您在Ex 3.21中使用了$\Sigma$的估计 image 在这里使用了${Y^*}^TX = \Sigma^{-1/2}Y^TX=(Y^TY)^{-1/2} Y^TX$。

szcf-weiya commented 3 years ago

@szcf-weiya Hi,您好。我认为您在Ex 3.21中使用了$\Sigma$的估计 image 在这里使用了${Y^*}^TX = \Sigma^{-1/2}Y^TX=(Y^TY)^{-1/2} Y^TX$。

谢谢!你说的有道理,有空的时候我试着再算算。或者如果你已经算出来了,欢迎分享~

szcf-weiya commented 3 years ago

@bxdd 仔细检查的一下,我认为我之前的论断

Actually, I do not use the estimation of $\Sigma$ in my solution to #174 Ex. 3.21, thus the result doesn't change.

应该还是没问题的,不过此处隐含了一个条件。 我想你是从 https://github.com/szcf-weiya/ESL-CN/issues/172 认为我用了 Y^TY/N 作为 Sigma_YY 的估计(我上条回复是这样以为的),但其实 #172 本身也暗含着 Sigma_YY 的估计为 Y^TY/N image 题中更换 Sigma 的估计,我认为也包括更换在 CCA 中使用的 Sigma 的估计,所以如果在 CCA 中并不显式地将 Sigma 估计写出来,而且在本题(或者 #174)中也不显式地将其写出来,则整体来看就是没用到 Sigma 的估计。换句话说,CCA 并不局限于用 Y^TY/N 来估计 Sigma_YY, 更一般的表达形式可以参见 https://en.wikipedia.org/wiki/Canonical_correlation

bxdd commented 3 years ago

@szcf-weiya 您好,我大概能理解您说的含义,但是我还没有来得及仔细看这个wiki连接里的内容。如果是这样的话,那这里是不是要说明,使用新的 Sigma_YY 估计后,U_m^仍然和Y^TY/N估计的一致呢?或者换一个问法,#172 的 U_m^和 #174 的 U_m^*是不是同一个?

szcf-weiya commented 3 years ago

@bxdd U^ 和 V^ 是对 image 的 SVD 分解,如果方差的估计换了,自然结果也会不一样。而你说的 #172 和 #174 题目中都点明是用的 Y^TY/N 估计,所以两者是一样的。

bxdd commented 3 years ago

@szcf-weiya 我的意思是,是否可以证明:即使方差的估计换了,U^*仍然不变?因为U^的定义只在 #172 里面有。 换个说法,您的意思是:这里U^仅仅代表的 image 而而不是 #172 里面的定义,而我的疑问是:由于 U^* 只在 #172 的定义,书中和习题中并没有图片中的定义,若使用 #172 定义的 U^* 是否也成立?

szcf-weiya commented 3 years ago

@bxdd 不太可能不变吧,可以简单写个代码模拟下。

library(mvtnorm)
library(expm)
set.seed(123)
K = 3; p = 5; N = 100;
X = matrix(runif(p*N), nrow = N)
X = scale(X, scale = F)
B = matrix(runif(p*K), nrow = p)
Y = X %*% B + rmvnorm(N, sigma = diag(K))
Y = scale(Y, scale = F)
Bhat = solve(t(X) %*% X) %*% t(X) %*% Y
Yhat = X %*% Bhat
SigmaYY1 = t(Y) %*% Y / N
SigmaYY2 = t(Y - Yhat) %*% (Y - Yhat) / (N - p*K)
SigmaXX = t(X) %*% X / N
SigmaYX = t(Y) %*% X / N
Mright = SigmaYX %*% solve(sqrtm(SigmaXX))
M1 = solve(sqrtm(SigmaYY1)) %*% Mright
M2 = solve(sqrtm(SigmaYY2)) %*% Mright

> svd(M1)$u
           [,1]       [,2]       [,3]
[1,] -0.4676339  0.2085129 -0.8589767
[2,] -0.8264763 -0.4477562  0.3412496
[3,] -0.3134572  0.8695037  0.3817170
> svd(M2)$u
           [,1]       [,2]       [,3]
[1,] -0.4707805  0.2073462 -0.8575391
[2,] -0.8242935 -0.4498569  0.3437572
[3,] -0.3144932  0.8686981  0.3826980

当然在这个例子中差距不是很大,毕竟这两种 Sigma_YY 的估计也很接近。

而且可以这样想,如果换了 Sigma_YY 的估计,为什么求 CCA 时做 SVD 分解还用 Y'Y/N 的估计,毕竟最初的问题是求 reduced-rank regression,SVD 分解只是中间一步。而且仔细看 Ex. 3.21 的问题,是让证明 image

“题干”中只说明 U 是左典则向量,它等于 Sigma^{-1/2} U^*,(一般形式见上面分享的 wiki) image 其中 c, d 分别为 的左、右奇异向量。 如果换了 Sigma 的估计,其典则向量的计算自然会变,但是其解为典则向量的这一结论不会变。