Ejemplo n.º 1
0
void RfExtractorClassifier::import(istream& is)
{
  _getExtractors();

  _rf.reset(new RandomForest());
  _rf->import(is);
  vector<string> factorLabels = _rf->getFactorLabels();

  QStringList extractorNames;
  for (size_t i = 0; i < _extractors.size(); i++)
  {
    extractorNames.append(QString::fromUtf8(_extractors[i]->getName().data()).
                          replace(QRegExp("[^\\w]"), "_"));
  }

  QStringList missingExtractors;
  for (size_t i = 0; i < factorLabels.size(); i++)
  {
    QString fn = QString::fromUtf8(factorLabels[i].data());
    if (extractorNames.contains(fn) == false)
    {
      missingExtractors.append(fn);
    }
    _rfFactorLabels.append(fn);
  }

  if (missingExtractors.size() > 0)
  {
    LOG_WARN("An extractor used by the model is not being calculated. We will still try, but");
    LOG_WARN("this will undoubtably result in poor quality matches. Missing extractors:");
    LOG_WARN(missingExtractors);
    LOG_WARN("Available extractors: " << extractorNames);
  }
}
Ejemplo n.º 2
0
void RfExtractorClassifier::import(QDomElement& docRoot)
{
  _getExtractors();

  _rf.reset(new RandomForest());
  _rf->importModel(docRoot);
  vector<string> factorLabels = _rf->getFactorLabels();

  QStringList extractorNames;
  for (size_t i = 0; i < _extractors.size(); i++)
  {
    extractorNames.append(QString::fromUtf8(_extractors[i]->getName().data()).
                          replace(QRegExp("[^\\w]"), "_"));
  }

  QStringList missingExtractors;
  for (size_t i = 0; i < factorLabels.size(); i++)
  {
    QString fn = QString::fromUtf8(factorLabels[i].data());
    if (extractorNames.contains(fn) == false)
    {
      missingExtractors.append(fn);
    }
    _rfFactorLabels.append(fn);
  }

  if (missingExtractors.size() > 0)
  {
    if (logWarnCount < Log::getWarnMessageLimit())
    {
      LOG_WARN(
        "An extractor used by the model is not being calculated. We will still try, but this will "
        "undoubtably result in poor quality matches. Missing extractors:");
    }
    else if (logWarnCount == Log::getWarnMessageLimit())
    {
      LOG_WARN(className() << ": " << Log::LOG_WARN_LIMIT_REACHED_MESSAGE);
    }
    logWarnCount++;
    LOG_TRACE("Missing extractors: " << missingExtractors);
    LOG_TRACE("Available extractors: " << extractorNames);
  }
}
Ejemplo n.º 3
0
map<QString, double> RfExtractorClassifier::getFeatures(const shared_ptr<const OsmMap>& m,
  ElementId eid1, ElementId eid2) const
{
  map<QString, double> result;

  const shared_ptr<const Element>& e1 = m->getElement(eid1);
  const shared_ptr<const Element> e2 = m->getElement(eid2);

  _getExtractors();
  for (size_t i = 0; i < _extractors.size(); i++)
  {
    double v = _extractors[i]->extract(*m, e1, e2);
    // if it isn't null then include it.
    if (!FeatureExtractor::isNull(v))
    {
      QString factorName = QString::fromStdString(_extractors[i]->getName()).
          replace(QRegExp("[^\\w]"), "_");
      result[factorName] = v;
    }
  }

  return result;
}