Introducción al Machine Learning con MATLAB. Erik Cuevas Jiménez
el siguiente ejemplo, se tomará la tabla de datos D1 que se definió en el algoritmo 1.2, donde la inspección de los datos que contiene la tabla D1 se observa en la figura 1.4. Para el siguiente ejemplo, se utilizará la función rmmissing para eliminar las observaciones con características faltantes de la tabla D1.
Figura 1.4. Inspección de datos correspondientes a la tabla D1.
Como se puede observar, la tabla de datos D1 contiene una serie de valores faltantes en diferentes filas. La última observación es la única que no contiene valores faltantes. El ejemplo consiste en remover todas las observaciones o filas que contengan, al menos, un valor faltante; por lo tanto, cabe esperar que solo la última fila sea retornada como resultado en la variable R. Esta función tiene la siguiente sintaxis:
R = rmmissing(D1)
La ejecución de la función rmmissing con el argumento D1 entregará el resultado que se muestra en la figura 1.5.
Figura 1.5. Resultado de eliminar las instancias con valores faltantes en la tabla D1.
Tratamiento de datos atípicos
Los datos atípicos son los valores extremos que se presentan en ciertas observaciones; generalmente, es necesario tratarlos, ya sea eliminándolos o transformándolos. La función isoutlier de MATLAB toma un argumento de entrada, ya sea una tabla, matriz o vector D. Esta función devuelve una matriz o vector lógico AD, cuyos elementos verdaderos corresponden a la detección de valores atípicos. Esta función tiene la siguiente sintaxis:
AD = isoutlier(D)
Por defecto, se considera que un valor es atípico cuando se encuentra alejado a más de tres desviaciones absolutas de medianas (DAM) escaladas. Si D es una matriz o tabla, entonces isoutlier opera en cada columna por separado.
En el presente ejemplo se eliminarán los valores atípicos encontrados en las observaciones VD. Se parte del vector de observaciones VD, que contiene los valores atípicos. La función isoutlier detecta qué elementos son valores atípicos, dado el criterio DAM, y los guarda en AD. Las observaciones atípicas se eliminarán del vector de observaciones usando la siguiente expresión:
VD(AD)=[]
Lo que realiza esta expresión es eliminar las posiciones correspondientes a los valores de verdadero de AD. El ejemplo completo se presenta a continuación en el algoritmo 1.3:
% Autores: Erik Cuevas, Omar Avalos, Arturo Valdivia y Primitivo Díaz
% Se define un vector de datos
VD = [59 58 48 51 55 91 64 63 50 95];
% Se procesa el vector DS para la detección de valores atípicos
[AD] = isoutlier(VD);
% Se eliminan los valores atípicos
VD(AD)=[]
VD = 59 58 48 51 55 64 63 50
Cuando se cuenta con suficientes observaciones es posible eliminar observaciones con valores atípicos; sin embargo, cuando las observaciones son reducidas, los datos atípicos deben ser transformados para evitar reducir el conjunto de observaciones. Dentro del entorno de MATLAB, se puede encontrar la función filloutliers, la cual toma como argumento a D, que puede ser una tabla, matriz o vector, además de un parámetro llamado 'MetododeLlenado',con el que se especifica qué método se utilizará para sustituir los valores atípicos encontrados bajo el criterio DAM:
[F,Ui,Us,C] = filloutliers(D,'MetododeLlenado');
Con la función filloutliers se buscan los valores atípicos existentes en D bajo el criterio DAM, y se reemplazan los valores atípicos empleando una metodología de llenado que especifica el usuario. A continuación, en la tabla 1.2, se presentan los posibles valores que puede tomar el 'MetododeLlenado'.
Escalar | Llena los datos atípicos con un dato escalar |
'center' | Llena los datos atípicos con el centro del criterio DAM |
'clip' | Llena los datos atípicos con el valor umbral inferior para elementos más pequeños que el umbral inferior determinado por el criterio DAM Llena con el valor de umbral superior para elementos mayores que el límite superior determinado por el criterio DAM |
'previous' | Llena los datos atípicos con el valor anterior no atípico |
'next' | Llena los datos atípicos con el valor siguiente no atípico |
'nearest' | Llena los datos atípicos con el valor más cercano no atípico |
'linear' | Llena los datos atípicos empleando la interpolación lineal de los valores no atípicos vecinos |
'spline' | Llena los datos atípicos empleando la interpolación de spline cúbico por parte de los valores no atípicos vecinos |
'pchip' | Llena los datos atípicos empleando la interpolación cúbica polinomial de los valores no atípicos vecinos |
Tabla 1.2. Posibles valores que toma el método de llenado.
La función filloutliers retornará cuatro valores: F es el vector resultante sin valores atípicos; Ui, el umbral inferior del criterio DAM; Us, el umbral superior del criterio DAM; y C, el centro del criterio DAM, que corresponde a la mediana de los datos.
A continuación, en el algoritmo 1.4, se muestra un ejemplo para rellenar datos atípicos empleando la función filloutliers, donde se aplica el parámetro ‘linear’, para que los datos atípicos sean reemplazados por valores generados de una interpolación lineal de los valores vecinos que no sean atípicos. De forma adicional, se grafican los umbrales del criterio DAM y del centro de las observaciones:
% Autores: Erik Cuevas, Omar Avalos, Arturo Valdivia y Primitivo Díaz
% Vector de observaciones
D = [59 58 48 51 55 101 64 63 50 20];
% Se contabiliza cuántos elementos tiene el vector D
N=numel(D);
% Se define el vector del eje x
x = 1:N;
% Se rellenan los avalores atípicas del vector D
[F,TF,Ui,Us,C] = filloutliers(D,'linear');
% Se grafica de forma comparativa los datos originales contra los
% datos generados por filloutliers del vector D
plot(x,D,x,F,'o',x,Ui*ones(1,N),x,Us*ones(1,N),x,C*ones(1,N))
legend('Datos originales','Datos transformados','Umbral...
inferior','Umbral superior','Centro de los datos')
Algoritmo 1.4. Ejemplo del uso de la función filloutliers en MATLAB.
En