Я пытаюсь запустить xgboost и получаю сообщение об ошибке, пытаясь преобразовать тип файла libsvm в xgbmatrix.
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, поэтому у меня проблемы с отладкой.
Эта проблема в том, что вы используете URL на основе DMatrix
создание. то есть вы дали файл данных как 'train#dtrain.cache'
,
Кэш может быть создан только в том случае, если ваш компилятор поддерживает внешнюю память. у mingw этого нет, к сожалению. Следовательно, просто дайте свой файл как "train"
и убедитесь, что это формат libsvm, и все должно быть в порядке.
Других решений пока нет …