Spaces:
Sleeping
Sleeping
File size: 2,285 Bytes
eb2dca9 48d465b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
import Random: randperm
# Sum of square error between two arrays
function SSE(x::Array{Float32}, y::Array{Float32})::Float32
diff = (x - y)
return sum(diff .* diff)
end
function SSE(x::Nothing, y::Array{Float32})::Float32
return 1f9
end
# Sum of square error between two arrays, with weights
function SSE(x::Array{Float32}, y::Array{Float32}, w::Array{Float32})::Float32
diff = (x - y)
return sum(diff .* diff .* w)
end
function SSE(x::Nothing, y::Array{Float32}, w::Array{Float32})::Float32
return Nothing
end
# Mean of square error between two arrays
function MSE(x::Nothing, y::Array{Float32})::Float32
return 1f9
end
# Mean of square error between two arrays
function MSE(x::Array{Float32}, y::Array{Float32})::Float32
return SSE(x, y)/size(x)[1]
end
# Mean of square error between two arrays
function MSE(x::Nothing, y::Array{Float32}, w::Array{Float32})::Float32
return 1f9
end
# Mean of square error between two arrays
function MSE(x::Array{Float32}, y::Array{Float32}, w::Array{Float32})::Float32
return SSE(x, y, w)/sum(w)
end
if weighted
const avgy = sum(y .* weights)/sum(weights)
const baselineMSE = MSE(y, convert(Array{Float32, 1}, ones(len) .* avgy), weights)
else
const avgy = sum(y)/len
const baselineMSE = MSE(y, convert(Array{Float32, 1}, ones(len) .* avgy))
end
# Score an equation
function scoreFunc(tree::Node)::Float32
prediction = evalTreeArray(tree)
if prediction === nothing
return 1f9
end
if weighted
mse = MSE(prediction, y, weights)
else
mse = MSE(prediction, y)
end
return mse / baselineMSE + countNodes(tree)*parsimony
end
# Score an equation with a small batch
function scoreFuncBatch(tree::Node)::Float32
# batchSize
batch_idx = randperm(len)[1:batchSize]
batch_X = X[batch_idx, :]
prediction = evalTreeArray(tree, batch_X)
if prediction === nothing
return 1f9
end
size_adjustment = 1f0
batch_y = y[batch_idx]
if weighted
batch_w = weights[batch_idx]
mse = MSE(prediction, batch_y, batch_w)
size_adjustment = 1f0 * len / batchSize
else
mse = MSE(prediction, batch_y)
end
return size_adjustment * mse / baselineMSE + countNodes(tree)*parsimony
end
|