【问题标题】:Sklearn set_params takes exactly 1 argument?Sklearn set_params 正好需要 1 个参数?
【发布时间】:2015-01-23 05:21:09
【问题描述】:

我正在尝试使用 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

是参数名还是值错误?

【问题讨论】:

    标签: python scikit-learn


    【解决方案1】:

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

    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)
    

    【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 你能解释一下吗?感兴趣的参数是:sigma_ : array, shape = [n_classes, n_features],正如它在文档中所写的那样。那么,应该如何设置呢?
    • 也许尝试省略下划线?我找不到接受的参数列表。
    • 它给出了相同的结果。
    • 尝试输出当前参数,例如使用print gnb.get_params(),看看能不能找到你需要的参数名称。
    • “前者具有 __ 形式的参数” - 这是来自文档。我认为 是我的 sigma,但 是什么?
    【解决方案3】:

    文档中写的语法是:

    set_params(**params)

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        这里的问题是GaussianNB只有一个参数,那就是priors

        来自documentation

         class sklearn.naive_bayes.GaussianNB(priors=None)
        

        你要找的sigma参数其实是GaussianNB类的一个属性,不能被set_params()get_params()方法访问。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-17
          • 2013-06-12
          • 2015-01-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多