public ProxyCountTable(int iCol, int iSlot, ICountTable baseCountTable) { Contracts.CheckValue(baseCountTable, nameof(baseCountTable)); Contracts.Check(baseCountTable.GarbageThreshold == 0, "Garbage bin not supported for shared table"); _mixin = Hashing.MurmurRound((uint)iCol, (uint)iSlot); _table = baseCountTable; }
// Fills _labelBinCount log odds features. One per class, or only one if 2 classes. private void GenerateLogOdds(int iCol, ICountTable countTable, Span <float> counts, Span <float> logOdds, float sum) { _host.Assert(counts.Length == _labelBinCount); _host.Assert(logOdds.Length == _logOddsCount); for (int i = 0; i < _logOddsCount; i++) { _host.Assert(counts[i] >= 0); if (counts[i] <= 0 && countTable.PriorFrequencies[i] <= 0 || countTable.PriorFrequencies[i] >= 1) { logOdds[i] = 0; // guarding against infinite log-odds } else { logOdds[i] = (float)Math.Log( (counts[i] + PriorCoef[iCol] * countTable.PriorFrequencies[i]) / (sum - counts[i] + PriorCoef[iCol] * (1 - countTable.PriorFrequencies[i]))); } } }