2 votos

Scikit-learn QuantileRegressor error de asignación de memoria. Ningún problema con statsmodel QuantReg con los mismos datos.

Estoy tratando de ajustar un modelo de regresión cuantil a mis datos de entrada. Me gustaría utilizar sklearn, pero estoy recibiendo un error de asignación de memoria cuando intento ajustar el modelo. Los mismos datos con la función equivalente de statsmodels funcionan bien.

El error que obtengo es el siguiente

numpy.core._exceptions._ArrayMemoryError: Unable to allocate 55.9 GiB for an array with shape (86636, 86636) and data type float64

No tiene sentido, mis X e y son las formas (86636, 4) y (86636, 1) respectivamente.

Este es mi guión:

import pandas as pd
import statsmodels.api as sm
from sklearn.linear_model import QuantileRegressor

training_df = pd.read_csv("/path/to/training_df.csv") # 86,000 rows

FEATURES = [
    "feature_1",
    "feature_2",
    "feature_3",
    "feature_4",
]

TARGET = "target"

# STATSMODELS WORKS FINE WITH 86,000, RUNS IN 2-3 SECONDS.
model_statsmodels = sm.QuantReg(training_df[TARGET], training_df[FEATURES]).fit(q=0.5)

# SKLEARN GIVES A MEMORY ALLOCATION ERROR, OR TAKES MINUTES TO RUN IF I SIGNIFICANTLY TRIM THE DATA TO < 1000 ROWS.
model_sklearn = QuantileRegressor(quantile=0.5, alpha=0)
model_sklearn.fit(training_df[FEATURES], training_df[TARGET])

El error que obtengo es el siguiente

He revisado la documentación de sklearn y estoy bastante seguro de que mis entradas están bien como dataframes, tengo los mismos problemas con NDarrays. Así que no estoy seguro de cuál es el problema. ¿Es posible que haya un problema con algo bajo el capó?

[Aquí][1] está la documentación de scikit-learn para QunatileRegressor.

Muchas gracias por cualquier ayuda / idea. [1]: https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.QuantileRegressor.html

3voto

Ridim Puntos 111

La clase sklearn QuantileRegressor utiliza la programación lineal para resolver el problema de regresión cuantil, que es mucho más costoso computacionalmente que los mínimos cuadrados reponderados iterativos utilizados por la clase statsmodel QuantReg.

Aquí hay un tema github para el mismo problema: https://github.com/scikit-learn/scikit-learn/issues/22922

Gracias dipetkov por el enlace.

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