learninspy.utils package

Submódulos

learninspy.utils.data

Módulo destinado al tratamiento de datos, en la construcción y procesamiento de datasets.

Normalización de datos

class learninspy.utils.data.StandardScaler(mean=True, std=True)[fuente]

Bases: object

Estandariza un conjunto de datos, mediante la sustracción de la media y el escalado para tener varianza unitaria. Soporta RDDs usando la clase StandardScaler de pyspark.mllib.

Parámetros:
  • mean – bool, para indicar que se desea centrar conjunto de datos restándole la media.
  • std – bool, para indicar que se desea normalizar conjunto de datos diviendo por el desvío estándar.
>>> train = np.array([[-2.0, 2.3, 0.0], [3.8, 0.0, 1.9]])
>>> test = np.array([[-1.0, 1.3, -0.5], [1.8, 2.2, -1.5]])
>>> standarizer = StandardScaler(mean=True, std=True)
>>> standarizer.fit(train)
>>> standarizer.transform(train)
array([[-0.70710678,  0.70710678, -0.70710678],[ 0.70710678, -0.70710678,  0.70710678]])
>>> standarizer.transform(test)
array([[-0.46327686,  0.09223132, -1.07926824],[ 0.21944693,  0.64561923, -1.82359117]])
fit(dataset)[fuente]

Computa la media y desvio estándar de un conjunto de datos, las cuales se usarán para estandarizar datos.

Parámetros:dataset – pyspark.rdd.RDD o numpy.ndarray o LabeledDataSet
transform(dataset)[fuente]

Aplica estandarización sobre dataset.

Parámetros:dataset – pyspark.rdd.RDD o numpy.ndarray o LabeledDataSet

Conjuntos de datos etiquetados

class learninspy.utils.data.LabeledDataSet[fuente]

Bases: object

Clase base para construcción de datasets.

class learninspy.utils.data.DistributedLabeledDataSet(*args)[fuente]

Bases: learninspy.utils.data.LabeledDataSet

Clase útil para manejar un conjunto etiquetado de datos. Dicho conjunto se almacena como un pyspark.rdd.RDD donde cada entrada posee un pyspark.mllib.regression.LabeledPoint. Se proveen funcionalidades para manejo de archivos, así como para partir el conjunto de datos (e.g. train, valid y test).

Parámetros:data – list o numpy.ndarray o pyspark.rdd.RDD, o bien None si se desea iniciar un conjunto vacío.
collect(unpersist=False)[fuente]

Devuelve el conjunto de datos como lista, mediante la aplicación del método collect() sobre el RDD.

Parámetros:unpersist – bool, indicando si además se quiere llamar al método unpersist() del RDD alojado.
Devuelve:list
features[fuente]

Devuelve sólo las características del conjunto de datos, en el correspondiente orden almacenado.

Devuelve:pyspark.rdd.RDD
labels[fuente]

Devuelve sólo las etiquetas del conjunto de datos, en el correspondiente orden almacenado.

Devuelve:pyspark.rdd.RDD
load_file(path, pos_label=-1)[fuente]

Carga de conjunto de datos desde archivo. El formato aceptado es de archivos de texto, como CSV, donde los valores se separan por un caracter delimitador (configurable en parse_point()).

Parámetros:
  • path – string, indicando la ruta de donde cargar los datos.
  • pos_label – int, posición o n° de elemento de cada línea del archivo, que corresponde al label (por defecto es -1, que corresponde a la última posición).
save_file(path)[fuente]

Guardar conjunto de datos en archivo de texto.

Parámetros:path – string, indicando la ruta en donde se guardan los datos.
shape[fuente]

Devuelve el tamaño del conjunto de datos alojado.

Devuelve:tuple, de cantidad de filas y columnas.
split_data(fractions, seed=123, balanced=False)[fuente]

Particionamiento del conjunto de datos, en base a las proporciones dadas por fractions. Se hace mediante el uso de la función split_data().

Parámetros:
  • fractions – list de floats, indicando la fracción del total a tomar por cada dataset (deben sumar 1).
  • seed – int, semilla a utilizar en el módulo random que hace el split.
  • balanced – bool, si es True se recurre a la función split_balanced().
Devuelve:

list de conjuntos learninspy.utils.data.DistributedLabeledDataSet.

class learninspy.utils.data.LocalLabeledDataSet(*args)[fuente]

Bases: learninspy.utils.data.LabeledDataSet

Clase útil para manejar un conjunto etiquetado de datos. Dicho conjunto se almacena de manera local mediante una lista donde cada entrada posee un pyspark.mllib.regression.LabeledPoint. Se proveen funcionalidades para manejo de archivos, así como para partir el conjunto de datos (e.g. train, valid y test).

Parámetros:data – list o numpy.ndarray o pyspark.rdd.RDD, o bien None si se desea iniciar un conjunto vacío.
collect()[fuente]

Función que retorna el conjunto de datos como una lista. Creada para lograr compatibilidad con DistributedLabeledDataSet.

features[fuente]

Devuelve sólo las características del conjunto de datos, en el correspondiente orden almacenado.

Devuelve:list
labels[fuente]

Devuelve sólo las etiquetas del conjunto de datos, en el correspondiente orden almacenado.

Devuelve:list
load_file(path, pos_label=-1)[fuente]

Carga de conjunto de datos desde archivo. El formato aceptado es de archivos de texto, como CSV, donde los valores se separan por un caracter delimitador (configurable en parse_point()).

Parámetros:
  • path – string, indicando la ruta de donde cargar los datos.
  • pos_label – int, posición o n° de elemento de cada línea del archivo, que corresponde al label (por defecto es -1, que corresponde a la última posición).
save_file(path)[fuente]

Guardar conjunto de datos en archivo de texto.

Advertencia

No se encuentra implementada.

Parámetros:path – string, indicando la ruta en donde se guardan los datos.
shape[fuente]

Devuelve el tamaño del conjunto de datos alojado.

Devuelve:tuple, de cantidad de filas y columnas.
split_data(fractions, seed=123, balanced=False)[fuente]

Particionamiento del conjunto de datos, en base a las proporciones dadas por fractions. Se hace mediante el uso de la función split_data().

Parámetros:
  • fractions – list de floats, indicando la fracción del total a tomar por cada dataset (deben sumar 1).
  • seed – int, semilla a utilizar en el módulo random que hace el split.
  • balanced – bool, si es True se recurre a la función split_balanced().
Devuelve:

list de conjuntos learninspy.utils.data.LocalLabeledDataSet.

Funciones

learninspy.utils.data.label_data(data, labels)[fuente]

Función para etiquetar cada elemento de data con su correspondiente de label, formando una list de elementos pyspark.mllib.regression.LabeledPoint.

Parámetros:
  • data – list o numpy.ndarray, correspondiente a features
  • labels – list o numpy.ndarray, correspondiente a labels
Devuelve:

list

learninspy.utils.data.label_to_vector(label, n_classes)[fuente]

Función para mapear una etiqueta numérica a un vector de dimensión igual a n_classes, con todos sus elementos iguales a 0 excepto el de la posición label.

Parámetros:
  • label – int, pertenenciente al rango [0, n_classes - 1].
  • n_classes – int, correspondiente a la cantidad de clases posibles para label.
Devuelve:

numpy.ndarray

learninspy.utils.data.split_balanced(data, fractions, seed=123)[fuente]

Split data en sets en base a fractions, pero de forma balanceada por clases (fracción aplicada a cada clase).

Nota

Se infiere la cantidad total de clases en base a los labels en “data”.

Parámetros:
  • data – list o numpy.ndarray o pyspark.rdd.RDD.
  • fractions – list de floats, indicando la fracción del total a tomar por cada dataset (deben sumar 1).
  • seed – int, semilla a utilizar en el módulo random que hace el split.
Devuelve:

list de conjuntos (e.g. train, valid, test)

learninspy.utils.data.split_data(data, fractions, seed=123)[fuente]

Split data en sets en base a fractions.

Parámetros:
  • data – list o numpy.ndarray o pyspark.rdd.RDD.
  • fractions – list de floats, indicando la fracción del total a tomar por cada dataset (deben sumar 1).
  • seed – int, semilla a utilizar en el módulo random que hace el split.
Devuelve:

list de conjuntos (e.g. train, valid, test)

learninspy.utils.data.subsample(data, size, balanced=True, seed=123)[fuente]

Muestreo de data, con resultado balanceado por clases si se lo pide.

Parámetros:
  • data – list de LabeledPoint.
  • size – int, tamaño del muestreo.
  • seed – int, semilla del random.
Devuelve:

list de LabeledPoint.

Datos de ejemplo

learninspy.utils.data.load_iris(path=None)[fuente]

Carga del conjunto de datos de Iris.

Parámetros:path – string, ruta al archivo “iris.csv”.
Devuelve:list de LabeledPoints.
learninspy.utils.data.load_mnist(path=None)[fuente]

Carga del conjunto de datos original de MNIST.

Parámetros:path – string, ruta al archivo “mnist.pkl.gz”.
Devuelve:tuple de lists con LabeledPoints, correspondientes a los conjuntos de train, valid y test respectivamente.

learninspy.utils.evaluation

Para conocer el comportamiento del modelo construido en la tarea asignada, se establecen métricas para medir su desempeño y con ello ajustar el mismo para mejorar sus resultados. Dichas métricas son específicas del tipo de problema tratado, por lo que se distinguen para las tareas soportadas en el modelado: clasificación y regresión.

Clasificación

class learninspy.utils.evaluation.ClassificationMetrics(predicted_actual, n_classes)[fuente]

Métricas para evaluar el desempeño de un modelo en problemas de clasificación.

Basadas en la lista de métricas presentadas en la publicación de Sokolova et.al. [sokolova2009systematic].

Parámetros:
  • predicted_actual – list de tuples (predicted, actual)
  • n_classes – int, cantidad de clases tratadas en la tarea de clasificación.
>>> predict = [0, 1, 0, 2, 2, 1]
>>> labels = [0, 1, 1, 2, 1, 0]
>>> metrics = ClassificationMetrics(zip(predict, labels), 3)
>>> metrics.measures.keys()
['Recall', 'F-measure', 'Precision', 'Accuracy']
>>> metrics.accuracy()
0.5
>>> metrics.f_measure()
0.5499999999999999
>>> metrics.precision()
0.5
>>> metrics.evaluate('Recall')
0.611111111111111
>>> metrics.confusion_matrix()
array([[1, 1, 0],
       [1, 1, 1],
       [0, 0, 1]])

Referencias:

[sokolova2009systematic]Sokolova, M., & Lapalme, G. (2009). A systematic analysis of performance measures for classification tasks. Information Processing & Management, 45(4), 427-437.
accuracy(label=None)[fuente]

Calcula la exactitud de la clasificación, dada por la cantidad de aciertos sobre el total.

Siendo C la cantidad de clases, la fórmula para calcular dicho valor es:

ACC=\dfrac{1}{C}\displaystyle\sum\limits_{i=0}^{C-1} \frac{TP_i + TN_i}{TP_i+FN_i+FP_i+TN_i}

Parámetros:label – int entre {0,C} para indicar sobre qué clase evaluar. Si es None se evalúa sobre todas.
Devuelve:float, que puede variar entre 0 (peor) y 1 (mejor).
confusion_matrix()[fuente]

Matriz de confusión resultante, donde las columnas corresponden a los valores de predicted y están ordenadas en forma ascendente por cada clase de actual.

Para realizar un ploteo del resultado, se puede recurrir a la función plot_confusion_matrix().

Devuelve:numpy.ndarray
evaluate(measure='F-measure', **kwargs)[fuente]

Aplica alguna de las medidas implementadas, las cuales se encuentran registradas en el dict self.measures. Esta función resulta práctica para parametrizar fácilmente la medida a utilizar durante el ajuste de un modelo.

Parámetros:
  • measure – string, key de alguna medida implementada.
  • kwargs – se pueden incluir otros parámetros propios de la medida a utilizar (e.g. beta para F-measure, o micro / macro para aquellas que lo soporten).
Devuelve:

float

f_measure(beta=1, label=None, macro=True)[fuente]

Calcula el F-measure de la clasificación, el cual combina las medidas de precision y recall mediante una media armónica de ambos. Dicho balance es ajustado por un parámetro \beta, y un caso muy utilizado de esta medida es el F1-score donde se pondera igual a ambas medidas con \beta = 1.

F(\beta)=(1+\beta)(\dfrac{PR}{\beta^2 P + R}), \quad F_1=\dfrac{2PR}{P + R}

Siendo C la cantidad de clases, las fórmulas para el micro- y macro-averaging son:

F_{\mu}(\beta)=(1+\beta)(\dfrac{P_{\mu}R_{\mu}}{\beta^2 P_{\mu} + R_{\mu}}), \quad
F_{M}(\beta)=(1+\beta)(\dfrac{P_{M}R_{M}}{\beta^2 P_{M} + R_{M}})

Parámetros:
  • beta – float, parámetro \beta que determina el balance entre precision y recall. Si \beta < 1 se prioriza el precision, mientras que con \beta > 1 se favorece al recall.
  • label – int entre {0, C - 1} para indicar sobre qué clase evaluar. Si es None se evalúa sobre todas.
  • macro – bool, que indica cómo calcular el F-measure sobre todas las clases (True para que sea macro y False para que sea micro).
Devuelve:

float, que puede variar entre 0 (peor) y 1 (mejor).

precision(label=None, macro=True)[fuente]

Calcula la precisión de la clasificación, dado por la cantidad de verdaderos positivos (i.e. el número de items correctamente clasificados) dividido por el total de elementos clasificados para una clase dada (i.e. la suma de los verdaderos positivos y falsos positivos, que son los items incorrectamente clasificados de dicha clase). Ello se resume en la siguiente fórmula:

P_i=\dfrac{TP_i}{TP_i+FP_i}

Siendo C la cantidad de clases, las fórmulas para el micro- y macro-averaging son:

P_{\mu}=\dfrac{\sum_{i=0}^{C-1} TP_i}{\sum_i TP_i+FP_i}, \quad
P_{M}=\dfrac{1}{C}\displaystyle\sum\limits_{i=0}^{C-1} \frac{TP_i}{TP_i+FP_i}

Parámetros:
  • label – int entre {0, C - 1} para indicar sobre qué clase evaluar. Si es None se evalúa sobre todas.
  • macro – bool, que indica cómo calcular el precision sobre todas las clases (True para que sea macro y False para que sea micro).
Devuelve:

float, que puede variar entre 0 (peor) y 1 (mejor).

recall(label=None, macro=True)[fuente]

Calcula la exhaustividad de la clasificación, dado por la cantidad de verdaderos positivos (i.e. el número de items correctamente clasificados) dividido por el total de elementos que realmente pertenecen a la clase en cuestión (i.e. la suma de los verdaderos positivos y falsos negativos, que son los items incorrectamente no clasificados como dicha clase). Ello se resume en la siguiente fórmula:

R_i=\dfrac{TP_i}{TP_i+FN_i}

Siendo C la cantidad de clases, las fórmulas para el micro- y macro-averaging son:

R_{\mu}=\dfrac{\sum_{i=0}^{C-1} TP_i}{\sum_i TP_i+FN_i}, \quad
R_{M}=\dfrac{1}{C}\displaystyle\sum\limits_{i=0}^{C-1} \frac{TP_i}{TP_i+FN_i}

Parámetros:
  • label – int entre {0, C - 1} para indicar sobre qué clase evaluar. Si es None se evalúa sobre todas.
  • macro – bool, que indica cómo calcular el recall sobre todas las clases (True para que sea macro y False para que sea micro).
Devuelve:

float, que puede variar entre 0 (peor) y 1 (mejor).

Regresión

class learninspy.utils.evaluation.RegressionMetrics(predicted_actual)[fuente]

Métricas para evaluar el desempeño de un modelo en problemas de regresión.

Parámetros:predicted_actual – list de tuples (predicted, actual)
>>> predict = [0.5, 1.1, 1.5, 2.0, 3.5, 5.2]
>>> labels = [0.5, 1.0, 2.0, 3.0, 4.0, 5.0]
>>> metrics = RegressionMetrics(zip(predict, labels))
>>> metrics.measures.keys()
['ExplVar', 'MSE', 'MAE', 'R2', 'RMSE']
>>> metrics.mae()
2.3000000000000003
>>> metrics.mse()
0.25833333333333336
>>> metrics.evaluate('RMSE')
0.50826502273256358
>>> metrics.r2()
0.8980821917808219
>>> metrics.explained_variance()
0.9297534246575342
evaluate(measure='R2')[fuente]

Aplica alguna de las medidas implementadas, las cuales se encuentran registradas en el dict self.measures. Esta función resulta práctica para parametrizar fácilmente la medida a utilizar durante el ajuste de un modelo.

Parámetros:measure – string, key de alguna medida implementada.
Devuelve:float
explained_variance()[fuente]

Se calcula la varianza explicada en la predicción sobre los valores reales, tal que:

ExpVar=1-\dfrac{Var(actual - predicted)}{Var(actual)}

Devuelve:float, que puede variar entre 0 (peor) y 1 (mejor).
mae()[fuente]

Se calcula el error absoluto medio o Mean Absolute Error (MAE), definido como la suma de las diferencias absolutas entre el valor actual y el que se predijo para cada uno de los N ejemplos, tal que:

MAE=\dfrac{1}{N}\displaystyle\sum\limits_{i}^N |p_i - a_i|

Devuelve:float, que varía entre 0 (mejor) e inf (peor).
mse()[fuente]

Se calcula el error cuadrático medio o Mean Squared Error (MSE), definido como la suma de las diferencias al cuadrado entre el valor actual y el que se predijo para cada uno de los N ejemplos, tal que:

MSE=\dfrac{1}{N}\displaystyle\sum\limits_{i}^N (p_i - a_i)^2

Devuelve:float, que varía entre 0 (mejor) e inf (peor).
r2()[fuente]

Se calcula el coeficiente de determinación o R^2 el cual indica la proporción de varianza de los valores de actual que son explicados por las predicciones en predicted.

Ver más info en Wikipedia: Coefficient of determination.

Devuelve:float, que puede variar entre 0 (peor) y 1 (mejor).
rmae()[fuente]

Retorna la raíz cuadrada del valor de MAE, lo cual es útil para independizarse de una escala a la hora de comparar el desempeño de distintos modelos.

RMAE=\sqrt{MAE}

Devuelve:float, que varía entre 0 (mejor) e inf (peor).
rmse()[fuente]

Retorna la raíz cuadrada del valor de MSE, lo cual es útil para independizarse de una escala a la hora de comparar el desempeño de distintos modelos.

RMSE=\sqrt{MSE}

Devuelve:float, que varía entre 0 (mejor) e inf (peor).

learninspy.utils.feature

Módulo destinado a funcionalidades para realizar extracción de características sobre un conjunto de datos.

class learninspy.utils.feature.PCA(x, threshold_k=0.95)[fuente]

Bases: object

Clase utilizada para aplicar análisis de componentes principales o PCA sobre un conjunto de datos, con lo cual se proyecta cada uno de sus puntos o vectores en un espacio de menor dimensión.

Ver más info en Wikipedia: Principal component analysis.

Parámetros:
  • x – list de lists, o instancia de LabeledDataSet.
  • threshold_k – float, umbral de varianza máxima a retener sobre los datoss en caso de que no se indique la dimensión k final.
>>> from learninspy.utils.data import load_iris
>>> data = load_iris()
>>> features = map(lambda lp: lp.features, data)
>>> pca = PCA(features, threshold_k=0.99)
>>> pca.k  # K óptima determinada por la varianza cubierta el threshold_k
2
>>> transformed = pca.transform(k=3)
>>> print len(transformed[0])
3
transform(k=None, data=None, standarize=False, whitening=True)[fuente]

Transformación de datos mediante PCA hacia una dimensión k.

Parámetros:
  • k – int, si es None se utiliza el k óptimo calculado por la clase.
  • data – numpy.ndarray, o instancia de LabeledDataSet. Si es None, se aplica sobre los datos utilizados inicialmente para el ajuste.
  • standarize – bool, si es True se dividen los datos por su desvío estándar (std).
  • whitening – bool, si es True se aplica el proceso de whitening (ver más información en Wikipedia).
Devuelve:

numpy.ndarray, con los vectores transformados.

learninspy.utils.fileio

Módulo destinado al tratamiento de archivos y parseo de datos, y además se provee el logger utilizado por Learninspy en su ejecución.

learninspy.utils.fileio.get_logger(name='learninspy', level=20)[fuente]

Función para obtener el logger de Learninspy.

Parámetros:
  • name – string
  • level – instancias del logging de Python (e.g. logging.INFO, logging.DEBUG)
Devuelve:

logging.Logger

learninspy.utils.fileio.is_text_file(path)[fuente]

Función utilizada para reconocer si un archivo es probablemente de texto o del tipo binario.

Parámetros:path – string, path al archivo a analizar.
Devuelve:bool. True si es un archivo de texto, False si es binario.
learninspy.utils.fileio.load_file_local(path, pos_label=-1)[fuente]

Carga de un archivo de datos en forma local.

Parámetros:
  • path – string, path al archivo.
  • pos_label – int, posición donde se ubica el label para cada línea. Si es -1, se indica la última posición.
Devuelve:

list de LabeledPoints.

learninspy.utils.fileio.load_file_spark(path, pos_label=-1, delimiter='[ ,|;"]+')[fuente]

Carga de un archivo de datos mediante Apache Spark en RDD.

Parámetros:
  • path – string, path al archivo.
  • pos_label – int, posición donde se ubica el label para cada línea. Si es -1, se indica la última posición.
  • delimiter – string, donde se indican los posibles caracteres delimitadores.
Devuelve:

pyspark.rdd.RDD de LabeledPoints.

learninspy.utils.fileio.parse_point(line, delimiter='[ ,|;"]+')[fuente]

Convierte un string en list, separando elementos mediante la aparición un caracter delimitador entre ellos.

Parámetros:
  • line – string, contenedor de los caracteres que se desea separar.
  • delimiter – string, donde se indican los posibles caracteres delimitadores.
Devuelve:

list con elementos deseados.

learninspy.utils.fileio.save_file_local(data, path, delimiter=', ')[fuente]

Guardar el contenido de un arreglo de listas en un archivo de texto.

Parámetros:
  • data – list de lists
  • path – string, indicando la ruta en donde se guarda el archivo.
learninspy.utils.fileio.save_file_spark(rdd_data, path)[fuente]

Guarda el contenido de un RDD en un archivo de texto.

Parámetros:
  • rdd_datapyspark.rdd.RDD de lists.
  • path – string, indicando la ruta en donde se guarda el archivo.

learninspy.utils.plots

Módulo para llevar a cabo las visualizaciones en Learninspy.

learninspy.utils.plots.plot_activations(params, show=True)[fuente]

Ploteo de las activaciones establecidas para una red neuronal. Se representan como señales 1-D, en un dominio dado.

Nota

Experimental

Parámetros:
  • params – parámetros del tipo NetworkParameters.
  • show – bool, para indicar si se debe imprimir inmediatamente en pantalla mediante matplotlib.pyplot.show()
learninspy.utils.plots.plot_autoencoders(network, show=True)[fuente]

Ploteo de la representación latente un StackedAutoencoder dado.

Nota

Experimental

Parámetros:
  • network – red neuronal, del tipo StackedAutoencoder.
  • show – bool, para indicar si se debe imprimir inmediatamente en pantalla mediante matplotlib.pyplot.show()
learninspy.utils.plots.plot_confusion_matrix(matrix, show=True)[fuente]

Ploteo de una matrix de confusión, realizada mediante la función confusion_matrix().

Parámetros:matrix – numpy.array
learninspy.utils.plots.plot_fitting(network, show=True)[fuente]

Ploteo del ajuste obtenido en el entrenamiento de un modelo, utilizando la información almacenada en dicha instancia.

Parámetros:
  • network – red neuronal del tipo NeuralNetwork.
  • show – bool, para indicar si se debe imprimir inmediatamente en pantalla mediante matplotlib.pyplot.show()
learninspy.utils.plots.plot_matrix(matrix, ax=None, values=True, show=True)[fuente]

Ploteo de un arreglo 2-D.

Parámetros:
  • matrix – numpy.array o list, arreglo a graficar.
  • ax – matplotlib.axes.Axes donde se debe plotear. Si es None, se crea una instancia de ello.
  • values – bool, para indicar si se desea imprimir en cada celda el valor correspondiente.
  • show – bool, para indicar si se debe imprimir inmediatamente en pantalla mediante matplotlib.pyplot.show().
learninspy.utils.plots.plot_neurons(network, show=True)[fuente]

Ploteo de la representación latente de una Red Neuronal. .. note:: Experimental

Parámetros:
  • network – red neuronal del tipo NeuralNetwork.
  • show – bool, para indicar si se debe imprimir inmediatamente en pantalla mediante matplotlib.pyplot.show()

Contenidos del módulo