Sklearn set_params只需1个参数?

时间:2014-11-25 09:18:57

标签: python scikit-learn

我正在尝试使用SkLearn Bayes classification

 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

参数名称或值是否错误?

5 个答案:

答案 0 :(得分:25)

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

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)

答案 1 :(得分:7)

set_params()只接受关键字参数,如文档中所示。它被声明为set_params(**params)

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

答案 2 :(得分:2)

文档中写的语法是:

  

set_params(** PARAMS)

这两颗星意味着您需要提供关键字参数(read about it here)。所以你需要在form your_param = 'sigma__0.2'

中完成

答案 3 :(得分:2)

此处的问题是GaussianNB只有一个参数,即priors

来自documentation

 class sklearn.naive_bayes.GaussianNB(priors=None)

您要查找的sigma参数实际上是GaussianNB类的属性,并且无法通过方法set_params()get_params()访问。

您可以操纵sigmatheta属性,方法是将一些Priors提供给GaussianNB,或者将其装入特定的训练集。

答案 4 :(得分:1)

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