mirror of
https://github.com/arnaucube/galdric.git
synced 2026-02-07 19:26:50 +01:00
almost implemented k
This commit is contained in:
24
README.md
24
README.md
@@ -8,3 +8,27 @@ machine learning server, for image classification
|
|||||||
- For the input images, calculates the euclidean distances
|
- For the input images, calculates the euclidean distances
|
||||||
- Gets the nearest neighbour
|
- Gets the nearest neighbour
|
||||||
- Show the result, that is the label of the object in the image
|
- Show the result, that is the label of the object in the image
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-------------
|
||||||
|
|
||||||
|
send file over ssh:
|
||||||
|
```
|
||||||
|
scp dataset.tar.gz root@51.255.193.106:/root/galdric
|
||||||
|
```
|
||||||
|
|
||||||
|
on the server, untar file:
|
||||||
|
```
|
||||||
|
tar -xvzf dataset.tar.gz
|
||||||
|
```
|
||||||
55
knn.go
55
knn.go
@@ -1,5 +1,10 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"sort"
|
||||||
|
)
|
||||||
|
|
||||||
func euclideanDist(img1, img2 [][]float64) float64 {
|
func euclideanDist(img1, img2 [][]float64) float64 {
|
||||||
var dist float64
|
var dist float64
|
||||||
for i := 0; i < len(img1); i++ {
|
for i := 0; i < len(img1); i++ {
|
||||||
@@ -11,17 +16,55 @@ func euclideanDist(img1, img2 [][]float64) float64 {
|
|||||||
return dist
|
return dist
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Neighbour struct {
|
||||||
|
Dist float64
|
||||||
|
Label string
|
||||||
|
}
|
||||||
|
|
||||||
|
func isNeighbour(neighbours []Neighbour, dist float64, label string) []Neighbour {
|
||||||
|
var temp []Neighbour
|
||||||
|
|
||||||
|
for i := 0; i < len(neighbours); i++ {
|
||||||
|
temp = append(temp, neighbours[i])
|
||||||
|
}
|
||||||
|
ntemp := Neighbour{dist, label}
|
||||||
|
temp = append(temp, ntemp)
|
||||||
|
|
||||||
|
//now, sort the temp array
|
||||||
|
sort.Slice(temp, func(i, j int) bool {
|
||||||
|
return temp[i].Dist < temp[j].Dist
|
||||||
|
})
|
||||||
|
|
||||||
|
for i := 0; i < len(neighbours); i++ {
|
||||||
|
neighbours[i] = temp[i]
|
||||||
|
}
|
||||||
|
|
||||||
|
return neighbours
|
||||||
|
}
|
||||||
|
|
||||||
func knn(dataset Dataset, input [][]float64) string {
|
func knn(dataset Dataset, input [][]float64) string {
|
||||||
d := euclideanDist(dataset["leopard"][0], input)
|
k := 3
|
||||||
label := "lamp"
|
var neighbours []Neighbour
|
||||||
for k, v := range dataset {
|
//d := euclideanDist(dataset["leopard"][0], input)
|
||||||
|
for i := 0; i < k; i++ {
|
||||||
|
/*neighbours[i].Dist = euclideanDist(dataset["leopard"][0], input)
|
||||||
|
neighbours[i].Label = "leopard"*/
|
||||||
|
neighbours = append(neighbours, Neighbour{euclideanDist(dataset["leopard"][0], input), "leopard"})
|
||||||
|
}
|
||||||
|
for l, v := range dataset {
|
||||||
for i := 0; i < len(v); i++ {
|
for i := 0; i < len(v); i++ {
|
||||||
dNew := euclideanDist(v[i], input)
|
dNew := euclideanDist(v[i], input)
|
||||||
if dNew < d {
|
/*if dNew < d {
|
||||||
d = dNew
|
d = dNew
|
||||||
label = k
|
label = l
|
||||||
|
}*/
|
||||||
|
neighbours = isNeighbour(neighbours, dNew, l)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for i := 0; i < len(neighbours); i++ {
|
||||||
|
fmt.Print(neighbours[i].Label + " - ")
|
||||||
|
fmt.Println(neighbours[i].Dist)
|
||||||
}
|
}
|
||||||
return label
|
|
||||||
|
return neighbours[0].Label
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user