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