web-dev-qa-db-fra.com

Sklearn set_params prend exactement 1 argument?

J'essaie d'utiliser SkLearn Classification Bayes .

 gnb = GaussianNB()
 gnb.set_params('sigma__0.2')
 gnb.fit(np.transpose([xn, yn]), y)

Mais je reçois:

set_params() takes exactly 1 argument (2 given)

maintenant j'essaye d'utiliser ce code:

gnb = GaussianNB()
arr = np.zeros((len(labs),len(y)))
arr.fill(sigma)
gnb.set_params(sigma_ = arr)

Et obtenir:

ValueError: Invalid parameter sigma_ for estimator GaussianNB

Est-ce que le nom ou la valeur du paramètre est incorrect?

12
Leonid

set_params() prend uniquement des arguments de mots clés, comme on peut le voir dans la documentation. Il est déclaré en tant que set_params(**params).

Donc, pour que cela fonctionne, vous devez l'appeler avec des arguments de mots clés uniquement: gnb.set_params(some_param = 'sigma__0.2')

7
Mezgrman

Je suis juste tombé sur cela, alors voici une solution pour plusieurs arguments d'un dictionnaire:

from sklearn import svm
params_svm = {"kernel":"rbf", "C":0.1, "gamma":0.1, "class_weight":"auto"}
clf = svm.SVC()
clf.set_params(**params_svm)
21
Kam Sen

Le problème ici est que GaussianNB a un seul paramètre et est priors.

De la documentation

 class sklearn.naive_bayes.GaussianNB(priors=None)

Le paramètre sigma que vous recherchez est en fait un attribut de la classe GaussianNB, auquel les méthodes set_params() et get_params() ne peuvent pas accéder.

Vous pouvez manipuler les attributs sigma et theta en fournissant du nom Priors à GaussianNB ou en l'adaptant à un ensemble d'apprentissage spécifique.

2
Pedro Baracho

Il est écrit dans la documentation que la syntaxe est la suivante:

set_params (** paramètres)

Ces deux étoiles signifient que vous devez donner des arguments de mots clés ( lisez à ce sujet ici ). Donc, vous devez le faire dans le form your_param = 'sigma__0.2'

2
Salvador Dali

sigma_ est un attribut d'instance calculé lors de la formation. Vous n'êtes probablement pas destiné à le modifier directement.

from sklearn.naive_bayes import GaussianNB
import numpy as np

X = np.array([[-1,-1],[-2,-1],[-3,-2],[1,1],[2,1],[3,2]])
y = np.array([1,1,1,2,2,2])

gnb = GaussianNB()
print gnb.sigma_

Sortie:

AttributeError: 'GaussianNB' object has no attribute 'sigma_'

Plus de code:

gnb.fit(X,y) ## training
print gnb.sigma_

Sortie:

array([[ 0.66666667,  0.22222223],
       [ 0.66666667,  0.22222223]])

Après la formation, il est possible de modifier la valeur sigma_. Cela pourrait affecter les résultats de la prédiction.

gnb.sigma_ = np.array([[1,1],[1,1]])
1
nobar