/*public BayesContinuousCondition( int[] sum, int[] sumSq ) * { * m_sum = sum; * m_sumSq = sumSq; * }*/ public void Init(BayesAction outcome) { int length = m_sum.Length; for (int i = 0; i < length; i++) { m_mean[i] = Mean(m_sum[i], outcome.GetCounts()[i]); m_stdDev[i] = StdDev(m_sumSq[i], m_sum[i], outcome.GetCount(i)); } }
public void BuildStats() { int[] outcomes = outcomeAction.GetCounts(); int numCont = continuousConditions.Length; int numDisc = discreteConditions.Length; // Accumulate all the counts and sums foreach (Observation obs in obsTab) { int outcome = obs.outcome; for (int i = 0; i < numCont; i++) { int[] sum = continuousConditions[i].GetSums(); sum[outcome] += obs.continuousValues[i]; int[] sumSq = continuousConditions[i].GetSqSums(); sumSq[outcome] += obs.continuousValues[i] * obs.continuousValues[i]; } for (int i = 0; i < numDisc; i++) { int[,] count = discreteConditions[i].GetCounts(); int val = obs.discreteValues[i]; count[val, outcome]++; } outcomes[outcome]++; } for (int i = 0; i < numCont; i++) { continuousConditions[i].Init(outcomeAction); } for (int i = 0; i < numDisc; i++) { discreteConditions[i].CalcProps(outcomeAction); } outcomeAction.CalcProps(obsTab.Count); }
/*public BayesContinuousCondition( int[] sum, int[] sumSq ) { m_sum = sum; m_sumSq = sumSq; }*/ public void Init( BayesAction outcome ) { int length = m_sum.Length; for( int i = 0; i < length; i++ ) { m_mean[ i ] = Mean( m_sum[ i ], outcome.GetCounts()[ i ] ); m_stdDev[ i ] = StdDev( m_sumSq[ i ], m_sum[ i ], outcome.GetCount( i ) ); } }
public void CalcProps(BayesAction outcome) { int[] n = outcome.GetCounts(); for (int i = 0; i < m_counts.GetLength(0); i++) { for (int j = 0; j < m_counts.GetLength(1); j++) { // Detects and corrects a 0 count by assigning a proportion // that is 1/10 the size of a proportion for a count of 1 if (m_counts[i, j] == 0) { m_proportions[i, j] = 0.1d / n[j]; // Can't have 0 } else { m_proportions[i, j] = (double)m_counts[i, j] / n[j]; } } } }
public void CalcProps( BayesAction outcome ) { int[] n = outcome.GetCounts(); for (int i = 0; i < m_counts.GetLength( 0 ); i++ ) { for( int j = 0; j < m_counts.GetLength( 1 ); j++ ) { // Detects and corrects a 0 count by assigning a proportion // that is 1/10 the size of a proportion for a count of 1 if ( m_counts[ i, j ] == 0 ) { m_proportions[ i, j ] = 0.1d / n[ j ]; // Can't have 0 } else { m_proportions[ i, j ] = (double)m_counts[ i, j ] / n[ j ]; } } } }