2 votos

Predicción de valores en un rango dado [0, 1] (no es una probabilidad)

Necesito predecir el impacto de un conjunto de fallos de nodos en una red, basándome en 2 características: la fracción de nodos fallidos y una medida de su centralidad de red.

El fallo de los nodos menos importantes tendrá poca o ninguna repercusión, mientras que el fallo de los nodos importantes puede hacer caer toda la red.

La salida prevista debe ser un número en el rango [0, 1], donde 0 es "ningún daño", y "1" es "fallo de todos los nodos". El 0 es inclusivo ya que lo uso para cubrir el caso "sin daños" cuando la fracción de nodos fallados es 0.

Este es un ejemplo de asignación de 2 características (ejes x e y) al resultado real de la simulación (eje z). He trazado la dispersión y la proyección de los puntos. Parece que es algo que se puede aprender, ¿verdad? 3d scatter plot of simulation results Projections of 3d scatter plot points

Estoy utilizando la regresión lineal multivariante en scikit-learn para entrenar un predictor. Tomo mi conjunto de entrenamiento, elijo las 2 características que quiero, las uso para hacer un polinomio de 4to grado, que luego estandarizo y uso para entrenar mi modelo.

El problema es que, para algunas combinaciones de mis 2 valores de características, el predictor arroja valores negativos o valores mayores que 1. Puedo publicar una imagen si es necesario.

He probado a cambiar el grado del polinomio, a utilizar la regularización (lasso, ridge y ElasticNet) y a aplicar la normalización. Nada soluciona completamente el problema, especialmente para las predicciones >1.

¿Es la regresión lineal la herramienta equivocada para predecir valores en un rango?
¿Alguna sugerencia para un sustituto de la misma? Estoy tentado de probar la regresión logística, pero no parece la herramienta adecuada, ya que es para la clasificación, y da salida a las probabilidades, mientras que mis valores tienen un significado diferente (no una "oportunidad", sino un grado de daño).

0 votos

¿Puede ser más preciso sobre cuál es el formato de sus datos? Podría simplemente asignar la salida a $[0,1]$ de la manera más obvia.

0 votos

Tengo dos características, una es la fracción inicial de nodos fallidos (entre 0 y 1) mientras que la otra es una suma de la centralidad de esos nodos (esto podría ser normalizado, en realidad). Puedo hacer que la segunda característica sea también una fracción, como "fracción de centralidad perdida" (según una métrica específica). ¿Ayudaría eso?

0 votos

El resultado para (0, 0) es siempre 0, es decir (0 atacado, 0 pérdida de centralidad) -> 0 daño. Puede haber algunos puntos en los que el mismo valor (x, y) tenga diferentes valores z, pero no deberían ser tantos. Convertir esto en un problema de clasificación es una posibilidad, sí, pero me gustaría hacer alguna predicción también. ¿No hay forma de informar al predictor de que el valor sólo tiene sentido cuando está en un rango específico? Hacer un mapa de ellos después suena como una oportunidad perdida.

3voto

Gerardo Curiel Puntos 71

Te enfrentas a respuestas muy diferentes para entradas muy similares. La regresión no le dará respuestas significativas.

Enfoque de clasificación.

Considere, como alternativa, respuestas categóricas como "poco daño" y "mucho daño". Debería buscar una función $f$ tal que $f(p, c)$ es la probabilidad de que tenga "poco daño" cuando una fracción $p$ de los nodos han fallado con pérdida de centralidad $c$ .

Puedes construir $f$ de la siguiente manera. Sea $n \in \mathbb{N}$ , dejemos que $a_{i,j}$ sea el número de puntos de la región $R_{i,j} = [\frac{i}{n+1}, \frac{i+1}{n+1}]\times [\frac{j}{n+1}, \frac{j+1}{n+1}]$ correspondiente a "daño bajo" y dejar que $N_{i,j}$ sea el número total de puntos en esta región. Así, $$ f_{i,j} = \frac{a_{i,j}}{N_{i,j}} $$ es la fracción de puntos en $R_{i,j}$ que corresponde a un "daño bajo". A continuación, puede dejar que $$ f(p,c) = f_{i,j}\quad \text{ if } (p,c) \in R_{i,j}. $$

Si quieres algo suave, puedes usar $$ f(p,c) = \sum_{i,j} f_{i,j} B_{i,n}(p) B_{j,n}(c), $$ donde $B_{i,n}(p) = {n \choose i} x^{i}(1-x)^{n-i}$ son los polinomios de Bernstein.

Mejorar el modelo.

Podrías poner un prior en el $f_{i,j}$ y en $n$ . Esto le daría un modelo bayesiano razonable, y solucionaría el pequeño problema que surge cuando $N_{i,j} = 0$ .

Visualización de los resultados.

El conjunto de puntos $(p,c)$ tal que $f(p,c) = \frac{1}{2}$ te dará un límite de clasificación que es una variedad algebraica. También tienes regiones críticas $C_\varepsilon = \{(p,c) \,|\, f(p,c) < \varepsilon\}$ donde es muy probable que se produzcan "grandes daños".

Se puede calcular la probabilidad marginal de daños altos o bajos para una fracción dada de nodos fallados y trazarla junto con la superficie de probabilidad.

0 votos

¿Qué es exactamente $[\frac{i}{n+1}, \frac{i+1}{n+1}]$ ?

0 votos

Es un intervalo. Básicamente, las regiones $R_{i,j}$ son los pequeños cuadrados del $xy$ plano de sus parcelas. Se divide el espacio de entrada $[0,1]^2$ en una cuadrícula de cuadrados $R_{i,j}$ de la longitud del lado $1/n$ .

0 votos

Bien, gracias. Haré una prueba de clasificación. No sé si hay algo sobre los polinomios de Bernstein en sklearn. Aun así +1 y mi agradecimiento.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X