get result of near neighbor

This commit is contained in:
arnaucode
2017-06-16 19:11:02 +02:00
parent 81dbde7f2b
commit 1c7156d006
2 changed files with 36 additions and 25 deletions

View File

@@ -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
View File

@@ -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])
}
} }