2016-11-26 25 views
1

私はnumpy行列X(rows = observations & columns = features)のデータを持つ分類問題について、xgboostを使ってPythonを実行しようとしています。 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' 

、私はAを探しましたそれはどこから来ることができるのか、それは私が使用したい疎フォーマットと関係していると信じています。しかし、それは何で、どのように私はそれを修正することができます、私はヒントを持っていません。

私はどんなヘルプやコメントも歓迎します! ありがとうございました

+0

は 'X'でこの作業を行うだけで

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

が動作するはずの行を削除しますか? 'xgb'はスパース行列の使用について何を表していますか?彼らはしばしば置き換えられない。 – hpaulj

答えて

0

X_csr = csr_matrix(X).shapeを含むXと同じプロパティの多くを持っています。しかし、それはサブクラスではなく、置換の低下ではありません。コードは「疎な認識」である必要があります。 sklearnは修飾されます。実際、多くの独自の高速スパースユーティリティ関数が追加されています。

しかし、私はxgbが疎な行列をどれほどうまく処理しているのか、それがsklearnでどのように動いているのかよくわかりません。

問題がxgtrainであると仮定すると、そのタイプとプロパティを確認する必要があります。それはxgb.DMatrix(X, label = y)で作られたものとどのように比較されますか?

あなたがまだxgboostのユーザーではない人からの助けが必要な場合は、コード内のオブジェクトに関する多くの情報を提供する必要があります。

1

XGBoostスケルトンラッパーとは対照的に、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)