@ -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) |
||||
} |
} |
@ -1,8 +1,11 @@ |
|||||
package main |
package main |
||||
|
|
||||
import "fmt" |
|
||||
|
|
||||
func main() { |
func main() { |
||||
dataset := readDataFile("datasets/poker/poker-hand-training-true.data", "\n", ",") |
|
||||
fmt.Println(dataset) |
|
||||
|
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) |
||||
} |
} |
@ -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 |
||||
|
|
||||
|
} |