¿Cómo normalizar y estandarizar datos en R?

En este artículo, veremos las diversas técnicas para escalar datos, normalización mín.-máx., estandarización de puntuación Z y transformación de registros en el lenguaje de programación R.

Cargando paquetes y conjuntos de datos requeridos:

Instalemos y carguemos los paquetes necesarios. Y también cree un marco de datos como un conjunto de datos de muestra.

R

# load packages and data
install.packages("caret")
library(caret)
 
# creating a dataset
data = data.frame(var1=c(120, 345, 145, 122, 596, 285, 211),
                  var2=c(10, 15, 45, 22, 53, 28, 12),
                  var3=c(-34, 0.05, 0.15, 0.12, -6, 0.85, 0.11))
 
data

Salida :

Resumen de datos:

Veamos el resumen de los datos antes de escalarlo. Como podemos ver en el resultado, cada variable/característica tiene un rango de valores diferente (que se puede inferir de los valores mínimo y máximo) y, por lo tanto, necesita escalarse para llevar los valores dentro de un rango fijo.

R

# import the library
library(caret)
 
# creating the dataset
data = data.frame(var1 = c(120,345,145,122,596,285,211),
           var2 = c(10,15,45,22,53,28,12),
           var3 = c(-34,0.05,0.15,0.12,-6,0.85,0.11))
 
# summary of data
summary(data)

Salida :

Normalización:

Método 1: Normalización Min-Max

Esta técnica vuelve a escalar los valores para que estén en el rango entre 0 y 1. Además, los datos terminan con desviaciones estándar más pequeñas, lo que puede suprimir el efecto de los valores atípicos.

Ejemplo : Escribamos una función personalizada para implementar la Normalización Min-Max. 

 Normalización mín-máx

Esta es la fórmula para la Normalización Min-Max. Usemos esta fórmula y creemos una función personalizada definida por el usuario, minMax, que toma un valor a la vez y calcula el valor escalado de modo que esté entre 0 y 1. Aquí new_max(A) es 1 y new_min(A) es 0 mientras intentamos escalar hacia abajo o hacia arriba los valores en el rango [0,1].

Esto ayuda a manejar bien los valores atípicos y los suprime en general. 

R

# import the library
library(caret)
 
# dataset
data = data.frame(var1 = c(120,345,145,122,596,285,211),
           var2 = c(10,15,45,22,53,28,12),
           var3 = c(-34,0.05,0.15,0.12,-6,0.85,0.11))
 
# custom function to implement min max scaling
minMax <- function(x) {
  (x - min(x)) / (max(x) - min(x))
}
 
#normalise data using custom function
normalisedMydata <- as.data.frame(lapply(data, minMax))
head(normalisedMydata)

Salida :

Ahora verifiquemos si los valores de las 4 columnas están reescalados entre 0 y 1 usando un resumen de los datos (mín y máx son 0 y 1 respectivamente).

R

# checking summary after normalization
summary(normalisedMydata)

Salida :

Ejemplo: uso de una función integrada y un paquete de intercalación para realizar la normalización mín.-máx. 

Aquí, el método, preProcess() toma una tupla con el valor «rango» para implementar el escalado mínimo-máximo y estos datos preprocesados ​​se envían a la función predict() para obtener los datos normalizados finales utilizando el método de escalado mínimo-máximo.  

Sintaxis:

preProcess(x, método = c(“centro”, “escala”), … na.remove = TRUE )

Argumentos:

  • x – una array o marco de datos
  • método: un vector de caracteres que especifica el tipo de procesamiento
  • na.remove: verdadero/falso para especificar la eliminación de valores faltantes

R

# import the library
library(caret)
 
# dataset
data = data.frame(var1 = c(120,345,145,122,596,285,211),
           var2 = c(10,15,45,22,53,28,12),
           var3 = c(-34,0.05,0.15,0.12,-6,0.85,0.11))
 
# preprocess the data
preproc <- preProcess(mydata, method=c("range"))
 
# perform normalization
norm <- predict(preproc, mydata)
head(norm)

Salida :

Esta técnica tiende a centrar los datos reescalados alrededor de la media, pero no maneja muy bien los valores atípicos. Entonces, para abordar esto, optamos por la estandarización.

Método 2: Transformación de registro

No todos los datos de la vida real seguirían una distribución gaussiana ni serían menos sesgados. Entonces, para abordar esta técnica de Log Transformation, se puede usar.

Ejemplo : Uso de la función log( )

Vamos a registrar la transformación de una columna particular var2 en datos y ver su resumen.

Sintaxis:

log(x, base = exp(1))

Argumentos:

  • x – un vector numérico o complejo
  • base: un número positivo o complejo

La función Log( ) toma un vector numérico o un vector complejo de los datos y realiza la transformación de registro.

R

# import the library
library(caret)
 
# dataset
data = data.frame(var1 = c(120,345,145,122,596,285,211),
           var2 = c(10,15,45,22,53,28,12),
           var3 = c(-34,0.05,0.15,0.12,-6,0.85,0.11))
 
# log transform on var2 column of data
logTransformed = log(mydata$var2)
logTransformed

Salida :

Transformación de registros

Estandarización:

La estandarización es una técnica en la que todas las características tienen una media alrededor de cero y una varianza aproximada de la unidad (media = 0 y desviación estándar = 1). Y también se asegura de que los valores atípicos se ponderen más que otros valores.

Ejemplo : uso de la función de escala estándar ( )

Función:

scale(x, center = TRUE, scale = TRUE)

Argumentos:

  • x – una array numérica (como objeto)
  • centro: ya sea un valor lógico o un vector numérico de longitud igual al número de columnas de x
  • escala: ya sea un valor lógico o un vector numérico de longitud igual al número de columnas de x

La función scale( ) (una parte del paquete de intercalación en R) toma un objeto de array o marco de datos y escala los puntos de datos de modo que la media y la desviación estándar sean 0 y 1 respectivamente.

R

# import the library
library(caret)
 
# dataset
data = data.frame(var1 = c(120,345,145,122,596,285,211),
           var2 = c(10,15,45,22,53,28,12),
           var3 = c(-34,0.05,0.15,0.12,-6,0.85,0.11))
 
# standardize the data using scale() function
standardizedData <- as.data.frame(scale(data))
head(standardizedData)

Salida :

Ejemplo : usar una función incorporada en la biblioteca de intercalación para preprocesar y luego estandarizar los datos.

Aquí el método, preProcess() tomará una tupla con valores «centro» y «escala» para implementar la estandarización. Estos datos preprocesados ​​se envían a predict() para estandarizar los datos de modo que la media sea 0 y la desviación estándar sea 1.

R

# import the library
library(caret)
 
# dataset
data = data.frame(var1 = c(120,345,145,122,596,285,211),
           var2 = c(10,15,45,22,53,28,12),
           var3 = c(-34,0.05,0.15,0.12,-6,0.85,0.11))
 
# using caret lib to preprocess data
preproc1 <- preProcess(data, method=c("center", "scale"))
 
# standardize the preprocessed data
norm1 <- predict(preproc1,data)
head(norm1)

Salida :

Publicación traducida automáticamente

Artículo escrito por saaiswethasret 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 *