Cómo especificar la probabilidad previa de Naive Bayes de scikit-learn

Estoy utilizando la biblioteca de aprendizaje automático de scikit-learn (Python) para un proyecto de aprendizaje automático. Uno de los algoritmos que estoy usando es la implementación Gaussian Naive Bayes. Uno de los atributos de la función GaussianNB () es el siguiente:

class_prior_ : array, shape (n_classes,) 

Quiero modificar la clase antes manualmente ya que los datos que uso son muy sesgados y la recuperación de una de las clases es muy importante. Al asignar una alta probabilidad previa a esa clase, la recuperación debería boost.

Sin embargo, no puedo averiguar cómo establecer el atributo correctamente. Ya he leído los temas a continuación, pero sus respuestas no funcionan para mí.

¿Cómo pueden establecerse manualmente las probabilidades anteriores para el ingenuo Bayes clf en scikit-learn?

¿Cómo puedo saber qué conocimientos previos le doy a sci-kit? (Clasificadores naive-bayes.)

Este es mi código:

 gnb = GaussianNB() gnb.class_prior_ = [0.1, 0.9] gnb.fit(data.XTrain, yTrain) yPredicted = gnb.predict(data.XTest) 

Pensé que esta era la syntax correcta y podía averiguar qué clase pertenece a qué lugar en la matriz jugando con los valores pero los resultados permanecen sin cambios. Tampoco se dieron errores.

¿Cuál es la forma correcta de configurar los atributos del algoritmo GaussianNB desde la biblioteca scikit-learn?

Enlace a la documentación scikit de GaussianNB

El GaussianNB () implementado en scikit-learn no le permite configurar la clase antes. Si lee la documentación en línea, verá que .class_prior_ es un atributo en lugar de parámetros . Una vez que encaja en el GaussianNB (), puede obtener acceso al atributo class_prior_. Se calcula simplemente contando el número de tags diferentes en su muestra de entrenamiento.

 from sklearn.datasets import make_classification from sklearn.naive_bayes import GaussianNB # simulate data with unbalanced weights X, y = make_classification(n_samples=1000, weights=[0.1, 0.9]) # your GNB estimator gnb = GaussianNB() gnb.fit(X, y) gnb.class_prior_ Out[168]: array([ 0.105, 0.895]) gnb.get_params() Out[169]: {} 

Verá que el estimador es lo suficientemente inteligente como para tener en cuenta el problema del peso desequilibrado. Así que no tienes que especificar manualmente los antecedentes.

@Jianxun Li: de hecho, hay una manera de establecer probabilidades previas en GaussianNB. Se llama ‘priors’ y está disponible como parámetro. Consulte la documentación: “Parámetros: anteriores: matriz-como, forma (n_clases) Probabilidades previas de las clases. Si se especifican, los anteriores no se ajustan de acuerdo con los datos”. Así que déjame darte un ejemplo:

 from sklearn.naive_bayes import GaussianNB # minimal dataset X = [[1, 0], [1, 0], [0, 1]] y = [0, 0, 1] # use empirical prior, learned from y mn = GaussianNB() print mn.fit(X,y).predict([1,1]) print mn.class_prior_ >>>[0] >>>[ 0.66666667 0.33333333] 

Pero si cambió las probabilidades anteriores, le daré una respuesta diferente, que es lo que está buscando, creo.

 # use custom prior to make 1 more likely mn = GaussianNB(priors=[0.1, 0.9]) mn.fit(X,y).predict([1,1]) >>>>array([1])