Transforme la array escalada a su forma original en programación R: uso de cálculos matriciales

En la programación R , una array se puede escalar y centrar usando scale()la función. Pero, no hay una función incorporada para transformar la array escalada de nuevo a la array original. En este artículo, aprenderemos a transformar la array escalada nuevamente en la array original usando algunos cálculos simples.

Uso de atributos de array

Los atributos de la array escalada se pueden usar para desescalar la array de nuevo a su array original.

R

# Create matrix
mt <- matrix(c(1:20), ncol = 5)
  
# Print original matrix
cat("Original matrix:\n")
print(mt)
  
# Scale the matrix
scaled.mt <- scale(mt)
  
# Print Scaled matrix
cat("Scaled matrix:\n")
print(scaled.mt)
  
# Unscale the matrix
unscaled.mt <- t(apply(scaled.mt, 1, 
                function(r) r * attr(scaled.mt, 'scaled:scale') + 
                                attr(scaled.mt, 'scaled:center')))
  
# Print Unscaled matrix
cat("Unscaled matrix:\n")
print(unscaled.mt)

Producción:

Original matrix:
     [, 1] [, 2] [, 3] [, 4] [, 5]
[1, ]    1    5    9   13   17
[2, ]    2    6   10   14   18
[3, ]    3    7   11   15   19
[4, ]    4    8   12   16   20
Scaled matrix:
           [, 1]       [, 2]       [, 3]       [, 4]       [, 5]
[1, ] -1.1618950 -1.1618950 -1.1618950 -1.1618950 -1.1618950
[2, ] -0.3872983 -0.3872983 -0.3872983 -0.3872983 -0.3872983
[3, ]  0.3872983  0.3872983  0.3872983  0.3872983  0.3872983
[4, ]  1.1618950  1.1618950  1.1618950  1.1618950  1.1618950
attr(, "scaled:center")
[1]  2.5  6.5 10.5 14.5 18.5
attr(, "scaled:scale")
[1] 1.290994 1.290994 1.290994 1.290994 1.290994
Unscaled matrix:
     [, 1] [, 2] [, 3] [, 4] [, 5]
[1, ]    1    5    9   13   17
[2, ]    2    6   10   14   18
[3, ]    3    7   11   15   19
[4, ]    4    8   12   16   20

Uso de la media y la desviación estándar

En este ejemplo, quitaremos la escala de la array escalada utilizando la media y la desviación estándar de la array original.

R

# Create matrix
a <- rnorm(5, 5, 2)
b <- rnorm(5, 7, 5) 
  
mt <- cbind(a, b)
  
# get center and scaling values 
m <- apply(df, 2, mean)
s <- apply(df, 2, sd)
  
# Print original matrix
cat("Original matrix:\n")
print(mt)
  
# Scale the matrix
scaled.mt <- scale(mt, center = m, scale = s)
  
# Print Scaled matrix
cat("Scaled matrix:\n")
print(scaled.mt)
  
# Unscale the matrix
unscaled.mt <- t((t(scaled.mt) * s) + m)
  
# Print Unscaled matrix
cat("Unscaled matrix:\n")
print(unscaled.mt)

Producción:

Original matrix:
            a          b
[1, ] 5.552301  1.9865159
[2, ] 3.936486 17.5327829
[3, ] 5.379720 15.0981877
[4, ] 3.546333  0.5230305
[5, ] 5.043194  2.0930855

Scaled matrix:
               a         b
[1, ]  0.01543556 -2.062174
[2, ] -0.69057233  5.252016
[3, ] -0.05997146  4.106591
[4, ] -0.86104456 -2.750713
[5, ] -0.20701146 -2.012036
attr(, "scaled:center")
       a        b 
5.516974 6.369655 
attr(, "scaled:scale")
       a        b 
2.288663 2.125494 

Unscaled matrix:
            a          b
[1, ] 5.552301  1.9865159
[2, ] 3.936486 17.5327829
[3, ] 5.379720 15.0981877
[4, ] 3.546333  0.5230305
[5, ] 5.043194  2.0930855
attr(, "scaled:center")
       a        b 
5.516974 6.369655 
attr(, "scaled:scale")
       a        b 
2.288663 2.125494 

Publicación traducida automáticamente

Artículo escrito por utkarsh_kumar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *