2016-09-16 20 views
5

Có thể đào tạo một mô hình trong Xgboost có nhiều đầu ra liên tục (hồi quy đa) không? Mục tiêu đào tạo mô hình như thế nào?hồi quy đầu ra muti trong xgboost

Cảm ơn trước cho bất cứ đề nghị

+0

Nếu đầu ra nhiều hơn một giá trị, thì bạn cần một mô hình trình tự như RNN (GRU, LSTM, v.v ...). [Keras] (https://keras.io/) có thể giúp bạn nhanh chóng thử nghiệm các mô hình như vậy. – uyaseen

+0

Tôi biết RNN. Tôi đã tự hỏi nếu điều đó cũng có thể trong Xgboost kể từ khi tôi đã biết rằng thúc đẩy cây thực hiện tốt cho không gian vấn đề của tôi. Tôi cũng nên lưu ý rằng kích thước vecor đầu ra của tôi có thể được cố định. – user1782011

+0

Nếu mối quan hệ giữa các đầu ra được biết, bạn sẽ có thể thực hiện một chức năng khách quan lợi dụng điều đó. Nó đã được thực hiện cho [rừng ngẫu nhiên có quan hệ tuyến tính] (https://cran.r-project.org/web/packages/MultivariateRandomForest/MultivariateRandomForest.pdf). Và tác giả XGBoost nghĩ rằng [nó có thể thực hiện được] (https://github.com/dmlc/xgboost/issues/680). –

Trả lời

2

Đề nghị của tôi là sử dụng sklearn.multioutput.MultiOutputRegressor như là một wrapper của xgb.XGBRegressor. MultiOutputRegressor đào tạo một bộ hồi quy cho mỗi mục tiêu và chỉ yêu cầu bộ hồi quy thực hiện fitpredict, mà xgboost xảy ra để hỗ trợ.

# get some noised linear data 
X = np.random.random((1000, 10)) 
a = np.random.random((10, 3)) 
y = np.dot(X, a) + np.random.normal(0, 1e-3, (1000, 3)) 

# fitting 
multioutputregressor = MultiOutputRegressor(xgb.XGBRegressor(objective='reg:linear')).fit(X, y) 

# predicting 
print np.mean((multioutputregressor.predict(X) - y)**2, axis=0) # 0.004, 0.003, 0.005 

Đây có lẽ là cách dễ nhất để thoái mục tiêu đa chiều sử dụng xgboost như bạn sẽ không cần phải thay đổi bất kỳ phần nào khác của mã của bạn (nếu bạn đang sử dụng sklearn API ban đầu).

Tuy nhiên, phương pháp này không tận dụng bất kỳ mối quan hệ nào có thể giữa các mục tiêu. Nhưng bạn có thể thử thiết kế một hàm customized objective để đạt được điều đó.

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