2014-11-25 5 views
8

Ich versuche SkLearn Bayes classification zu verwenden.Sklearn set_params benötigt genau 1 Argument?

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

Aber ich bekomme:

set_params() takes exactly 1 argument (2 given) 

jetzt versuche ich, diesen Code zu verwenden:

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

Und erhalten:

ValueError: Invalid parameter sigma_ for estimator GaussianNB 

Ist der Parametername oder -wert falsch?

Antwort

4

set_params() nimmt nur Schlüsselwort Argumente, wie in der Dokumentation zu sehen. Es wird als set_params(**params) deklariert.

Also, um es funktioniert, müssen Sie es mit Keyword-Argumente nur nennen: gnb.set_params(some_param = 'sigma__0.2')

+0

Können Sie mir erklären? Der Parameter von Interesse ist: 'Sigma_': Array, Form = [n_Klassen, n_Features], wie es in Dokumenten geschrieben. Also, wie soll ich es einstellen? – Leonid

+0

Ich denke 'gnb.set_params (sigma_ = 0.2)' sollte funktionieren. – Mezgrman

+0

es immer noch nicht – Leonid

2

Es in der Dokumentation geschrieben wird, dass die Syntax:

set_params (** params)

Diese zwei Sterne bedeuten, dass Sie Schlüsselwortargumente geben müssen (read about it here). So müssen Sie es tun in der form your_param = 'sigma__0.2'

13

ich nur auf diese stolperte, so ist hier eine Lösung für mehrere Argumente aus einem Wörterbuch:

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) 
0

Das Problem hierbei ist, dass GaussianNB hat nur einen Parameter und dass ist priors.

Vom documentation

class sklearn.naive_bayes.GaussianNB(priors=None) 

Der sigma Parameter Sie suchen, ist in der Tat ein Attribut der Klasse GaussianNB und kann nicht durch die Methoden set_params() und get_params() zugegriffen werden.

Sie können die Attribute sigma und theta manipulieren, indem Sie einen Wert von Priors an GaussianNB übergeben oder an einen bestimmten Trainingssatz anpassen.

0

sigma_ ist ein Instanzattribut, das während des Trainings berechnet wird. Sie sind wahrscheinlich nicht dazu bestimmt, es direkt zu ändern.

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_ 

Ausgang:

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

Weiterer Code:

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

Ausgang:

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

Nach dem Training ist es möglich, den sigma_ Wert zu ändern. Dies könnte die Ergebnisse der Vorhersage beeinflussen.

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