mirror of
https://github.com/arnaucube/goKNN.git
synced 2026-02-07 03:26:40 +01:00
calculating euclidean distances
This commit is contained in:
@@ -1,5 +1,53 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
func euclideanDistance(dataset [][][]int) {
|
import (
|
||||||
|
"fmt"
|
||||||
|
"math"
|
||||||
|
)
|
||||||
|
|
||||||
|
func euclideanDistance(dataset [][][]int, inputs [][]int) [][][]float64 {
|
||||||
|
var distances [][][]float64
|
||||||
|
|
||||||
|
for _, inputLine := range inputs {
|
||||||
|
for _, datasetLine := range dataset {
|
||||||
|
datasetLineFloat := arrayIntToFloat64(datasetLine[0])
|
||||||
|
inputLineFloat := arrayIntToFloat64(inputLine)
|
||||||
|
r := calcDistances(inputLineFloat, datasetLineFloat)
|
||||||
|
//fmt.Println(r)
|
||||||
|
rArr := []float64{r}
|
||||||
|
var newDatasetLine [][]float64
|
||||||
|
newDatasetLine = append(newDatasetLine, datasetLineFloat)
|
||||||
|
newDatasetLine = append(newDatasetLine, rArr)
|
||||||
|
distances = append(distances, newDatasetLine)
|
||||||
|
//passar tot els int de values a float64
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//fmt.Println(train)
|
||||||
|
return distances
|
||||||
|
}
|
||||||
|
|
||||||
|
func calcDistances(in []float64, ds []float64) float64 {
|
||||||
|
var r float64
|
||||||
|
r = 0
|
||||||
|
for i := 0; i < len(in); i++ {
|
||||||
|
r = r + (in[i] * ds[i])
|
||||||
|
}
|
||||||
|
r = math.Sqrt(r)
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
func getShortestDistance(dist [][][]float64) {
|
||||||
|
min := dist[0][0]
|
||||||
|
max := dist[0][0]
|
||||||
|
for i := 0; i < len(dist); i++ {
|
||||||
|
if dist[i][1][0] > max[0] {
|
||||||
|
max = dist[i][0]
|
||||||
|
}
|
||||||
|
if dist[i][0][0] < min[0] {
|
||||||
|
min = dist[i][0]
|
||||||
|
}
|
||||||
|
//fmt.Println(dist[i][1])
|
||||||
|
}
|
||||||
|
fmt.Println(min)
|
||||||
|
fmt.Println(max)
|
||||||
}
|
}
|
||||||
|
|||||||
11
main.go
11
main.go
@@ -1,8 +1,11 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import "fmt"
|
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
dataset := readDataFile("datasets/poker/poker-hand-training-true.data", "\n", ",")
|
dataset := readDataset("datasets/poker/poker-hand-training-true.data", "\n", ",")
|
||||||
fmt.Println(dataset)
|
//fmt.Println(dataset)
|
||||||
|
inputs := readInputs("datasets/prova.data", "\n", ",")
|
||||||
|
//fmt.Println(inputs)
|
||||||
|
|
||||||
|
distances := euclideanDistance(dataset, inputs)
|
||||||
|
getShortestDistance(distances)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
func readDataFile(path string, lineSeparation string, valueSeparation string) [][][]int {
|
func readDataset(path string, lineSeparation string, valueSeparation string) [][][]int {
|
||||||
var dataset [][][]int
|
var dataset [][][]int
|
||||||
b, err := ioutil.ReadFile(path)
|
b, err := ioutil.ReadFile(path)
|
||||||
check(err)
|
check(err)
|
||||||
@@ -33,3 +33,26 @@ func readDataFile(path string, lineSeparation string, valueSeparation string) []
|
|||||||
}
|
}
|
||||||
return dataset
|
return dataset
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func readInputs(path string, lineSeparation string, valueSeparation string) [][]int {
|
||||||
|
var dataset [][]int
|
||||||
|
b, err := ioutil.ReadFile(path)
|
||||||
|
check(err)
|
||||||
|
str := string(b)
|
||||||
|
str = strings.Replace(str, "\r", "", -1)
|
||||||
|
lines := strings.Split(str, lineSeparation)
|
||||||
|
for _, v1 := range lines {
|
||||||
|
params := strings.Split(v1, valueSeparation)
|
||||||
|
//var datasetLine [][]int
|
||||||
|
var datasetLineEntry []int
|
||||||
|
for _, v2 := range params {
|
||||||
|
value, err := strconv.Atoi(v2)
|
||||||
|
check(err)
|
||||||
|
datasetLineEntry = append(datasetLineEntry, value)
|
||||||
|
|
||||||
|
}
|
||||||
|
//datasetLine = append(datasetLine, datasetLineEntry)
|
||||||
|
dataset = append(dataset, datasetLineEntry)
|
||||||
|
}
|
||||||
|
return dataset
|
||||||
|
}
|
||||||
|
|||||||
10
typeConverters.go
Normal file
10
typeConverters.go
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
func arrayIntToFloat64(arr []int) []float64 {
|
||||||
|
var r []float64
|
||||||
|
for i := 0; i < len(arr); i++ {
|
||||||
|
r = append(r, float64(arr[i]))
|
||||||
|
}
|
||||||
|
return r
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user