Неверный параметр для конвейера - PullRequest
0 голосов
/ 26 октября 2019

При реализации моих первых конвейеров возвращается эта ошибка: «Неверный параметр randomforestclassifier для конвейера оценки»

skf = StratifiedKFold(n_splits=3, shuffle=True, random_state=SEED)

classifier = Pipeline([
    ('vectorizer', CountVectorizer(max_features=8000, ngram_range=(1, 5))),
    ('clf', RandomForestClassifier(n_estimators=10, random_state=15, n_jobs=-1))])

min_samples_leaf = [5, 6, 7, 8]
max_features = [0.3, 0.4, 0.5, 0.6, 0.7]
rfc_params = {'randomforestclassifier__min_samples_leaf': min_samples_leaf, 
              'randomforestclassifier__max_features':max_features}

class_grid = GridSearchCV(classifier, param_grid = rfc_params, 
                          cv=skf, scoring='roc_auc', n_jobs=-1)
class_grid.fit(X_text, y_text)

Ответы [ 2 ]

0 голосов
/ 26 октября 2019

Эта ошибка из-за несоответствия в названии вашего классификатора. Вы называете это "clf" в своем конвейере, но ссылаетесь на "randomforestclassifier" в своем "rfc_params".

Просто замените "randomforestclassifier" на "clf" в словаре "rfc_params", и это будет работать.

Рабочий пример:

from sklearn.model_selection import StratifiedKFold, GridSearchCV
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_extraction.text import CountVectorizer

X_text = ["first text", "text", "text", "last text"]
y_text = [0, 1, 0, 1]

skf = StratifiedKFold(n_splits=2, shuffle=True, random_state=42)

classifier = Pipeline([
    ('vectorizer', CountVectorizer(max_features=8000, ngram_range=(1, 5))),
    ('clf', RandomForestClassifier(n_estimators=10, random_state=15, n_jobs=-1))])

min_samples_leaf = [5, 6, 7, 8]
max_features = [0.3, 0.4, 0.5, 0.6, 0.7]

rfc_params = {
    'clf__min_samples_leaf': min_samples_leaf, 
    'clf__max_features':max_features
}

class_grid = GridSearchCV(classifier, param_grid = rfc_params, 
                          cv=skf, scoring='roc_auc', n_jobs=-1)
class_grid.fit(X_text, y_text)
0 голосов
/ 26 октября 2019

Это помогло, если кто-то знает почему или другое решение - добро пожаловать

vectorizer = CountVectorizer(max_features=8000, ngram_range=(1, 5)
clf = RandomForestClassifier(n_estimators=10, random_state=15, n_jobs=-1)               
classifier = make_pipeline(vectorizer, clf)
...