Sklearn GridSearchCV 的参数无效

Posted

技术标签:

【中文标题】Sklearn GridSearchCV 的参数无效【英文标题】:Invalid Parameters for Sklearn GridSearchCV 【发布时间】:2020-01-16 17:45:39 【问题描述】:

我的网格中的每一行都得到ValueError: Invalid parameter...

我尝试逐行删除每个网格选项,直到网格为空。我从pipeline.get_params() 复制并粘贴了参数的名称,以确保它们没有拼写错误。

from sklearn.model_selection import train_test_split
x_in, x_out, y_in, y_out = train_test_split(X, Y, test_size=0.2, stratify=Y)

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.pipeline import Pipeline
from sklearn.feature_selection import SelectKBest, chi2, f_classif
from sklearn.svm import LinearSVC
from sklearn.model_selection import GridSearchCV

grid = 
    'TF-IDF__ngram_range':[(1,2),(2,3)],
    'TF-IDF__stop_words': [None, 'english'],
    'SelectKBest__k': [10000, 15000],
    'SelectKBest__score_func': [f_classif, chi2],
    'linearSVC__penalty': ['l1', 'l2']


pipeline = Pipeline([('tfidf', TfidfVectorizer(sublinear_tf=True)),
                     ('selectkbest', SelectKBest()),
                     ('linearscv', LinearSVC(max_iter=10000, dual=False))])

grid_search = GridSearchCV(pipeline, param_grid=grid, scoring='accuracy', n_jobs=-1, cv=5)
grid_search.fit(X=x_in, y=y_in)

【问题讨论】:

我已编辑问题中的代码以显示 x_in 来自较早的 train_test_split 【参考方案1】:

我认为您不是指网格上具有正确名称的管道阶段。您在管道上为每个阶段分配的名称(tfidf、selectkbest、linearscv)应该与网格中的名称相同。我会这样做:

pipeline = Pipeline([('tfidf', TfidfVectorizer(sublinear_tf=True)),
                     ('selectkbest', SelectKBest()),
                     ('linearscv', LinearSVC(max_iter=10000, dual=False))]) 
grid = 
    'tfidf__ngram_range':[(1,2),(2,3)],
    'tfidf__stop_words': [None, 'english'],
    'selectkbest__k': [10000, 15000],
    'selectkbest__score_func': [f_classif, chi2],
    'linearscv__penalty': ['l1', 'l2'] 

【讨论】:

谢谢,我在更改名称之前运行了 pipeline.get_params()。需要检查的重要事项。

以上是关于Sklearn GridSearchCV 的参数无效的主要内容,如果未能解决你的问题,请参考以下文章

拟合 sklearn GridSearchCV 模型

sklearn学习8-----GridSearchCV(自动调参)

sklearn 管道有没有办法在网格搜索期间进行有步骤和无步骤的训练?我可以删除步骤,但如何将其传递给 GridSearchCV?

如何将两个估计器对象传递给 sklearn 的 GridSearchCV,以便它们在每个步骤中具有相同的参数?

SKLEARN // 将 GridsearchCV 与列变换和管道相结合

在 fit 方法采用 3 个参数的自定义类上使用 sklearn GridSearchCV