calculating euclidean distances
arnaucode idoctnef@openmailbox.org
Fri, 16 Jun 2017 10:09:04 +0200
4 files changed,
90 insertions(+),
6 deletions(-)
M
euclideanDistance.go
→
euclideanDistance.go
@@ -1,5 +1,53 @@
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) }
M
main.go
→
main.go
@@ -1,8 +1,11 @@
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) -func main() { - dataset := readDataFile("datasets/poker/poker-hand-training-true.data", "\n", ",") - fmt.Println(dataset) + distances := euclideanDistance(dataset, inputs) + getShortestDistance(distances) }
M
readDataFile.go
→
readDataFile.go
@@ -6,7 +6,7 @@ "strconv"
"strings" ) -func readDataFile(path string, lineSeparation string, valueSeparation string) [][][]int { +func readDataset(path string, lineSeparation string, valueSeparation string) [][][]int { var dataset [][][]int b, err := ioutil.ReadFile(path) check(err)@@ -33,3 +33,26 @@ dataset = append(dataset, datasetLine)
} 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 +}
A
typeConverters.go
@@ -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 + +}