2016-09-22 6 views
0

Я пытаюсь запустить xgboost и получаю сообщение об ошибке, пытающееся преобразовать тип файла libsvm в xgbmatrix.Внешняя память не включена в mingw 'на XGboost

dtrain = xgb.DMatrix('train#dtrain.cache') 
XGBoostError: b'[16:45:24] src/data/data.cc:248: External memory is not enabled in mingw' 

кажется, вызвано

void DMatrix::SaveToLocalFile(const std::string& fname) { 
    data::SimpleCSRSource source; 
    source.CopyFrom(this); 
    std::unique_ptr<dmlc::Stream> fo(dmlc::Stream::Create(fname.c_str(), "w")); 
    source.SaveBinary(fo.get()); 
} 

DMatrix* DMatrix::Create(std::unique_ptr<DataSource>&& source, 
         const std::string& cache_prefix) { 
    if (cache_prefix.length() == 0) { 
    return new data::SimpleDMatrix(std::move(source)); 
    } else { 
#if DMLC_ENABLE_STD_THREAD 
    return new data::SparsePageDMatrix(std::move(source), cache_prefix); 
#else 
    LOG(FATAL) << "External memory is not enabled in mingw"; 
    return nullptr; 
#endif 
    } 
} 

На этой GitHub файле: https://github.com/dmlc/xgboost/blob/master/src/data/data.cc

Я не знаком с C поэтому у меня возникли проблемы отладки его.

ответ

1

Эта проблема заключается в том, что вы используете создание основанного на URL DMatrix. то есть вы указали файл данных как 'train#dtrain.cache'.

Кэш можно создать, только если ваш компилятор имеет поддержку внешней памяти. mingw этого не печально. Следовательно, просто укажите свой файл как "train" и убедитесь, что это формат libsvm, и все должно быть в порядке.