18 votos

¿Cómo utilizar la SVD para reducir el número de columnas (características) de la matriz de datos?

Mis datos originales tienen muchas más columnas (características) que filas (usuarios). Estoy intentando reducir las características de mi SVD (necesito todas las filas). Encontré un método para hacerlo en un libro llamado "Machine Learning in Action", pero no creo que funcione para los datos que estoy utilizando.

El método es el siguiente. Definir SVD como $$A = USV^\top.$$

Establezca un umbral de optimización (por ejemplo, 90%). Calcular la suma total de los cuadrados de la diagonal. $S$ matriz. Calcula cuántos $S$ valores necesarios para alcanzar el 90% de la suma total de cuadrados. Así que si resulta ser 100 $S$ valores, entonces tomaría las 100 primeras columnas del $U$ las 100 primeras filas de la matriz $V^\top$ y una matriz $100\times 100$ matriz cuadrada de la $S$ matriz. A continuación, calcularía $A = USV^\top$ utilizando las matrices reducidas.

Sin embargo, este método no tiene como objetivo las columnas de mis datos originales, ya que las dimensiones de los datos resultantes $A$ matriz son los mismos que antes. ¿Cómo puedo orientar las columnas de mi matriz original?

29voto

zowens Puntos 1417

Lo que escribió @davidhigh es correcto: si multiplicas versiones reducidas de $\mathbf U_\mathrm{r}$ , $\mathbf S_\mathrm{r}$ y $\mathbf V_\mathrm{r}$ como describes en tu pregunta, entonces obtendrás una matriz $$\tilde{ \mathbf A}=\mathbf U_\mathrm{r}\mathbf S_\mathrm{r}\mathbf V_\mathrm{r}^\top$$ que tiene exactamente las mismas dimensiones que antes, pero tiene un rango reducido .

Sin embargo, lo que @davidhigh no añadió es que se puede obtener lo que se desea multiplicando versiones reducidas de $\mathbf U_\mathrm{r}$ y $\mathbf S_\mathrm{r}$ únicamente, es decir, calcular $$\mathbf B=\mathbf U_\mathrm{r}\mathbf S_\mathrm{r}.$$ Esta matriz sólo tiene (en su ejemplo) $100$ columnas, pero el mismo número de filas que $\mathbf A$ . Matriz $\mathbf V$ se utiliza únicamente para mapear los datos de este espacio reducido de 100 dimensiones a su espacio original de $p$ -espacio dimensional. Si no necesita volver a mapearlo, simplemente deje $\mathbf V$ fuera, y listo.

Por cierto, las columnas de la matriz $\mathbf B$ contendrá lo que se denomina componentes principales de sus datos.

11voto

davidhigh Puntos 648

Parece que no eres del todo consciente de lo que hace un SVD. Como has escrito, descompone una matriz $\mathbf A$ según

$$\mathbf A = \mathbf U \mathbf S \mathbf V^T,$$

Lee los detalles sobre las dimensiones y propiedades de las matrices implicadas, por ejemplo ici .

Ahora, la reducción de la dimensionalidad se realiza despreciando los pequeños valores singulares en la matriz diagonal $\mathbf S$ . Independientemente de cuántos valores singulares se pongan aproximadamente a cero, la matriz resultante $\mathbf A$ conserva siempre su dimensión original. En concreto, no se eliminan filas ni columnas.

Por consiguiente, la característica de reducción de la dimensionalidad sólo se aprovecha en la versión descompuesta. Consideremos, por ejemplo, una matriz muy grande con rango 1, es decir, los vectores columna/fila abarcan sólo un subespacio unidimensional. Para esta matriz, sólo obtendrá un valor singular distinto de cero. Ahora, en lugar de almacenar esta gran matriz también se pueden almacenar dos vectores y un número real, lo que corresponde a una reducción de un orden de magnitud.

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