2016-01-08 27 views
10

Tôi đang cố gắng sử dụng trình phân loại XGBoosts để phân loại một số dữ liệu nhị phân. Khi tôi làm điều đơn giản và chỉ cần sử dụng giá trị mặc định (như sau)XGBoost XGBClassifier Mặc định trong Python

clf = xgb.XGBClassifier() 
metLearn=CalibratedClassifierCV(clf, method='isotonic', cv=2) 
metLearn.fit(train, trainTarget) 
testPredictions = metLearn.predict(test) 

tôi nhận được kết quả phân loại một cách hợp lý tốt.

Bước tiếp theo của tôi là thử điều chỉnh thông số của mình. Đoán từ hướng dẫn thông số tại ... https://github.com/dmlc/xgboost/blob/master/doc/parameter.md tôi muốn bắt đầu từ mặc định và làm việc từ đó ...

# setup parameters for xgboost 
param = {} 
param['booster'] = 'gbtree' 
param['objective'] = 'binary:logistic' 
param["eval_metric"] = "error" 
param['eta'] = 0.3 
param['gamma'] = 0 
param['max_depth'] = 6 
param['min_child_weight']=1 
param['max_delta_step'] = 0 
param['subsample']= 1 
param['colsample_bytree']=1 
param['silent'] = 1 
param['seed'] = 0 
param['base_score'] = 0.5 

clf = xgb.XGBClassifier(params) 
metLearn=CalibratedClassifierCV(clf, method='isotonic', cv=2) 
metLearn.fit(train, trainTarget) 
testPredictions = metLearn.predict(test) 

Kết quả là tất cả những gì được dự đoán sẽ là một trong những điều kiện và không phải là khác.

tò mò nếu tôi đặt

params={} 

mà tôi mong đợi để cho tôi giá trị mặc định giống như không ăn bất kỳ thông số, tôi nhận được điều tương tự xảy ra

Vì vậy, không ai biết những gì giá trị mặc định cho XGBclassifier là ? để tôi có thể bắt đầu điều chỉnh?

+0

Câu hỏi này gặp phải hành vi tương tự nhưng không có câu trả lời cho http://stackoverflow.com/questions/33470477/xgboost-predict-method-returns-the-same-predicted-value-for-all- hàng –

Trả lời

15

Đó không phải là cách bạn đặt thông số trong xgboost. Bạn có thể muốn chuyển lưới thông số của bạn vào chức năng đào tạo của bạn, chẳng hạn như train hoặc số GridSearchCV của xgboost hoặc bạn muốn sử dụng phương thức set_params của XGBClassifier. Một điều cần lưu ý là nếu bạn đang sử dụng wrapper của xgboost để sklearn (ví dụ: các lớp XGBClassifier() hoặc XGBRegressor()) thì tên paramater được sử dụng là những cái giống nhau được sử dụng trong lớp GBM của riêng sklearn (ví dụ: eta -> learning_rate). Tôi không thấy tài liệu chính xác cho trình bao bọc sklearn bị ẩn, nhưng mã cho các lớp đó là ở đây: https://github.com/dmlc/xgboost/blob/master/python-package/xgboost/sklearn.py

Để tham khảo ở đây là cách bạn sẽ đặt trực tiếp các tham số đối tượng mô hình.

>>> grid = {'max_depth':10} 
>>> 
>>> clf = XGBClassifier() 
>>> clf.max_depth 
3 
>>> clf.set_params(**grid) 
XGBClassifier(base_score=0.5, colsample_bylevel=1, colsample_bytree=1, 
     gamma=0, learning_rate=0.1, max_delta_step=0, max_depth=10, 
     min_child_weight=1, missing=None, n_estimators=100, nthread=-1, 
     objective='binary:logistic', reg_alpha=0, reg_lambda=1, 
     scale_pos_weight=1, seed=0, silent=True, subsample=1) 
>>> clf.max_depth 
10 

EDIT: Tôi cho rằng bạn có thể thiết lập các thông số trên tạo mô hình, nó chỉ là không siêu điển hình để làm như vậy kể từ khi tìm kiếm hầu hết mọi người lưới trong một số phương tiện. Tuy nhiên nếu bạn làm như vậy, bạn sẽ cần liệt kê chúng dưới dạng thông số đầy đủ hoặc sử dụng ** kwargs. Ví dụ:

>>> XGBClassifier(max_depth=10) 
XGBClassifier(base_score=0.5, colsample_bylevel=1, colsample_bytree=1, 
     gamma=0, learning_rate=0.1, max_delta_step=0, max_depth=10, 
     min_child_weight=1, missing=None, n_estimators=100, nthread=-1, 
     objective='binary:logistic', reg_alpha=0, reg_lambda=1, 
     scale_pos_weight=1, seed=0, silent=True, subsample=1) 
>>> XGBClassifier(**grid) 
XGBClassifier(base_score=0.5, colsample_bylevel=1, colsample_bytree=1, 
     gamma=0, learning_rate=0.1, max_delta_step=0, max_depth=10, 
     min_child_weight=1, missing=None, n_estimators=100, nthread=-1, 
     objective='binary:logistic', reg_alpha=0, reg_lambda=1, 
     scale_pos_weight=1, seed=0, silent=True, subsample=1) 

Sử dụng một cuốn từ điển như đầu vào mà không ** kwargs sẽ thiết lập thông số đó để theo nghĩa đen là từ điển của bạn:

>>> XGBClassifier(grid) 
XGBClassifier(base_score=0.5, colsample_bylevel=1, colsample_bytree=1, 
     gamma=0, learning_rate=0.1, max_delta_step=0, 
     max_depth={'max_depth': 10}, min_child_weight=1, missing=None, 
     n_estimators=100, nthread=-1, objective='binary:logistic', 
     reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=0, silent=True, 
     subsample=1) 
+0

Nhiều như tôi muốn nó là đúng, bạn không thể vượt qua một lưới tham số vào chức năng đào tạo của xgboost - giá trị từ điển tham số không thể được liệt kê –

0

Tại rất đầu tiên, tôi đoán bạn mất một 's' cho bạn biến. Bạn wrte param trên đầu trang nhưng sử dụng params khi đào tạo mô hình thay thế. Và sau đó ...

Các vấn đề liên quan