1 votos

Búsqueda de la línea de mejor ajuste mediante SVD

Estoy tratando de encontrar la línea de mejor ajuste para (17,4), (-2,26), (11,7) utilizando el concepto de SVD(Singular Value Decomposition).

Mi enfoque es, establecer $A = \begin{bmatrix} 17 & 4\\ -2 & 26\\ 11 & 7 \end{bmatrix}$ y encontrar los valores y vectores propios de $A^TA$ . Al comprobar el determinante de $A^TA-\lambda I$ Tengo $\lambda= 244 \pm \sqrt{37549}$ .

Mi problema es que este $\lambda$ no se siente bien. Además, el uso de $\lambda= 244 + \sqrt{37549}$ Tengo vectores propios $\begin{bmatrix} 0\\0 \end{bmatrix}$ . Creo que algo está mal aquí. ¿Podría darme algún consejo?

1voto

sandipan Puntos 192

En este caso, los puntos de datos no se sitúan alrededor de una línea que pasa por el origen. Si fuera el caso, la solución de ajuste LS sería $Ax=0$ y estaría dado por el primer vector singular (derecho) (es decir, el vector propio dominante de la matriz $A^TA$ ), que sería la solución al problema de optimización para maximizar la proyección $\underset{|v|=1}{max}|Av|=0$ .

Todavía el primer vector singular derecho es el vector propio dominante de $A^TA$ : $[0.2557118, 0.9667531]$ como se puede encontrar con R

> eigen(t(A)%*%A)
eigen() decomposition
$values
[1] 765.599 389.401

$vectors
          [,1]       [,2]
[1,] 0.2557118 -0.9667531
[2,] 0.9667531  0.2557118

que se puede encontrar directamente con SVD:

> svd(A)$v
           [,1]       [,2]
[1,] -0.2557118  0.9667531
[2,] -0.9667531 -0.2557118

Usted obtiene $A^TA = \begin{bmatrix}414 & 93\\ 93 & 741 \end{bmatrix}$ y el polinomio característico $\lambda^2-1155\lambda+298125=0$ , resolviendo que se obtiene el mayor valor propio $\lambda=765.5991$ y la resolución del sistema lineal $\begin{bmatrix}414 & 93\\ 93 & 741 \end{bmatrix}\begin{bmatrix}x_1 \\ x_2\end{bmatrix}=765.5991\begin{bmatrix}x_1 \\ x_2\end{bmatrix}$ , $\implies 93x_2=351.5991x_1$ y $93x_1=24.5991x_2 \implies \frac{x_1}{x_2}\approx 0.2645$ , es decir, el vector propio correspondiente es $\begin{bmatrix}0.2645\\ 1\end{bmatrix}$ normalizando (es decir, dividiendo por $\sqrt{0.2645^2+1^2}=1.034389$ ), obtenemos el vector propio unitario dominante como $\begin{bmatrix}\frac{0.2645}{1.034389}\\ \frac{1}{1.034389}\end{bmatrix}=\begin{bmatrix}0.25571\\ 0.96675\end{bmatrix}$ lo que concuerda con el cálculo mediante los métodos numéricos con R .

Consideremos, por ejemplo, un conjunto diferente de puntos $(\frac{7}{10},\frac{7}{10}), (7,9), (2,\frac{9}{2}$ ), s.t., la matriz $A=\begin{bmatrix}7/10 & 7/10\\ 7&9 \\ 2&9/2 \end{bmatrix}$ . Ahora bien, si queremos que la línea de mejor ajuste pase por el origen (sin tener un intercepto) entonces el vector correspondiente estará en el espacio nulo de $A$ es decir, será una solución de $Ax=0$ la solución de mínimos cuadrados se puede encontrar aproximadamente con la SVD de $A$ como se muestra a continuación:

svd(A)$v[,1]
# [1] -0.5849033 -0.8111030
v <- svd(A)$v
slope <- v[2] / v[1]
# [1] 1.38673

La siguiente figura muestra la línea de mejor ajuste obtenida con SVD:

enter image description here

Esto coincide con el ajuste de regresión lineal por mínimos cuadrados sin intercepción:

lm(y~X+0)$coeff
#       X 
#1.355207 

Ahora, digamos que tenemos los puntos $(17,4), (-2,26), (11,7)$ en cambio, para encontrar la línea de mejor ajuste, necesitamos minimizar $||Ax-b||_2^2$ que se reduce a resolver $Ax=b$ , donde $b \neq 0$ . Aquí tenemos $A=\begin{bmatrix}1 & 17 \\ 1 & -2 \\ 1 & 11 \end{bmatrix}$ y $b=\begin{bmatrix} 4 \\ 26 \\ 7 \end{bmatrix}$ y la solución de mínimos cuadrados viene dada por la ecuación normal (la psuedo inversa) $\hat{\beta}=(A^TA)^{-1}A^Ty$ . Ahora, también podemos utilizar la SVD aquí, con la SVD de $A=U\Sigma V^T$ tenemos $\hat{\beta}=V\Sigma^{-1}U^Ty$ como se muestra a continuación.

 s <- svd(A)
 U <- s$u
 V <- s$v
 V
 #            [,1]        [,2]
 #  [1,] 0.06288448  0.99802081
 #  [2,] 0.99802081 -0.06288448
 S <- s$d
 V%*%solve(diag(S), t(U)%*%y) # LS solution with SVD
 #         [,1]
 #[1,] 22.791519
 #[2,] -1.206714

Coincide con la solución LS obtenida mediante la ecuación normal:

solve(t(A)%*%A, t(A)%*%y) # LS solution with normal equation
          [,1]
[1,] 22.791519
[2,] -1.206714

enter image description here

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X