-
Notifications
You must be signed in to change notification settings - Fork 0
/
similaritytable.go
43 lines (30 loc) · 1.2 KB
/
similaritytable.go
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
package algorithms
import (
"sort"
"../datasets"
"../diabetesdata"
"../support"
)
type SimilarityMeasure struct {
CosineSimilarity float64
Index int
}
var SimilarityTable []SimilarityMeasure // stores the indesx and measure of the closest records
func BuildSimilarityTable(testdata diabetesdata.PimaDiabetesRecord) {
elementsToCompare := support.SizeOfPimaDiabetesRecord() - 1 // excluse the actual result TestedPositive
// measure similarity against each record in training set
SimilarityTable = []SimilarityMeasure{} // reset on each pass
for index := 0; index < len(datasets.PimaTrainingData); index++ {
var measure SimilarityMeasure
measure.Index = index
vector1 := anonymiseDiabetesRecord(datasets.PimaTrainingData[index])
vector2 := anonymiseDiabetesRecord(testdata)
measure.CosineSimilarity = support.CosineSimilarity(vector1, vector2, elementsToCompare)
SimilarityTable = append(SimilarityTable, measure)
}
// sort by cosine measure to get most similar at the lowest index
sort.Slice(SimilarityTable[:], func(i, j int) bool {
return SimilarityTable[i].CosineSimilarity > SimilarityTable[j].CosineSimilarity
})
}
// end of file