Advertisement
evilbloodydemon

Untitled

Jul 20th, 2015
285
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 1.94 KB | None | 0 0
  1. open System
  2. open System.IO
  3. open FSharp.Charting
  4.  
  5. let group = [|
  6.     [|1.0; 1.1|];
  7.     [|1.0; 1.0|];
  8.     [|0.0; 0.0|];
  9.     [|0.0; 0.1|]; |]
  10.  
  11. let labels = [| "A"; "A"; "B"; "B" |]
  12.  
  13. let inline last (arr:_[]) = arr.[arr.Length - 1]
  14.  
  15. let vecDist a b =
  16.     Array.map2 (fun x1 x2 -> (x1 - x2) ** 2.0) a b
  17.     |> Array.sum
  18.     |> sqrt
  19.  
  20.  
  21. let classify0 inX dataSet labels k =
  22.     dataSet
  23.     |> Array.map (fun item -> vecDist item inX)
  24.     |> Array.zip labels
  25.     |> Array.sortBy snd
  26.     |> Array.toSeq
  27.     |> Seq.take k
  28.     |> Seq.groupBy fst
  29.     |> Seq.maxBy (fun g -> Seq.length (snd g))
  30.  
  31. let fileToMatrix fileName =
  32.     let processEntry (s: string) =
  33.         let elems = s.Trim().Split '\t'
  34.         let nums = elems.[0..2] |> Array.map System.Double.Parse
  35.         let label = last elems
  36.         (nums, label)
  37.  
  38.     File.ReadAllLines fileName
  39.     |> Array.map processEntry
  40.     |> Array.unzip
  41.  
  42.  
  43. let display data labels =
  44.     let charts =
  45.         Array.zip data labels
  46.         |> Array.groupBy snd
  47.         |> Array.map (fun group ->
  48.                         fst group, snd group
  49.                                     |> Array.map fst
  50.                                     |> Array.map (fun (nums : double[]) -> nums.[0], nums.[1]))
  51.         |> Array.map (fun series -> Chart.Point(snd series, Name = (fst series)).WithLegend())
  52.         |> Array.toSeq
  53.         |> Chart.Combine
  54.  
  55.     use form = new System.Windows.Forms.Form(Width=400, Height=300, Visible=true, Text="Hello charting")
  56.     charts.ShowChart() |> ignore
  57.     System.Windows.Forms.Application.Run(form)
  58.    
  59.  
  60. [<EntryPoint>]
  61. let main argv =
  62.     let x = [| 0.0; 0.0 |]
  63.     let y = [| 3.0; 4.0; 5.0 |]
  64.     let k = 3
  65.  
  66.     let r = classify0 x group labels 3
  67.  
  68.     printfn "%A" r
  69.  
  70.     let bData, bLabels = fileToMatrix "datingTestSet.txt"
  71.  
  72.     display bData bLabels |> ignore
  73.  
  74.     printfn "result: %A" (classify0 y bData bLabels k)
  75.  
  76.     0 // return an integer exit code
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement