Как получить функцию принятия решения в randomforest в sklearn - PullRequest
1 голос
/ 10 апреля 2019

Я использую следующий код для получения оптимизированных параметров для randomforest, используя gridsearchcv.

x_train, x_test, y_train, y_test = train_test_split(X, y, random_state=0)
rfc = RandomForestClassifier(random_state=42, class_weight = 'balanced')
param_grid = { 
    'n_estimators': [200, 500],
    'max_features': ['auto', 'sqrt', 'log2'],
    'max_depth' : [4,5,6,7,8],
    'criterion' :['gini', 'entropy']
}
k_fold = StratifiedKFold(n_splits=10, shuffle=True, random_state=0)
CV_rfc = GridSearchCV(estimator=rfc, param_grid=param_grid, cv= 10, scoring = 'roc_auc')
CV_rfc.fit(x_train, y_train)
print(CV_rfc.best_params_)
print(CV_rfc.best_score_)

Теперь я хочу применить настроенные параметры к X_test. Для этого я сделал следующее:

pred = CV_rfc.decision_function(x_test)
print(roc_auc_score(y_test, pred))

Однако decision_function, похоже, не поддерживает randomforest, поскольку я получил следующую ошибку.

AttributeError: у объекта 'RandomForestClassifier' нет атрибута 'Decision_function'.

Есть ли другой способ сделать это?

Я рад предоставить более подробную информацию, если это необходимо.

Ответы [ 3 ]

2 голосов
/ 10 апреля 2019

Если вы хотите получить функцию оценки модели, чтобы можно было использовать оценку для auc_roc_score, тогда вы можете перейти к predict_proba()

y_pred_proba = CV_rfc.predict_proba(x_test)
print(roc_auc_score(y_test, y_pred_proba[:,1]))
2 голосов
/ 10 апреля 2019

Ваш код,

pred = CV_rfc.decision_function(x_test)
print(roc_auc_score(y_test, pred))

Заставляет меня думать, что вы пытаетесь делать прогнозы с помощью обученной модели.

Если вы хотите получить метки прогноза, вы можете сделать это следующим образом:

pred = CV_rfc.predict(x_test)

Тогда на выходе будут метки классов, такие как [1, 2, 1, ... ]

Если вы хотите вместо этого получить вероятности класса, вы можете использовать predict_proba вот так

pred = CV_rfc.predict_proba(x_test)
2 голосов
/ 10 апреля 2019

вы можете использовать либо метод предиката (), либо получить оптимизированную модель случайного леса с помощью best_estimator_

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...