• (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_)
  • 相关阅读:
    织梦后台如何生成站点地图sitemap.xml
    滚轮滚动一定距离触发导航顶部固定,且所点击的关键词,背景字体变色
    超简单横向选项卡
    后台域名重定向301
    JS检测是否是360浏览器
    《深入理解Java虚拟机》-----第2章 Java内存区域与内存溢出异常
    java基础(十七)----- 浅谈Java中的深拷贝和浅拷贝 —— 面试必问
    java基础(十六)----- equals()与hashCode()方法详解 —— 面试必问
    java基础(十五)----- Java 最全异常详解 ——Java高级开发必须懂的
    java基础(十四)-----详解匿名内部类——Java高级开发必须懂的
  • 原文地址:https://www.cnblogs.com/xiaofengzai/p/14544817.html
Copyright © 2020-2023  润新知