2014-11-25 9 views
8

Sto cercando di utilizzare SkLearn Bayes classification.Sklearn set_params richiede esattamente 1 argomento?

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

Ma ottengo:

set_params() takes exactly 1 argument (2 given) 

Ora cerco di utilizzare questo codice:

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

E ottenere:

ValueError: Invalid parameter sigma_ for estimator GaussianNB 

È sbagliato il nome o il valore del parametro?

risposta

4

set_params() accetta solo argomenti di parole chiave, come si può vedere nella documentazione. È dichiarato come set_params(**params).

Così, al fine di farlo funzionare, è necessario chiamare con solo argomenti chiave: gnb.set_params(some_param = 'sigma__0.2')

+0

Potrebbe spiegarmi? Il parametro di interesse è: 'sigma_': array, shape = [n_classes, n_features], come scritto nei documenti. Quindi, come dovrei impostarlo? – Leonid

+0

Penso che 'gnb.set_params (sigma_ = 0.2)' dovrebbe funzionare. – Mezgrman

+0

non funziona ancora – Leonid

2

È scritto nella documentazione che la sintassi è:

set_params (** params)

Queste due stelle indicano che è necessario fornire argomenti per le parole chiave (read about it here). Quindi è necessario farlo nel form your_param = 'sigma__0.2'

13

Ho appena imbattuto in questo, ecco una soluzione per più argomenti da un dizionario:

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

Il problema qui è che GaussianNB ha un solo parametro e che è priors.

Dal documentation

class sklearn.naive_bayes.GaussianNB(priors=None) 

Il sigma parametro che si sta cercando è, infatti, un attributo della classe GaussianNB, e non è possibile accedere con i metodi set_params() e get_params().

È possibile manipolare sigma e theta attributi, alimentando qualche Priors a GaussianNB o adattandolo a una serie di formazione specifica.

0

sigma_ è un attributo di istanza che viene calcolato durante l'allenamento. Probabilmente non hai intenzione di modificarlo direttamente.

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_ 

uscita:

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

Più codice:

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

uscita:

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

Dopo l'allenamento, è possibile modificare il valore sigma_. Ciò potrebbe influire sui risultati della previsione.

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