【问题标题】:Tunning treshold in Binarizer to BernoulliNB() classifier在 Binarizer 到 BernoulliNB() 分类器中运行阈值
【发布时间】:2019-04-30 02:00:07
【问题描述】:

我想使用 BernoulliNB() 分类器,并且我的数据没有二值化。所以我想通过 GridsearchCV() 选择最佳的二值化阈值。 我的代码如下:

from sklearn.pipeline import Pipeline
from sklearn.naive_bayes import BernoulliNB
from sklearn.preprocessing import Binarizer

pipeline = Pipeline([('binarizer', Binarizer()), ('classifier', BernoulliNB())])
params = {'estimator__binarizer__threshold': np.logspace(0, 5, 20)}

clf = GridSearchCV(pipeline, param_grid=params, cv=5, refit=True)
clf.fit(X_train,y_train)
clf.best_estimator_.score(X_test, y_test)

它给了我错误:

ValueError: Check the list of available parameters with estimator.get_params().keys().

我不知道怎么了。

【问题讨论】:

  • estimator__binarizer__treshold 应该是 estimator__binarizer__threshold"threshold" 的拼写错误。
  • 这不是原因。它仍然给我这个错误: ValueError: Invalid parameter estimator for estimator Pipeline(memory=None, steps=[('binarizer', Binarizer(copy=True, threshold=0.0)), ('classifier', BernoulliNB(alpha=1.0 , 二值化=0.0, class_prior=None, fit_prior=True))])。使用estimator.get_params().keys()检查可用参数列表。
  • 请不要将 cmets 空间用于此目的 - 编辑和更新您的帖子!

标签: python scikit-learn classification naivebayes


【解决方案1】:

是的,我的错。在评论中,我刚刚发现'treshold'的拼写错误,着急,没有关注估算器部分。

对于管道,可以通过两部分来访问参数:

  1. 步骤名称,如binarizerclassifier 此处
  2. 步骤 1 中该特定名称的实际参数名称。

您不需要将estimator 附加到上述部分。因此,在您的情况下,您将需要使用以下内容:

params = {'binarizer__threshold': np.logspace(0, 5, 20)}

访问管道'binarizer' 步骤的'threshold' 参数。

【讨论】:

    猜你喜欢
    • 2016-05-09
    • 2016-06-16
    • 2012-06-25
    • 2020-07-29
    • 2019-07-06
    • 2015-06-28
    • 2016-12-01
    • 2023-03-15
    • 2015-10-25
    相关资源
    最近更新 更多