Regresión multilineal restringida usando Gekko

Husni

Tengo un problema de regresión multilineal en el que tengo la información previa sobre el rango de la salida (variable dependiente y): la predicción siempre debe estar en ese rango.

Quiero encontrar los coeficientes (límite superior e inferior) de cada característica (variables independientes) para restringir el modelo de regresión lineal al rango deseado de salida.

Por ejemplo, quiero aplicar esta solución en sklearn.datasets.load_boston donde sé que el precio de la casa estará en el rango de [10, 40] (los valores mínimo y máximo reales de y son [5,50] ).

En el siguiente ejemplo, mi objetivo es 10 < yp < 40 y en base a esto quiero encontrar el límite mínimo y máximo de todos los coeficientes

from sklearn.datasets import load_boston
import numpy as np
import pandas as pd
from gekko import GEKKO

# Loading the dataset
x, y = load_boston(return_X_y=True)

c  = m.Array(m.FV, x.shape[1]+1) #array of parameters and intercept

for ci in c:
    ci.STATUS = 1 #calculate fixed parameter
    ci.LOWER  = 1 #constraint: lower limit
    ci.UPPER  = 0 #constraint: lower limit

#Define variables
xd = m.Array(m.Param,x.shape[1])
for i in range(x.shape[1]):
    xd[i].value = x[i]
yd = m.Param(y); yp = m.Var()

#Equation of Linear Functions
y_pred = c[0]*xd[0]+\
         c[1]*xd[1]+\
         c[2]*xd[2]+\
         c[3]*xd[3]+\
         c[4]*xd[4]+\
         c[5]*xd[5]+\
         c[6]*xd[6]+\
         c[7]*xd[7]+\
         c[8]*xd[8]+\
         c[9]*xd[9]+\
         c[10]*xd[10]+\
         c[11]*xd[11]+\
         c[12]*xd[12]+\
         c[13]

#Inequality Constraints
yp = m.Var(lb=5,ub=40)
m.Equation(yp==y_pred)

#Minimize difference between actual and predicted y
m.Minimize((yd-yp)**2)

#Solve
m.solve(disp=True)

#Retrieve parameter values
a = [i.value[0] for i in c]

print(a) 

El código enumerado me da un error de solución no encontrada. ¿Puedes señalar lo que estoy haciendo mal aquí, o me estoy perdiendo algo importante? Además, ¿cómo puedo obtener el límite superior e inferior de c para todas las variables independientes?

Juan Hedengren

Prueba IMODE=2con el modo de regresión. Hay algunas modificaciones, como x[:,i]cargar los datos y ci.LOWER=0los límites inferior y ci.UPPER=1superior.

from sklearn.datasets import load_boston
import numpy as np
import pandas as pd
from gekko import GEKKO
m = GEKKO(remote=False)
# Loading the dataset
x, y = load_boston(return_X_y=True)
n = x.shape[1]
c  = m.Array(m.FV, n+1) #array of parameters and intercept
for ci in c:
    ci.STATUS = 1 #calculate fixed parameter
    ci.LOWER  = 0 #constraint: lower limit
    ci.UPPER  = 1 #constraint: lower limit
#Load data
xd = m.Array(m.Param,n)
for i in range(n):
    xd[i].value = x[:,i]
yd = m.Param(y)
#Equation of Linear Functions
yp = m.Var(lb=5,ub=40)
m.Equation(yp==m.sum([c[i]*xd[i] \
               for i in range(n)]) + c[13])
#Minimize difference between actual and predicted y
m.Minimize((yd-yp)**2)
#Regression mode
m.options.IMODE=2
#APOPT solver
m.options.SOLVER = 1
#Solve
m.solve(disp=True)
#Retrieve parameter values
a = [i.value[0] for i in c]
print(a) 

La solución a este problema restringido se obtiene con el IPOPT o APOPT (ligeramente más rápido).

 Number of state variables:    7604
 Number of total equations: -  7590
 Number of slack variables: -  0
 ---------------------------------------
 Degrees of freedom       :    14
 
 ----------------------------------------------
 Model Parameter Estimation with APOPT Solver
 ----------------------------------------------
 
 Iter    Objective  Convergence
    0  5.60363E+04  1.25000E+00
    1  1.87753E+05  6.66134E-16
    2  3.06630E+04  9.99201E-16
    3  3.06630E+04  3.84187E-16
    5  3.06630E+04  1.35308E-16
 Successful solution
 
 ---------------------------------------------------
 Solver         :  APOPT (v1.0)
 Solution time  :  0.48429999999999995 sec
 Objective      :  30662.976306748842
 Successful solution
 ---------------------------------------------------
 

[0.0, 0.11336851243, 0.0, 1.0, 0.43491543768, 
 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.037613878067,
 0.0, 1.0]

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

Regresión multilineal restringida usando Gekko

Optimización no lineal restringida en GEKKO, la función objetivo no coincide con la solución esperada

Regresión no lineal multivariante GEKKO

Regresión no lineal multivariante GEKKO

Eliminación hacia atrás / selección hacia adelante en regresión multilineal en Julia

¿Cómo hacer una regresión lineal restringida - scikit learn?

Optimización Max Min usando gekko python

Regresión polinomial usando sklearn

regresión lineal usando tensorflow

Maximización restringida (optimización) en R

Problema de optimización restringida: Python

Extensión de iOS y API restringida

Optimización de media circular restringida

Optimización restringida no lineal en R

área de superposición no restringida a div

Calculando regresión multivariante usando TensorFlow

¿Regresión logística usando Tensorflow 2.0?

Regresión del componente principal usando Python

Usando ImageDataGenerator con salida de regresión

Regresión logística usando Python statsmodel

¿Encuentra el valor máximo de una función para una variable de límite restringida usando Matlab o la herramienta simbólica Matlab?

Optimización restringida para función multivariable no lineal en Java

Optimización Gekko

¿Una triangulación de Delaunay restringida por fuerza bruta?

scala - forma restringida de convertir cadenas en números

Optimización restringida para problemas de precios de varios productos

cómo hacer una consulta restringida por una colección

Optimización restringida para problemas de precios de varios productos

Detección de blobs en plataforma integrada, memoria restringida

TOP Lista

CalienteEtiquetas

Archivo