add smart decision of nfeatures

This commit is contained in:
tqchen 2014-03-01 21:49:29 -08:00
parent 0f410ac54a
commit 7761d562b1
3 changed files with 17 additions and 7 deletions

View File

@ -88,6 +88,9 @@ namespace xgboost{
if( !strcmp("bst:num_feature", name ) ) num_feature = atoi( val ); if( !strcmp("bst:num_feature", name ) ) num_feature = atoi( val );
} }
}; };
public:
/*! \brief model parameters */
Param param;
public: public:
/*! \brief number of thread used */ /*! \brief number of thread used */
GBMBaseModel( void ){ GBMBaseModel( void ){
@ -323,8 +326,6 @@ namespace xgboost{
protected: protected:
/*! \brief number of OpenMP threads */ /*! \brief number of OpenMP threads */
int nthread; int nthread;
/*! \brief model parameters */
Param param;
/*! \brief component boosters */ /*! \brief component boosters */
std::vector<booster::IBooster*> boosters; std::vector<booster::IBooster*> boosters;
/*! \brief some information indicator of the booster, reserved */ /*! \brief some information indicator of the booster, reserved */

View File

@ -10,7 +10,6 @@ test:data = "agaricus.txt.test"
booster_type = 0 booster_type = 0
loss_type = 2 loss_type = 2
bst:num_feature=126
bst:eta=1.0 bst:eta=1.0
bst:gamma=1.0 bst:gamma=1.0
bst:min_child_weight=1 bst:min_child_weight=1

View File

@ -49,19 +49,29 @@ namespace xgboost{
this->train_ = train; this->train_ = train;
this->evals_ = evals; this->evals_ = evals;
this->evname_ = evname; this->evname_ = evname;
//assign buffer index // estimate feature bound
int num_feature = (int)(train->data.NumCol());
// assign buffer index
unsigned buffer_size = static_cast<unsigned>( train->Size() ); unsigned buffer_size = static_cast<unsigned>( train->Size() );
for( size_t i = 0; i < evals.size(); ++ i ){ for( size_t i = 0; i < evals.size(); ++ i ){
buffer_size += static_cast<unsigned>( evals[i]->Size() ); buffer_size += static_cast<unsigned>( evals[i]->Size() );
num_feature = std::max( num_feature, (int)(evals[i]->data.NumCol()) );
} }
char snum_pbuffer[25];
sprintf( snum_pbuffer, "%u", buffer_size ); char str_temp[25];
if( num_feature > base_model.param.num_feature ){
sprintf( str_temp, "%d", num_feature );
base_model.SetParam( "bst:num_feature", str_temp );
}
sprintf( str_temp, "%u", buffer_size );
base_model.SetParam( "num_pbuffer", str_temp );
if( !silent ){ if( !silent ){
printf( "buffer_size=%u\n", buffer_size ); printf( "buffer_size=%u\n", buffer_size );
} }
base_model.SetParam( "num_pbuffer",snum_pbuffer );
// set eval_preds tmp sapce
this->eval_preds_.resize( evals.size(), std::vector<float>() ); this->eval_preds_.resize( evals.size(), std::vector<float>() );
} }
/*! /*!