2014-11-25 266 views
8

我正在尝试使用SkLearn Bayes classificationSklearn set_params只需要1个参数?

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

,但我得到:

set_params() takes exactly 1 argument (2 given) 

现在我尝试使用此代码:

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

并获得:

ValueError: Invalid parameter sigma_ for estimator GaussianNB 

参数名称或值是否错误?

回答

4

set_params()仅接受关键字参数,如文档中所示。它被宣布为set_params(**params)

因此,为了使其工作,你需要只有关键字参数来调用它:gnb.set_params(some_param = 'sigma__0.2')

+0

你能解释一下吗?感兴趣的参数是:'sigma_':阵列,形状= [n_classes,n_features],因为它在文档写入。那么,我应该如何设置它? – Leonid 2014-11-25 09:30:04

+0

我想'gnb.set_params(sigma_ = 0.2)'应该工作。 – Mezgrman 2014-11-25 09:33:14

+0

还不行 – Leonid 2014-11-25 09:48:53

2

这是写在文件的语法是:

set_params(** PARAMS)

这两颗星意味着你需要给出关键字参数(read about it here)。所以,你需要做的是在form your_param = 'sigma__0.2'

13

我只是偶然发现了这一点,所以这里是一个字典多个参数的解决方案:

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

这里的问题是,GaussianNB只有一个参数,并且是priors

从你所追求的是,​​事实上,类GaussianNB的属性,而不能由方法set_params()get_params()访问documentation

class sklearn.naive_bayes.GaussianNB(priors=None) 

sigma参数。

您可以操纵sigmatheta属性,方法是将一些Priors馈送到GaussianNB或将其拟合到特定的训练集。

0

sigma_是在训练期间计算的实例属性。你可能不打算直接修改它。

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_ 

输出:

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

更多代码:

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

输出:

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

训练之后,可以修改sigma_值。这可能会影响预测的结果。

gnb.sigma_ = np.array([[1,1],[1,1]]) 
相关问题