Spaces:
Running
Running
File size: 2,408 Bytes
b110593 |
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 84 85 86 87 88 89 90 91 |
// _ _
// __ _____ __ ___ ___ __ _| |_ ___
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \
// \ V V / __/ (_| |\ V /| | (_| | || __/
// \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___|
//
// Copyright © 2016 - 2024 Weaviate B.V. All rights reserved.
//
// CONTACT: [email protected]
//
package projector
import "github.com/weaviate/weaviate/entities/errorcompounder"
type Params struct {
Enabled bool
Algorithm *string // optional parameter
Dimensions *int // optional parameter
Perplexity *int // optional parameter
Iterations *int // optional parameter
LearningRate *int // optional parameter
IncludeNeighbors bool
}
func (p *Params) SetDefaultsAndValidate(inputSize, dims int) error {
p.setDefaults(inputSize, dims)
return p.validate(inputSize, dims)
}
func (p *Params) setDefaults(inputSize, dims int) {
perplexity := p.min(inputSize-1, 5)
p.Algorithm = p.optionalString(p.Algorithm, "tsne")
p.Dimensions = p.optionalInt(p.Dimensions, 2)
p.Perplexity = p.optionalInt(p.Perplexity, perplexity)
p.Iterations = p.optionalInt(p.Iterations, 100)
p.LearningRate = p.optionalInt(p.LearningRate, 25)
}
func (p *Params) validate(inputSize, dims int) error {
ec := &errorcompounder.ErrorCompounder{}
if *p.Algorithm != "tsne" {
ec.Addf("algorithm %s is not supported: must be one of: tsne", *p.Algorithm)
}
if *p.Perplexity >= inputSize {
ec.Addf("perplexity must be smaller than amount of items: %d >= %d", *p.Perplexity, inputSize)
}
if *p.Iterations < 1 {
ec.Addf("iterations must be at least 1, got: %d", *p.Iterations)
}
if *p.LearningRate < 1 {
ec.Addf("learningRate must be at least 1, got: %d", *p.LearningRate)
}
if *p.Dimensions < 1 {
ec.Addf("dimensions must be at least 1, got: %d", *p.Dimensions)
}
if *p.Dimensions >= dims {
ec.Addf("dimensions must be smaller than source dimensions: %d >= %d", *p.Dimensions, dims)
}
return ec.ToError()
}
func (p *Params) min(a, b int) int {
if a < b {
return a
}
return b
}
func (p Params) optionalString(in *string, defaultValue string) *string {
if in == nil {
return &defaultValue
}
return in
}
func (p Params) optionalInt(in *int, defaultValue int) *int {
if in == nil {
return &defaultValue
}
return in
}
|