Skip to content

Instantly share code, notes, and snippets.

@fzawada
Created November 25, 2014 23:26
Show Gist options
  • Save fzawada/3eab6abc685b606a269b to your computer and use it in GitHub Desktop.
Save fzawada/3eab6abc685b606a269b to your computer and use it in GitHub Desktop.
KNN dojo
open System
open System.IO
type Nb = { Digit:int; Pixels:int[]}
let distance p1 p2 =
Array.map2 (fun x1 x2 -> (x1-x2) * (x1-x2)) p1 p2
|> Array.sum
|> float
|> sqrt
let sliceFrom k (x:'a []) = x.[k ..]
let cleanData path =
path
|> File.ReadAllLines
|> Array.map (fun s -> s.Split(','))
|> sliceFrom 1
|> Array.map (Array.map int)
|> Array.map(fun x -> { Digit = x.[0]; Pixels = x.[1..]})
let trainingPath = @"C:\src\Dojo-Digits-Recognizer\Dojo\trainingsample.csv"
let trainingData = cleanData trainingPath
let classify (unknown:Nb) =
let res = trainingData |> Array.minBy (fun n -> distance n.Pixels unknown.Pixels)
res.Digit
let validationPath = @"c:\src\Dojo-Digits-Recognizer\Dojo\validationsample.csv"
let validationData = cleanData validationPath
let classified = validationData |> Array.map(classify)
Array.map2(fun x y -> x.Digit <> y) validationData classified
|> Array.map Convert.ToInt32
|> Array.sum
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment