| 43 | }; |
| 44 | |
| 45 | static void ParseEvalResult(const TString& evalResultPath, TVector<double>* approxes, TVector<float>* labels) { |
| 46 | approxes->clear(); |
| 47 | labels->clear(); |
| 48 | THolder<ILineDataReader> reader = GetLineDataReader(TPathWithScheme(evalResultPath)); |
| 49 | |
| 50 | TString header; |
| 51 | reader->ReadLine(&header); |
| 52 | TVector<TString> headerTokens = StringSplitter(header).Split('\t'); |
| 53 | THashMap<TString, ui32> columnHeaders; |
| 54 | for (ui32 i = 0; i < headerTokens.size(); ++i) { |
| 55 | columnHeaders[headerTokens[i]] = i; |
| 56 | } |
| 57 | CB_ENSURE(columnHeaders.contains("Label") && columnHeaders.contains("RawFormulaVal"), "Incorrect EvalResult format."); |
| 58 | const ui32 approxColumnIndex = columnHeaders.at("RawFormulaVal"); |
| 59 | const ui32 labelColumnIndex = columnHeaders.at("Label"); |
| 60 | |
| 61 | TString line; |
| 62 | while (reader->ReadLine(&line)) { |
| 63 | TVector<TString> tokens = StringSplitter(line).Split('\t'); |
| 64 | if (tokens.empty()) { |
| 65 | continue; |
| 66 | } |
| 67 | CB_ENSURE(tokens.size() > Max(approxColumnIndex, labelColumnIndex)); |
| 68 | approxes->push_back(FromString<double>(tokens[approxColumnIndex])); |
| 69 | labels->push_back(FromString<float>(tokens[labelColumnIndex])); |
| 70 | } |
| 71 | } |
| 72 | |
| 73 | int mode_roc(int argc, const char* argv[]) { |
| 74 | TRocParams params; |
no test coverage detected