我正在尝试使用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
参数名称或值是否错误?
答案 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
。
class sklearn.naive_bayes.GaussianNB(priors=None)
您要查找的sigma
参数实际上是GaussianNB类的属性,并且无法通过方法set_params()
和get_params()
访问。
您可以操纵sigma
和theta
属性,方法是将一些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]])