예제 #1
0
    def evaluate(self, data, predictions=False, measure=None):
        """
        Evalúa el AutoEncoder sobre un conjunto de datos, lo que equivale a medir su desempeño en
        reconstruir dicho conjunto de entrada.

        :param data: list de LabeledPoint o instancia de :class:`~learninspy.utils.data.LabeledDataSet`.
        :param predictions: si es True, retorna las predicciones (salida reconstruida por el AutoEncoder).
        :param measure: string, key de alguna medida implementada en
         :class:`~learninspy.utils.evaluation.RegressionMetrics`.
        :return: resultado de evaluación, y predicciones si se solicita en *predictions*
        """
        if isinstance(data, LabeledDataSet):
            actual = data.features
            if type(data) is DistributedLabeledDataSet:
                predicted = actual.map(lambda f: self.predict(f).matrix.T).collect()  # Notar la transposición de matrix
                actual = actual.collect()
            else:
                predicted = map(lambda f: self.predict(f).matrix.T, actual)
        else:
            actual = map(lambda lp: lp.features, data)
            predicted = map(lambda f: self.predict(f).matrix.T, actual)

        metrics = RegressionMetrics(zip(predicted, actual))
        if measure is None:
            measure = 'R2'
        # Evaluo en base a la medida elegida (key perteneciente al dict 'metrics.measures')
        hits = metrics.evaluate(measure=measure)

        if predictions is True:  # Devuelvo ademas el vector de predicciones
            ret = hits, predicted
        else:
            ret = hits
        return ret
예제 #2
0
    def evaluate(self, data, predictions=False, measure=None):
        """
        Evalúa el AutoEncoder sobre un conjunto de datos, lo que equivale a medir su desempeño en
        reconstruir dicho conjunto de entrada.

        :param data: list de LabeledPoint o instancia de :class:`~learninspy.utils.data.LabeledDataSet`.
        :param predictions: si es True, retorna las predicciones (salida reconstruida por el AutoEncoder).
        :param measure: string, key de alguna medida implementada en
         :class:`~learninspy.utils.evaluation.RegressionMetrics`.
        :return: resultado de evaluación, y predicciones si se solicita en *predictions*
        """
        if isinstance(data, LabeledDataSet):
            actual = data.features
            if type(data) is DistributedLabeledDataSet:
                predicted = actual.map(lambda f: self.predict(
                    f).matrix.T).collect()  # Notar la transposición de matrix
                actual = actual.collect()
            else:
                predicted = map(lambda f: self.predict(f).matrix.T, actual)
        else:
            actual = map(lambda lp: lp.features, data)
            predicted = map(lambda f: self.predict(f).matrix.T, actual)

        metrics = RegressionMetrics(zip(predicted, actual))
        if measure is None:
            measure = 'R2'
        # Evaluo en base a la medida elegida (key perteneciente al dict 'metrics.measures')
        hits = metrics.evaluate(measure=measure)

        if predictions is True:  # Devuelvo ademas el vector de predicciones
            ret = hits, predicted
        else:
            ret = hits
        return ret
예제 #3
0
def test_regression_metrics():
    logger.info("Testeando métricas de evaluación para regresión...")
    # Ejemplos para testear regresión
    dim = 100  # Tamaño del muestreo
    x = np.linspace(-4, 4, dim)  # Eje x
    clean = np.sinc(x)  # Función sinc (labels)
    np.random.seed(123)
    noise = np.random.uniform(0, 0.1, dim)  # Ruido para ensuciar la sinc (error en la predicción)
    signal = clean + noise  # Señal resultante del ruido aditivo (predict)
    metrics = RegressionMetrics(zip(signal, clean))

    assert np.allclose(metrics.r2(), 0.9708194315829859, rtol=1e-4)
    assert np.allclose(metrics.explained_variance(), 0.9943620888461356, rtol=1e-4)
    assert np.allclose(metrics.mse(), 0.0031164269743473839, rtol=1e-4)
    assert np.allclose(metrics.rmse(), 0.0558249673027, rtol=1e-4)
    assert np.allclose(metrics.mae(), 0.0501428880, rtol=1e-4)
    assert np.allclose(metrics.rmae(), 0.2239260770, rtol=1e-4)
    logger.info("OK")
예제 #4
0
    def evaluate(self, data, predictions=False, measure=None):
        """
        Evaluación de un conjunto de datos etiquetados, midiendo la salida real o de predicción
        contra la esperada mediante una métrica definida en base a la tarea asignada para la red.

        :param data: instancia de :class:`.LabeledDataSet` o list de *pyspark.mllib.regression.LabeledPoint*
        :param predictions: bool, si es True se deben retornar también las predicciones hechas sobre *data*
        :param measure: string, key de alguna medida implementada en alguna de las métricas
         diponibles en :mod:`~learninspy.utils.evaluation`.
        :return: float, resultado de aplicar la medida dada por *measure*. Si *predictions* es True se retorna
         además una lista de *numpy.ndarray* (predicciones).
        """
        if isinstance(data, LabeledDataSet):
            actual = data.labels
            if type(data) is DistributedLabeledDataSet:
                actual = actual.collect()
                predicted = data.features.map(lambda f: self.predict(f).matrix).collect()
            else:
                predicted = map(lambda f: self.predict(f).matrix, data.features)
        else:
            actual = map(lambda lp: lp.label, data)
            predicted = map(lambda lp: self.predict(lp.features).matrix, data)
        if self.params.classification is True:
            # En problemas de clasificacion, se determina la prediccion por la unidad de softmax que predomina
            predicted = map(lambda p: float(np.argmax(p)), predicted)
            n_classes = self.params.units_layers[-1]  # La cant de unidades de la ult capa define la cant de clases
            metrics = ClassificationMetrics(zip(predicted, actual), n_classes=n_classes)
            if measure is None:
                measure = 'F-measure'
        else:
            metrics = RegressionMetrics(zip(predicted, actual))
            if measure is None:
                measure = 'R2'
        # Evaluo en base a la medida elegida (key perteneciente al dict 'metrics.measures')
        hits = metrics.evaluate(measure=measure)
        if predictions is True:  # Devuelvo ademas el vector de predicciones
            ret = hits, predicted
        else:
            ret = hits
        return ret
예제 #5
0
hits_valid = neural_net.fit(train,
                            valid,
                            valid_iters=1,
                            mini_batch=20,
                            parallelism=0,
                            stops=global_stops,
                            optimizer_params=optimizer_params,
                            measure='R2',
                            keep_best=True,
                            reproducible=False)
hits_test, predict = neural_net.evaluate(test, predictions=True)

logger.info("Hits en test: %12.11f", hits_test)

# --4) Evaluacion de desempeño

logger.info("Metricas de evaluación en clasificacion: ")
labels = map(lambda lp: float(lp.label), test.collect())
metrics = RegressionMetrics(zip(predict, labels))
print "MSE: ", metrics.mse()
print "RMSE: ", metrics.rmse()
print "MAE: ", metrics.mae()
print "RMAE: ", metrics.rmae()
print "R-cuadrado: ", metrics.r2()
print "Explained Variance: ", metrics.explained_variance()
print zip(predict, labels)[:10]

# --5) Ploteos

plot_fitting(neural_net)
예제 #6
0
logger.info("Configuracion usada: %s", os.linesep+str(net_params))

# -- 3) Construcción y ajuste de red neuronal

neural_net = NeuralNetwork(net_params)

logger.info("Entrenando red neuronal ...")
hits_valid = neural_net.fit(train, valid, valid_iters=1, mini_batch=20, parallelism=0,
                            stops=global_stops, optimizer_params=optimizer_params, measure='R2',
                            keep_best=True, reproducible=False)
hits_test, predict = neural_net.evaluate(test, predictions=True)

logger.info("Hits en test: %12.11f", hits_test)

# --4) Evaluacion de desempeño

logger.info("Metricas de evaluación en clasificacion: ")
labels = map(lambda lp: float(lp.label), test.collect())
metrics = RegressionMetrics(zip(predict, labels))
print "MSE: ", metrics.mse()
print "RMSE: ", metrics.rmse()
print "MAE: ", metrics.mae()
print "RMAE: ", metrics.rmae()
print "R-cuadrado: ", metrics.r2()
print "Explained Variance: ", metrics.explained_variance()
print zip(predict, labels)[:10]

# --5) Ploteos

plot_fitting(neural_net)