Este team especializado despúes de días de trabajo y recopilar de información, dimos con la respuesta, deseamos que resulte de gran utilidad en tu trabajo.
Solución:
Tienes al menos dos opciones:
-
Transforme todos sus datos en una representación categórica calculando percentiles para cada variable continua y luego dividiendo las variables continuas usando los percentiles como límites de ubicación. Por ejemplo, para la altura de una persona, cree los siguientes contenedores: “muy pequeño”, “pequeño”, “regular”, “grande”, “muy grande” y asegúrese de que cada contenedor contenga aproximadamente el 20 % de la población de su conjunto de entrenamiento. No tenemos ninguna utilidad para realizar esto automáticamente en scikit-learn, pero no debería ser demasiado complicado hacerlo usted mismo. Luego ajuste un NB multinomial único en esa representación categórica de sus datos.
-
Ajuste independientemente un modelo NB gaussiano en la parte continua de los datos y un modelo NB multinomial en la parte categórica. Luego transforme todo el conjunto de datos tomando las probabilidades de asignación de clase (con
predict_proba
método) como nuevas características:np.hstack((multinomial_probas, gaussian_probas))
y luego reajustar un nuevo modelo (por ejemplo, un nuevo NB gaussiano) en las nuevas características.
La respuesta simple: ¡multiplica el resultado! es lo mismo.
Naive Bayes basado en la aplicación del teorema de Bayes con la suposición “ingenua” de independencia entre cada par de características, lo que significa que calcula la probabilidad de Bayes que depende de una característica específica sin retener las otras, lo que significa que el algoritmo multiplica cada probabilidad de una característica con la probabilidad de la segunda característica (e ignoramos por completo el denominador, ya que es solo un normalizador).
entonces la respuesta correcta es:
- calcular la probabilidad de las variables categóricas.
- calcular la probabilidad de las variables continuas.
- multiplica 1. y 2.
Espero no llegar demasiado tarde. Recientemente escribí una biblioteca llamada Mixed Naive Bayes, escrita en NumPy. Puede asumir una combinación de distribuciones gaussianas y categóricas (multinoulli) en las características de datos de entrenamiento.
https://github.com/remykarem/mixed-naive-bayes
La biblioteca está escrita de tal manera que las API son similares a las de scikit-learn.
En el siguiente ejemplo, supongamos que las primeras 2 características son de una distribución categórica y las últimas 2 son gaussianas. En el fit()
método, solo especifique categorical_features=[0,1]
indicando que las Columnas 0 y 1 deben seguir una distribución categórica.
from mixed_naive_bayes import MixedNB
X = [[0, 0, 180.9, 75.0],
[1, 1, 165.2, 61.5],
[2, 1, 166.3, 60.3],
[1, 1, 173.0, 68.2],
[0, 2, 178.4, 71.0]]
y = [0, 0, 1, 1, 0]
clf = MixedNB(categorical_features=[0,1])
clf.fit(X,y)
clf.predict(X)
Pip instalable vía pip install mixed-naive-bayes
. Más información sobre el uso en el archivo README.md. Las solicitudes de extracción son muy apreciadas 🙂
Agradecemos que desees añadir valor a nuestro contenido informacional colaborando tu veteranía en las interpretaciones.