Estoy trabajando con un conjunto de datos con una gran cantidad de características categóricas (> 80%) que predicen una variable objetivo continua (es decir, Regresión). He estado leyendo bastante sobre formas de manejar características categóricas. Y aprendí que la codificación única que he estado usando en el pasado es una muy mala idea, especialmente cuando se trata de muchas características categóricas con muchos niveles (lea esta publicación y esto ).
Si bien he encontrado métodos como la codificación basada en objetivos (suavizado) de características categóricas a menudo basadas en la media de los valores objetivo para cada característica, tal vez esta publicación / núcleo en Kaggle. Todavía estoy luchando por encontrar una forma más concreta hasta que encontré CatBoost, un gradiente de código abierto que aumenta los árboles de decisión lanzados el año pasado por el grupo Yandex. Parecen ofrecer opciones adicionales de conteo estadístico para características categóricas, probablemente mucho más eficientes que la simple codificación o suavizado de una sola vez.
El problema es que la documentación no es útil para establecer la configuración de CTR . He intentado diferentes formas pero simplemente no funciona. El documento dice que la configuración de CTR es simple_ctr , que se dará como ( sección de configuración de CTR ):
['CtrType[:TargetBorderCount=BorderCount][:TargetBorderType=BorderType][:CtrBorderCount=Count][:CtrBorderType=Type][:Prior=num_1/denum_1]..[:Prior=num_N/denum_N]',
'CtrType[:TargetBorderCount=BorderCount][:TargetBorderType=BorderType][:CtrBorderCount=Count][:CtrBorderType=Type][:Prior=num_1/denum_1]..[:Prior=num_N/denum_N]',
...]
Aquí hay un ejemplo súper simple, los datos se ven así:
import pandas as pd
import catboost
data = [{'profit': '342','country': 'holland','account': 'Jones LLC', 'saving': 150, 'debt': -60, 'age': 28},
{'profit': '875','country': 'germany','account': 'Alpha Co', 'saving': 200, 'debt': -10, 'age': 42},
{'profit': '127','country': 'italy','account': 'Blue Inc', 'saving': 50, 'debt': -300, 'age': 38 }]
df = pd.DataFrame(data)
Aquí hay un simple Regresor Catboost:
X_train = df.drop(['profit'],axis=1)
Y_train = df['profit']
categorical_features_indices = [0,2]
train_pool = catboost.Pool(X_train, Y_train, cat_features=categorical_features_indices)
model = catboost.CatBoostRegressor(
depth=3,
iterations=5,
eval_metric='RMSE',
simple_ctr=None)
model.fit(train_pool);
¡ Simple_ctr , una de las configuraciones de CTR, es el problema! Es una pena porque parece que el paquete ofrece varios métodos, hasta ahora no hay forma de acceder a ellos.
ACTUALIZACIÓN 9 de agosto de 2018: Hace unos días le planteé este problema al desarrollador de Catboost, mira aquí , y le abrieron un ticket para proporcionar un tutorial.
fuente
Respuestas:
Descubrí que para establecer los
ctr
parámetros y todos los componentes uno debe pasar una lista de cadenas, cada cadena debe contener elctrType
y uno de sus componentes:ctrType
por ejemplo,Borders:
(haga clic aquí para ver los parámetros de catboost)ctrType
debe seguir. Por ejemploTargetBorderType=5
.'Borders:TargetBorderType=5'
.Ejemplo con dos componentes establecidos:
fuente
¿Intentó usar el formato proporcionado a continuación?
fuente