votingclassifier sklearn scikit naive forest example classifier bayes accuracy python syntax machine-learning scikit-learn

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



sklearn naive bayes (2)

Estoy usando la biblioteca de aprendizaje de máquinas 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 previamente de forma manual 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 aumentar.

Sin embargo, no puedo entender cómo configurar el atributo correctamente. He leído los siguientes temas pero sus respuestas no me funcionan.

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

¿Cómo puedo saber qué información previa le doy a sci-kit learn? (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 sintaxis correcta y pude averiguar qué clase pertenece a qué lugar en la matriz jugando con los valores, pero los resultados se mantienen sin cambios. Además, no se dieron errores.

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

Enlace a la documentación scikit de GaussianNB


El GaussianNB () implementado en scikit-learn no le permite establecer clases anteriores. Si lee la documentación en línea, verá que .class_prior_ es un atributo en lugar de parámetros . Una vez que ajuste el GaussianNB (), puede obtener acceso al atributo class_prior_. Se calcula simplemente contando el número de etiquetas 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]: {}

Usted ve que el estimador es lo suficientemente inteligente como para tener en cuenta el problema de peso desequilibrado. Por lo tanto, no tiene que especificar manualmente los antecedentes.


@Jianxun Li: de hecho hay una forma de establecer probabilidades previas en GaussianNB. Se llama ''priors'' y está disponible como un parámetro. Consulte la documentación: "Parámetros: priores: tipo de matriz, forma (n_clases,) Probabilidades previas de las clases. Si se especifica, los priores no se ajustan según los datos". 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 cambiaste las probabilidades anteriores, dará una respuesta diferente que es lo que estás 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])