From fd173e260f8d374983727fe943114a697e73571a Mon Sep 17 00:00:00 2001 From: tqchen Date: Thu, 14 Jan 2016 01:20:45 +0000 Subject: [PATCH] [FIX] change evaluation to more precision --- src/data/data.cc | 29 +++++++++++++++-------------- src/metric/elementwise_metric.cc | 8 ++++---- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/data/data.cc b/src/data/data.cc index eaf270b1d..9e2e22fc0 100644 --- a/src/data/data.cc +++ b/src/data/data.cc @@ -158,23 +158,24 @@ DMatrix* DMatrix::Load(const std::string& uri, LOG(CONSOLE) << "Partial load option on npart=" << npart; } } - // legacy handling of binary data loading if (file_format == "auto" && !load_row_split) { int magic; - std::unique_ptr fi(dmlc::Stream::Create(fname.c_str(), "r")); - common::PeekableInStream is(fi.get()); - if (is.PeekRead(&magic, sizeof(magic)) == sizeof(magic) && - magic == data::SimpleCSRSource::kMagic) { - std::unique_ptr source(new data::SimpleCSRSource()); - source->LoadBinary(&is); - DMatrix* dmat = DMatrix::Create(std::move(source), cache_file); - if (!silent) { - LOG(CONSOLE) << dmat->info().num_row << 'x' << dmat->info().num_col << " matrix with " - << dmat->info().num_nonzero << " entries loaded from " << uri; - } - return dmat; - } + std::unique_ptr fi(dmlc::Stream::Create(fname.c_str(), "r", true)); + if (fi.get() != nullptr) { + common::PeekableInStream is(fi.get()); + if (is.PeekRead(&magic, sizeof(magic)) == sizeof(magic) && + magic == data::SimpleCSRSource::kMagic) { + std::unique_ptr source(new data::SimpleCSRSource()); + source->LoadBinary(&is); + DMatrix* dmat = DMatrix::Create(std::move(source), cache_file); + if (!silent) { + LOG(CONSOLE) << dmat->info().num_row << 'x' << dmat->info().num_col << " matrix with " + << dmat->info().num_nonzero << " entries loaded from " << uri; + } + return dmat; + } + } } std::string ftype = file_format; diff --git a/src/metric/elementwise_metric.cc b/src/metric/elementwise_metric.cc index ac9ef387f..e0086c9c9 100644 --- a/src/metric/elementwise_metric.cc +++ b/src/metric/elementwise_metric.cc @@ -28,15 +28,15 @@ struct EvalEWiseBase : public Metric { CHECK_EQ(preds.size(), info.labels.size()) << "label and prediction size not match, " << "hint: use merror or mlogloss for multi-class classification"; - const bst_omp_uint ndata = static_cast(info.labels.size()); - float sum = 0.0, wsum = 0.0; + const omp_ulong ndata = static_cast(info.labels.size()); + double sum = 0.0, wsum = 0.0; #pragma omp parallel for reduction(+: sum, wsum) schedule(static) - for (bst_omp_uint i = 0; i < ndata; ++i) { + for (omp_ulong i = 0; i < ndata; ++i) { const float wt = info.GetWeight(i); sum += Derived::EvalRow(info.labels[i], preds[i]) * wt; wsum += wt; } - float dat[2]; dat[0] = sum, dat[1] = wsum; + double dat[2]; dat[0] = sum, dat[1] = wsum; if (distributed) { rabit::Allreduce(dat, 2); }