2016-11-26 2 views
1

내가 파이썬 - 특수 실행 xgboost를 사용하려합니다 - A의 나는 NumPy와 매트릭스 X (행 = 관찰 & 열 = 기능)의 데이터를 분류 문제와 라벨 numpy 배열 y. 내 데이터가 희소하기 때문에 스파 스 버전의 X를 사용하여 실행하고 싶습니다.하지만 오류가 발생할 때 누락 된 것으로 보입니다. 등XGBoost 및 희소 행렬

# Library import 

import numpy as np 
import xgboost as xgb 
from xgboost.sklearn import XGBClassifier 
from scipy.sparse import csr_matrix 

# Converting to sparse data and running xgboost 

X_csr = csr_matrix(X) 
xgb1 = XGBClassifier() 
xgtrain = xgb.DMatrix(X_csr, label = y)  #to work with the xgb format 
xgtest = xgb.DMatrix(Xtest_csr) 
xgb1.fit(xgtrain, y, eval_metric='auc') 
dtrain_predictions = xgb1.predict(xgtest) 

이 ...

가 지금은 분류에 맞게 동안 오류 얻을 : 여기

내가 무엇을 지금

File ".../xgboost/python-package/xgboost/sklearn.py", line 432, in fit 
self._features_count = X.shape[1] 

AttributeError: 'DMatrix' object has no attribute 'shape' 

을, 나는 찾았다 그것이 어디서 왔는지에 관해서는, 내가 사용하기를 원하는 희소 한 형식과 관련이 있다고 믿습니다. 그러나 그것이 무엇인지, 어떻게 해결할 수 있는지, 나는 단서가 없다.

도움이나 의견을 환영합니다. 대단히 감사합니다.

+0

는'X'이 일을합니까 그냥

xgtrain = xgb.DMatrix(X_csr, label = y) 

작동합니다 라인을 제거? 'xgb'는 스파 스 매트릭스를 사용하는 것에 대해 무엇을 말합니까? 종종 대체물이 떨어지지 않습니다. – hpaulj

답변

0

에는 .shape을 포함하여 X과 같은 많은 속성이 있습니다. 그러나 그것은 하위 클래스가 아니며 대체 항목이 아닙니다. 코드는 '희소 인식'해야합니다. sklearn는 자격을 얻습니다. 사실 그것은 많은 자체의 빠른 스파 스 유틸리티 기능을 추가합니다.

그러나 나는 xgb이 희소 행렬을 얼마나 잘 처리하는지, sklearn을 어떻게 사용하는지 잘 모릅니다.

xgtrain으로 문제가 있다고 가정하면 유형과 속성을 살펴 봐야합니다. xgb.DMatrix(X, label = y)으로 만든 것과 어떻게 비교합니까?

사용자가 아직 xgboost이 아닌 사람의 도움을 받으려면 코드에있는 개체에 대해 더 많은 정보를 제공해야합니다.

1

저는 XGBoost sklearn 래퍼와 달리 XGBoost 트레이닝 래퍼를 사용하는 것을 선호합니다. 다음과 같이 당신은 분류를 만들 수 있습니다

params = { 
    # I'm assuming you are doing binary classification 
    'objective':'binary:logistic' 
    # any other training params here 
    # full parameter list here https://github.com/dmlc/xgboost/blob/master/doc/parameter.md 
} 
booster = xgb.train(params, xgtrain, metrics=['auc']) 

이 API는 XGBoost와 매우 잘 작동하는 내장 교차 검증 xgb.cv 있습니다.

https://xgboost.readthedocs.io/en/latest/get_started/index.html#python

톤 더 많은 예제 여기 https://github.com/dmlc/xgboost/tree/master/demo/guide-python

희망이 도움이됩니다.

1

xgboost scikit-learn API (http://xgboost.readthedocs.io/en/latest/python/python_api.html#module-xgboost.sklearn)를 사용 중이므로 XGBClassifier()에 맞게 데이터를 DMatrix로 변환 할 필요가 없습니다.

type(X_csr) #scipy.sparse.csr.csr_matrix 
type(y) #numpy.ndarray 
xgb1 = xgb.XGBClassifier() 
xgb1.fit(X_csr, y) 

출력 :

XGBClassifier(base_score=0.5, colsample_bylevel=1, colsample_bytree=1, 
    gamma=0, learning_rate=0.1, max_delta_step=0, max_depth=3, 
    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)