Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Uso de MapReduce para calcular la covarianza y las cantidades relacionadas

Este ejemplo muestra cómo calcular la media y la covarianza para varias variables en un conjunto de datos grande usando.mapreduce A continuación, utiliza la covarianza para realizar varios cálculos de seguimiento que no requieren otra iteración en todo el conjunto de datos.

Preparar datos

Cree un almacén de datos utilizando el conjunto de información.airlinesmall.csv Este conjunto de datos de 12 megabyte contiene 29 columnas de información de vuelo para varias aerolíneas, incluidas las horas de llegada y salida. En este ejemplo, seleccione (tiempo total de vuelo), (distancia total de vuelo), (retardo de salida del vuelo) y (retraso de llegada del vuelo) como variables de interés.ActualElapsedTimeDistanceDepDelayArrDelay

ds = datastore('airlinesmall.csv', 'TreatAsMissing', 'NA'); ds.SelectedVariableNames = {'ActualElapsedTime', 'Distance', ...                                      'DepDelay', 'ArrDelay'}; 

El almacén de datos trata los valores como ausentes y reemplaza los valores que faltan por valores predeterminados.'NA'NaN Además, la propiedad le permite trabajar solo con las variables de interés seleccionadas, que puede verificar utilizando.SelectedVariableNamespreview

preview(ds) 
 ans =    8x4 table      ActualElapsedTime    Distance    DepDelay    ArrDelay     _________________    ________    ________    ________              53             308          12           8                63             296           1           8                83             480          20          21                59             296          12          13                77             373          -1           4                61             308          63          59                84             447          -2           3               155             954          -1          11     

Ejecute MapReduce

La función requiere una función de mapa y una función de reducción como entradas.mapreduce El asignador recibe fragmentos de datos y genera resultados intermedios. El reductor Lee los resultados intermedios y produce un resultado final.

En este ejemplo, el asignador calcula el recuento, la media y la covarianza de las variables de cada fragmento de datos en el almacén,.ds A continuación, el asignador almacena los valores calculados para cada fragmento como un par clave-valor intermedio que consta de una sola clave con una matriz de celdas que contiene los tres valores calculados.

Mostrar el archivo de función de mapa.

 function covarianceMapper(t,~,intermKVStore) %covarianceMapper Mapper function for mapreduce to compute covariance  % Copyright 2014 The MathWorks, Inc.  % Get data from input table and remove any rows with missing values x = t{:,:}; x = x(~any(isnan(x),2),:);  % Compute and save the count, mean, and covariance n = size(x,1); m = mean(x,1); c = cov(x,1);  % Store these as a single item in the intermediate key/value store add(intermKVStore,'key',{n m c}) end  

El reductor combina los resultados intermedios de cada fragmento para obtener el recuento, la media y la covarianza de cada variable de interés de todo el conjunto de datos. El reductor almacena los pares de clave-valor finales para las claves, y con los valores correspondientes para cada variable.'count''mean''cov'

Visualice el archivo de función de reducción.

 function covarianceReducer(~,intermValIter,outKVStore) %covarianceReducer Reducer function for mapreduce to compute covariance  % Copyright 2014 The MathWorks, Inc.  % We will combine results computed in the mapper for different chunks of % the data, updating the count, mean, and covariance each time we add a new % chunk.  % First, initialize everything to zero (scalar 0 is okay) n1 = 0; % no rows so far m1 = 0; % mean so far c1 = 0; % covariance so far  while hasnext(intermValIter)     % Get the next chunk, and extract the count, mean, and covariance     t = getnext(intermValIter);     n2 = t{1};     m2 = t{2};     c2 = t{3};          % Use weighting formulas to update the values so far     n = n1+n2;                     % new count     m = (n1*m1 + n2*m2) / n;       % new mean          % New covariance is a weighted combination of the two covariance, plus     % additional terms that relate to the difference in means     c1 = (n1*c1 + n2*c2 + n1*(m1-m)'*(m1-m) + n2*(m2-m)'*(m2-m))/ n;          % Store the new mean and count for the next iteration     m1 = m;     n1 = n; end  % Save results in the output key/value store add(outKVStore,'count',n1); add(outKVStore,'mean',m1); add(outKVStore,'cov',c1); end  

Se utiliza para aplicar el mapa y reducir las funciones al almacén de datos,.mapreduceds

outds = mapreduce(ds, @covarianceMapper, @covarianceReducer); 
******************************** *      MAPREDUCE PROGRESS      * ******************************** Map   0% Reduce   0% Map  16% Reduce   0% Map  32% Reduce   0% Map  48% Reduce   0% Map  65% Reduce   0% Map  81% Reduce   0% Map  97% Reduce   0% Map 100% Reduce   0% Map 100% Reduce 100% 

Devuelve un almacén de datos, con archivos en la carpeta actual.mapreduceoutds

Vea los resultados de la llamada utilizando la función en el almacén de datos de salida.mapreducereadall

results = readall(outds) Count = results.Value{1}; MeanVal = results.Value{2}; Covariance = results.Value{3}; 
 results =    3x2 table        Key         Value         _______    ____________      'count'    [    120664]     'mean'     [1x4 double]     'cov'      [4x4 double]  

Calcular matriz de correlación

Los valores de covarianza, media y recuento son útiles para realizar cálculos adicionales. Calcule una matriz de correlación encontrando las desviaciones estándar y normalizándolas a la forma de correlación.

s = sqrt(diag(Covariance)); Correlation = Covariance ./ (s*s') 
 Correlation =      1.0000    0.9666    0.0278    0.0902     0.9666    1.0000    0.0216    0.0013     0.0278    0.0216    1.0000    0.8748     0.0902    0.0013    0.8748    1.0000  

El tiempo transcurrido (primera columna) y la distancia (segunda columna) están altamente correlacionados, ya que.Correlation(2,1) = 0.9666 El retardo de salida (tercera columna) y el retardo de llegada (cuarta columna) también están altamente correlacionados, ya que.Correlation(4,3) = 0.8748

Calcular coeficientes de regresión

Calcule algunos coeficientes de regresión para predecir el retardo de llegada, utilizando las otras tres variables como predictores.ArrDelay

slopes = Covariance(1:3,1:3)\Covariance(1:3,4); intercept = MeanVal(4) - MeanVal(1:3)*slopes; b = table([intercept; slopes], 'VariableNames', {'Estimate'}, ...     'RowNames', {'Intercept','ActualElapsedTime','Distance','DepDelay'}) 
 b =    4x1 table                           Estimate                           _________      Intercept              -19.912     ActualElapsedTime      0.56278     Distance             -0.068721     DepDelay               0.94689  

Realice el PCA

Se utiliza para realizar el PCA (análisis de componentes principales).svd PCA es una técnica para encontrar un resumen dimensional inferior de un conjunto de datos. El siguiente cálculo es una versión simplificada de PCA, pero hay más opciones disponibles en las funciones de estadísticas y machine learning Toolbox™.pcapcacov

Usted puede llevar a cabo el PCA usando la covarianza o la correlación. En este caso, utilice la correlación ya que la diferencia de escala de las variables es grande. Los dos primeros componentes capturan la mayor parte de la varianza.

[~,latent,pcacoef] = svd(Correlation); latent = diag(latent) 
 latent =      2.0052     1.8376     0.1407     0.0164  

Visualice la matriz de coeficiente. Cada columna de la matriz de coeficientes describe cómo un componente se define como una combinación lineal de las variables originales estandarizadas. El primer componente es en su mayoría un promedio de las dos primeras variables, con alguna contribución adicional de las otras variables. Del mismo modo, el segundo componente es en su mayoría un promedio de las dos últimas variables.

pcacoef 
 pcacoef =     -0.6291    0.3222   -0.2444   -0.6638    -0.6125    0.3548    0.2591    0.6572    -0.3313   -0.6244    0.6673   -0.2348    -0.3455   -0.6168   -0.6541    0.2689  

Consulte también

|

Temas relacionados