sklearn.exceptions.NotFittedError: Оценщик не установлен, вызовите `fit` перед использованием модели - PullRequest
1 голос
/ 19 июня 2019

Я пробовал регрессию случайных лесов.

Код указан ниже.

import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import KFold, cross_val_predict
from sklearn.feature_selection import SelectKBest, f_regression 
from sklearn.pipeline import make_pipeline, Pipeline
from sklearn.ensemble import RandomForestRegressor
from sklearn.feature_selection import RFECV
from sklearn.model_selection import GridSearchCV
np.random.seed(0)


d1 = np.random.randint(2, size=(50, 10))
d2 = np.random.randint(3, size=(50, 10))
d3 = np.random.randint(4, size=(50, 10))
Y = np.random.randint(7, size=(50,))


X = np.column_stack([d1, d2, d3])


n_smples, n_feats = X.shape
print (n_smples, n_feats)


kf = KFold(n_splits=5, shuffle=True, random_state=0)

regr = RandomForestRegressor(max_features=None,random_state=0)                
pipe = make_pipeline(RFECV(estimator=regr, step=3, cv=kf, scoring = 
'neg_mean_squared_error', n_jobs=-1),
             GridSearchCV(regr, param_grid={'n_estimators': [100, 300]},
                          cv=kf, scoring = 'neg_mean_squared_error', 
n_jobs=-1))

ypredicts = cross_val_predict(pipe, X, Y, cv=kf, n_jobs=-1)

rmse = mean_squared_error(Y, ypredicts)
print (rmse)

Однако я получил следующую ошибку: sklearn.exceptions.NotFchedError: Оценщик не установлен, вызовите fit перед использованием модели.

Я тоже пробовал:

model = pipe.fit(X,Y)

ypredicts = cross_val_predict(model, X, Y, cv=kf, n_jobs=-1)

Но получил ту же ошибку.

Редактировать 1: Я также попробовал:

pipe.fit(X,Y)

Но получил ту же ошибку.

В Python 2.7 (Sklearn 0.20) для одного и того же кода я получил другую ошибку:

TerminatedWorkerError: A worker process managed by the executor was unexpectedly terminated. This could be caused by a segmentation fault while calling the function or by an excessive memory usage causing the Operating System to kill the worker.

В Python 2.7 (Sklearn 0.20.3): NotFittedError: Estimator not fitted, call подходит before exploiting the model.

Ответы [ 2 ]

0 голосов
/ 19 июня 2019

Кажется, что вы пытаетесь выбрать лучшие параметры для вашего классификатора, используя поиск по сетке, это еще один способ сделать это.Вы используете конвейеры, но в этом методе я не использую конвейер, но я получаю лучшие параметры при случайном поиске.

import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import KFold, cross_val_predict
from sklearn.feature_selection import SelectKBest, f_regression 
from sklearn.pipeline import make_pipeline, Pipeline
from sklearn.ensemble import RandomForestRegressor
from sklearn.feature_selection import RFECV
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import RandomizedSearchCV
from sklearn.ensemble import RandomForestClassifier

np.random.seed(0)


d1 = np.random.randint(2, size=(50, 10))
d2 = np.random.randint(3, size=(50, 10))
d3 = np.random.randint(4, size=(50, 10))
Y = np.random.randint(7, size=(50,))


X = np.column_stack([d1, d2, d3])


n_smples, n_feats = X.shape
print (n_smples, n_feats)


kf = KFold(n_splits=5, shuffle=True, random_state=0)

regr = RandomForestRegressor(max_features=None,random_state=0)                

n_iter_search = 20
random_search = RandomizedSearchCV(regr, param_distributions={'n_estimators': [100, 300]},
                                   n_iter=20, cv=kf,verbose=1,return_train_score=True)
random_search.fit(X, Y)

ypredicts=random_search.predict(X)
rmse = mean_squared_error(Y, ypredicts)
print(rmse)
print(random_search.best_params_)
random_search.cv_results_

Попробуйте этот фрагмент кода.Я надеюсь, что этот код заполняет вашу проблему.

0 голосов
/ 19 июня 2019

Вместо

model = pipe.fit(X,Y)

Вы пробовали

pipe.fit(X,Y)

вместо?

, так что это будет

pipe.fit(X,Y)
# change model to pipe
ypredicts = cross_val_predict(pipe, X, Y, cv=kf, n_jobs=-1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...