mirror of
https://github.com/arnaucube/goKNN.git
synced 2026-02-06 19:16:44 +01:00
get result of near neighbor
This commit is contained in:
@@ -1,28 +1,25 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math"
|
||||
)
|
||||
|
||||
func euclideanDistance(dataset [][][]int, inputs [][]int) [][][]float64 {
|
||||
func euclideanDistance(dataset [][][]int, inputLine []int) [][][]float64 {
|
||||
var distances [][][]float64
|
||||
|
||||
for _, inputLine := range inputs {
|
||||
for _, datasetLine := range dataset {
|
||||
datasetLineFloat := arrayIntToFloat64(datasetLine[0])
|
||||
resultDatasetLineFloat := arrayIntToFloat64(datasetLine[1])
|
||||
inputLineFloat := arrayIntToFloat64(inputLine)
|
||||
r := calcDistances(inputLineFloat, datasetLineFloat)
|
||||
//fmt.Println(r)
|
||||
rArr := []float64{r}
|
||||
distance := []float64{r}
|
||||
var newDatasetLine [][]float64
|
||||
newDatasetLine = append(newDatasetLine, datasetLineFloat)
|
||||
newDatasetLine = append(newDatasetLine, rArr)
|
||||
newDatasetLine = append(newDatasetLine, resultDatasetLineFloat)
|
||||
newDatasetLine = append(newDatasetLine, distance)
|
||||
distances = append(distances, newDatasetLine)
|
||||
//passar tot els int de values a float64
|
||||
//distances contains: [[datasetLine], [datasetLineResult], [distanceWithInput]]
|
||||
}
|
||||
}
|
||||
//fmt.Println(train)
|
||||
return distances
|
||||
}
|
||||
|
||||
@@ -36,18 +33,24 @@ func calcDistances(in []float64, ds []float64) float64 {
|
||||
return r
|
||||
}
|
||||
|
||||
func getShortestDistance(dist [][][]float64) {
|
||||
min := dist[0][0]
|
||||
max := dist[0][0]
|
||||
func getShortestDistance(dist [][][]float64) [][]float64 {
|
||||
min := dist[0][2]
|
||||
max := dist[0][2]
|
||||
var datasetNearResult [][]float64
|
||||
for i := 0; i < len(dist); i++ {
|
||||
if dist[i][1][0] > max[0] {
|
||||
//fmt.Println(dist[i][1])
|
||||
if dist[i][2][0] > max[0] {
|
||||
max = dist[i][0]
|
||||
}
|
||||
if dist[i][0][0] < min[0] {
|
||||
/*fmt.Println(min[0])
|
||||
fmt.Println(dist[i][1][0])*/
|
||||
if dist[i][2][0] < min[0] {
|
||||
min = dist[i][0]
|
||||
datasetNearResult = dist[i]
|
||||
}
|
||||
//fmt.Println(dist[i][1])
|
||||
}
|
||||
fmt.Println(min)
|
||||
fmt.Println(max)
|
||||
/*fmt.Println(min)
|
||||
fmt.Println(max)*/
|
||||
return datasetNearResult
|
||||
}
|
||||
|
||||
12
main.go
12
main.go
@@ -1,11 +1,19 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
dataset := readDataset("datasets/poker/poker-hand-training-true.data", "\n", ",")
|
||||
//fmt.Println(dataset)
|
||||
inputs := readInputs("datasets/prova.data", "\n", ",")
|
||||
//fmt.Println(inputs)
|
||||
|
||||
distances := euclideanDistance(dataset, inputs)
|
||||
getShortestDistance(distances)
|
||||
var datasetDistances [][][]float64
|
||||
for _, input := range inputs {
|
||||
datasetDistances = euclideanDistance(dataset, input)
|
||||
r := getShortestDistance(datasetDistances)
|
||||
fmt.Println(input)
|
||||
fmt.Println(r)
|
||||
fmt.Println(r[1])
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user