zoukankan      html  css  js  c++  java
  • (Pipeline用法)ValueError: Invalid parameter count_vec_binary for estimator Pipeline. Check.....

    关于Pipeline的代码如下:

    # 使用Pipeline搭建使用朴素贝叶斯模型的分类器,使用CountVectorizer对文本特征进行抽取
    pip_count = Pipeline([
        ('count_vect', CountVectorizer(analyzer='word')),
        ('mnb', MultinomialNB())
    ])
     
    # 配置用于模型超参数搜索的组合
    params_count = {
        'count_vec_binary': [True, False],
        'count_vec_ngram_range': [(1, 1), (1, 2)],
        'mnb_alpha': [0.1, 1.0, 10.0]
    }
     
    if __name__ == '__main__':
        # 使用采用4折交叉验证的方法对使用CountVectorizer的朴素贝叶斯模型进行并行化超参数搜索
        gs_count = GridSearchCV(pip_count, params_count, cv=4, n_jobs=-1, verbose=1)
        gs_count.fit(X_train, y_train)
        # 输出交叉验证中最佳的准确性得分以及超参数组合
        print(gs_count.best_score_)
        print(gs_count.best_params_)

    错误信息如下:

    ValueError: Invalid parameter count_vec_binary for estimator Pipeline. Check the list of available parameters with `estimator.get_params().keys

    下面是Pipeline的原理用法,看完之后,对于如何解决这个bug就有方法了:

    首先来看官网上对于Pipeline的介绍:

    即:

    pipeline的目的:当设置不同的参数时可以组合几个交叉验证的步骤。可以使用它们的名字和属性参数来设置不同步骤的参数(需要在参数前面加__(两个下划线)来连接)。-- 参数集在数据集上的重复使用。

    通过上面的介绍可知,我们在定义parameters的时候,需要在pipeline名字后面加"_",上面代码的错误之处就在于:

    (1)在pip_count中定义了2个两个属性(count_vect,mnb),而在下面配置用于模型超参数搜索的组合时,参数名称为:count_vec_binary,count_vec_ngram_range,mnb_alpha,对于mnb_alpha这个是在mnb的属性的参数正确的,而对于count_vec_binary,count_vec_ngram_range这两个属性,定义是错误的,应该将其改为count_vect_binary,count_vect_ngram_range

    (2)需要在参数前加“__”(2个下划线),因此需要将params_count中的count_vect_binary、count_vect_ngram_range、mnb_alpha改为count_vect__binary、count_vect__ngram_range、mnb__alpha。

    即完整代码为:

    # 使用Pipeline搭建使用朴素贝叶斯模型的分类器,使用CountVectorizer对文本特征进行抽取
    pip_count = Pipeline([
        ('count_vect', CountVectorizer(analyzer='word')),
        ('mnb', MultinomialNB())
    ])
     
    # 配置用于模型超参数搜索的组合
    params_count = {
        'count_vect__binary': [True, False],
        'count_vect__ngram_range': [(1, 1), (1, 2)],
        'mnb__alpha': [0.1, 1.0, 10.0]
    }
     
    if __name__ == '__main__':
        # 使用采用4折交叉验证的方法对使用CountVectorizer的朴素贝叶斯模型进行并行化超参数搜索
        gs_count = GridSearchCV(pip_count, params_count, cv=4, n_jobs=-1, verbose=1)
        gs_count.fit(X_train, y_train)
        # 输出交叉验证中最佳的准确性得分以及超参数组合
        print(gs_count.best_score_)
        print(gs_count.best_params_)
  • 相关阅读:
    16款优秀的Vue UI组件库推荐
    通过论证:查询字段通常返回引用,该引用可以保证是原来的对象的状态的一部分。分析变量在内存中的变化过程。
    使用XtraReport的CalculatedFiled(计算字段)实现RDLC报表中表达式
    Task:取消异步计算限制操作 & 捕获任务中的异常
    webAPI 自动生成帮助文档
    live writer 博客测试
    c#基础 函数传值
    Google,真的要离我们而去吗?
    匹配中文字符的正则表达式: [/u4e00-/u9fa5]
    希尔排序的实现
  • 原文地址:https://www.cnblogs.com/xiaofengzai/p/14544817.html
Copyright © 2011-2022 走看看