fix: miniInfraBayes with interleaved sequence errors.
This commit is contained in:
		
							parent
							
								
									ef34fb34fa
								
							
						
					
					
						commit
						c92d46ed92
					
				
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -163,7 +163,7 @@ proc jitBayesLoop(
 | 
			
		|||
 | 
			
		||||
## Infrabayesianism
 | 
			
		||||
 | 
			
		||||
proc miniInfraBayes(
 | 
			
		||||
proc miniInfraBayesArgminMaxLoss(
 | 
			
		||||
  seqs: seq[seq[string]],
 | 
			
		||||
  observations: seq[string],
 | 
			
		||||
  n_observations_seen: int,
 | 
			
		||||
| 
						 | 
				
			
			@ -195,18 +195,29 @@ proc miniInfraBayes(
 | 
			
		|||
proc getEvens(xs: seq[string]): seq[string] =
 | 
			
		||||
  var evens: seq[string]
 | 
			
		||||
  for i,x in xs:
 | 
			
		||||
    if i%2 == 0:
 | 
			
		||||
    if i mod 2 == 0:
 | 
			
		||||
      evens.add(x)
 | 
			
		||||
  return evens
 | 
			
		||||
 | 
			
		||||
proc getOdds(xs: seq[string]): seq[string] =
 | 
			
		||||
  var odds: seq[string]
 | 
			
		||||
  for i,x in xs:
 | 
			
		||||
    if i%2 == 1:
 | 
			
		||||
    if i mod 2 == 1:
 | 
			
		||||
      odds.add(x)
 | 
			
		||||
  return odds
 | 
			
		||||
 | 
			
		||||
proc miniInfraBayes2(
 | 
			
		||||
proc interleave(xs: seq[string], ys: seq[string]): seq[string] =
 | 
			
		||||
  if xs.len != ys.len:
 | 
			
		||||
    echo "Interleaved sequences have to have the same length; returning empty sequence."
 | 
			
		||||
    return @[]
 | 
			
		||||
  else:
 | 
			
		||||
    var zs: seq[string]
 | 
			
		||||
    for i in 0..<xs.len:
 | 
			
		||||
      zs.add(xs[i])
 | 
			
		||||
      zs.add(ys[i])
 | 
			
		||||
    return zs
 | 
			
		||||
 | 
			
		||||
proc miniInfraBayesArgminMaxLossInterleavedHypotheses(
 | 
			
		||||
  seqs: seq[seq[string]],
 | 
			
		||||
  observations: seq[string],
 | 
			
		||||
  n_observations_seen: int,
 | 
			
		||||
| 
						 | 
				
			
			@ -218,14 +229,14 @@ proc miniInfraBayes2(
 | 
			
		|||
  else:
 | 
			
		||||
    echo "## Mini-infra-bayesianism over environments, where your utility in an environment is just the log-loss in the predictions you make until you become certain that you are in that environment. This time with a twist: You don't have hypotheses over the sequences you observe, but rather over their odd and even position, i.e., you think that you observe interleaved OEIS sequences, (a1, b1, a2, b2, a3, b3). See the README.md for more."
 | 
			
		||||
 | 
			
		||||
  var losses: seq[float]g
 | 
			
		||||
  var losses: seq[float]
 | 
			
		||||
  for i in n_observations_seen..<observations.len:
 | 
			
		||||
    var parity_subsequence: seq[string]
 | 
			
		||||
    if i % 2 == 0:
 | 
			
		||||
    if i mod 2 == 0:
 | 
			
		||||
      parity_subsequence = getEvens(observations[0..<i])
 | 
			
		||||
    else:
 | 
			
		||||
      parity_subsequence = getOdds(observations[0..<i])
 | 
			
		||||
    let predictions = predictContinuation(seqs, parity_subsequence) 
 | 
			
		||||
    let predictions = predictContinuation(seqs, parity_subsequence)
 | 
			
		||||
    echo "### Prediction after seeing ", i, " observations: ", observations[0..<i]
 | 
			
		||||
    print predictions
 | 
			
		||||
    let correct_continuation = observations[i]
 | 
			
		||||
| 
						 | 
				
			
			@ -262,5 +273,9 @@ jitBayesLoop(seqs, observations, 3, 1_000, 30_000)
 | 
			
		|||
echo ""
 | 
			
		||||
 | 
			
		||||
observations = @["1", "2", "3", "23", "11", "18", "77", "46", "84"]
 | 
			
		||||
miniInfraBayes(seqs, observations, 3, "logloss")
 | 
			
		||||
miniInfraBayesArgminMaxLoss(seqs, observations, 3, "logloss")
 | 
			
		||||
echo ""
 | 
			
		||||
 | 
			
		||||
observations = interleave(@["1", "2", "3", "23", "11", "18", "77", "46", "84"], @["2", "11", "13", "23", "47", "59", "71", "83", "107"])
 | 
			
		||||
miniInfraBayesArgminMaxLossInterleavedHypotheses(seqs, observations, 6, "logloss")
 | 
			
		||||
echo ""
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user