| 382 | } |
| 383 | |
| 384 | static TVector<TVector<double>> GetProbabilityMeanValues( |
| 385 | const TVector<TVector<TVector<double>>>& shapValues, // [refIdx][dim][feature] |
| 386 | const TVector<double>& bias |
| 387 | ) { |
| 388 | TVector<TVector<double>> probabilityMeanValues(shapValues[0].size(), TVector<double>(shapValues.size(), 0.0)); |
| 389 | for (auto referenceIdx : xrange(shapValues.size())) { |
| 390 | const auto& shapValuesForReference = shapValues[referenceIdx]; |
| 391 | const size_t approxDimension = shapValuesForReference.size(); |
| 392 | TVector<double> meanValuesForReference(approxDimension); |
| 393 | for (auto dimension : xrange(approxDimension)) { |
| 394 | meanValuesForReference[dimension] = shapValuesForReference[dimension].back() + bias[dimension]; |
| 395 | } |
| 396 | TVector<double> probabilityMeanValuesForReference(approxDimension); |
| 397 | CalcSoftmax(meanValuesForReference, &probabilityMeanValuesForReference); |
| 398 | for (auto dimension : xrange(approxDimension)) { |
| 399 | probabilityMeanValues[dimension][referenceIdx] = probabilityMeanValuesForReference[dimension]; |
| 400 | } |
| 401 | } |
| 402 | return probabilityMeanValues; |
| 403 | } |
| 404 | |
| 405 | void PostProcessingIndependent( |
| 406 | const TIndependentTreeShapParams& independentTreeShapParams, |
no test coverage detected