2015-12-26 9 views
5

Я хотел бы использовать функцию cgboost cv, чтобы найти лучшие параметры для моего набора данных обучения. Я смущен api. Как найти лучший параметр? Это похоже на функцию перекрестной проверки sklearn grid_search? Как я могу определить, какой из параметров для параметра max_depth ([2,4,6]) был оптимальным?понимание python xgboost cv

from sklearn.datasets import load_iris 
import xgboost as xgb 
iris = load_iris() 
DTrain = xgb.DMatrix(iris.data, iris.target) 
x_parameters = {"max_depth":[2,4,6]} 
xgb.cv(x_parameters, DTrain) 
... 
Out[6]: 
    test-rmse-mean test-rmse-std train-rmse-mean train-rmse-std 
0  0.888435  0.059403   0.888052  0.022942 
1  0.854170  0.053118   0.851958  0.017982 
2  0.837200  0.046986   0.833532  0.015613 
3  0.829001  0.041960   0.824270  0.014501 
4  0.825132  0.038176   0.819654  0.013975 
5  0.823357  0.035454   0.817363  0.013722 
6  0.822580  0.033540   0.816229  0.013598 
7  0.822265  0.032209   0.815667  0.013538 
8  0.822158  0.031287   0.815390  0.013508 
9  0.822140  0.030647   0.815252  0.013494 
+0

Вопрос сформулирован в очень общем терминале. Попробуйте указать свой вопрос. –

ответ

3

Cross-validation используется для оценки производительности одного набора параметров на невидимых данных.

Grid-search оценивает модель с различными параметрами, чтобы найти наилучшую комбинацию из них.

Sklearn docs много говорит о CV, и их можно использовать в сочетании, но каждый из них имеет совершенно разные цели.

Возможно, вы можете установить xgboost в функциональность gridsearch sklearn. Проверьте интерфейс sklearn на xgboost для наиболее гладкого приложения.

+0

У меня есть вопрос: «параметры» здесь означают 2 вещи: (1) гиперпараметры, например, lambda регуляризации в Лассо, который также является входом модели; (2) весовые параметры, например линейные коэффициенты в Lasso, которые автоматически генерируются моделью. Итак, CV предназначен для оценки производительности гиперпараметров по невидимым данным? Grid-поиск используется для нахождения наилучшей комбинации этих (гиперпараметры?), Лучший из которых в каком смысле? лучшие результаты? Если это правда, то почему я не могу просто использовать Grid-поиск для выбора лучших гиперпараметров? – ftxx

+0

Grid Search оценивает модель со множеством наборов гиперпараметров на основе определенной вами метрики. Возвращается наиболее эффективный набор гиперпараметров. Существует вероятность того, что указанный набор гиперпараметров переполнит ваши данные. Чтобы исправить это, вы можете делать CV для каждого набора гиперпараметров, а не просто вычислять метрику как есть. У этого есть больше шансов избежать переобучения. –

+0

В 'GridSearch' есть опция' cv', которую я всегда использую. Поэтому я думаю, что я реализовал то, что вы сказали. Затем я полагаю, что после этого модель с оптимальным набором гиперпараметров (которые получены GridSearch с cv) должна превосходить другие модели в одном классе, но с различным набором гиперпараметров, которые я искал в совершенно новом независимом тесте набор данных, который поступает из того же дистрибутива, что и набор учебных данных, является правильным? – ftxx

7

Sklearn GridSearchCV должен быть способ пойти, если вы ищете настройку параметров. Вам нужно просто передать классификатор xgb в GridSearchCV и оценить наилучший показатель CV.

здесь хороший учебник, который может помочь вам начать с настройки параметров: http://www.analyticsvidhya.com/blog/2016/03/complete-guide-parameter-tuning-xgboost-with-codes-python/

3

Вы можете использовать GridSearchCV с xgboost через xgboost sklearn API

Определите классификатор следующим образом:

from xgboost.sklearn import XGBClassifier 
from sklearn.grid_search import GridSearchCV 

xgb_model = XGBClassifier(other_params) 

test_params = { 
'max_depth':[4,8,12] 
} 

model = GridSearchCV(estimator = xgb_model,param_grid = test_params) 
model.fit(train,target) 
print model.best_params_ 
2

Я бы поехали с hyperOpt

https://github.com/hyperopt/hyperopt

open sourced и отлично работал для меня. Если вы это сделаете и нуждаетесь в помощи, я могу уточнить.

Когда вы просите взглянуть на "max_depth":[2,4,6], вы можете наивно решить эту проблему, запустив 3 модели, каждая с максимальной глубиной, которую вы хотите, и посмотрите, какая модель дает лучшие результаты.

Но «max_depth» - не единственный гиперпараметр, который вы должны учитывать. Есть много других гипер-параметров, таких как: eta (learning rate), gamma, min_child_weight, subsample и так далее. Некоторые из них продолжаются, а некоторые - дискретны. (Предполагая, что вы знаете свои целевые функции и показатели оценки)

вы можете прочитать о них все здесь https://github.com/dmlc/xgboost/blob/master/doc/parameter.md

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

Для этого hyperOpt дает вам аккуратное решение и создает пространство поиска, которое не является точно случайным или сеткой. Все, что вам нужно сделать, это определить параметры и их диапазоны.

Вы можете найти пример кода здесь: https://github.com/bamine/Kaggle-stuff/blob/master/otto/hyperopt_xgboost.py

Я могу вам сказать из собственного опыта он работал лучше, чем байесовский оптимизации на своих моделях. Дайте ему несколько часов/дней проб и ошибок и свяжитесь со мной, если у вас возникнут проблемы, которые вы не можете решить.

Удачи вам!

+0

OK Я выбираю это и нуждаюсь в помощи. Можете ли вы сейчас уточнить, пожалуйста? – kilojoules

+0

«kilojoules» Извините за долгое время ответа, поскольку у меня есть руки, полные работы. Обновите меня своим прогрессом. –

Смежные вопросы