Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- open System
- open System.IO
- open FSharp.Charting
- let group = [|
- [|1.0; 1.1|];
- [|1.0; 1.0|];
- [|0.0; 0.0|];
- [|0.0; 0.1|]; |]
- let labels = [| "A"; "A"; "B"; "B" |]
- let inline last (arr:_[]) = arr.[arr.Length - 1]
- let vecDist a b =
- Array.map2 (fun x1 x2 -> (x1 - x2) ** 2.0) a b
- |> Array.sum
- |> sqrt
- let classify0 inX dataSet labels k =
- dataSet
- |> Array.map (fun item -> vecDist item inX)
- |> Array.zip labels
- |> Array.sortBy snd
- |> Array.toSeq
- |> Seq.take k
- |> Seq.groupBy fst
- |> Seq.maxBy (fun g -> Seq.length (snd g))
- let fileToMatrix fileName =
- let processEntry (s: string) =
- let elems = s.Trim().Split '\t'
- let nums = elems.[0..2] |> Array.map System.Double.Parse
- let label = last elems
- (nums, label)
- File.ReadAllLines fileName
- |> Array.map processEntry
- |> Array.unzip
- let display data labels =
- let charts =
- Array.zip data labels
- |> Array.groupBy snd
- |> Array.map (fun group ->
- fst group, snd group
- |> Array.map fst
- |> Array.map (fun (nums : double[]) -> nums.[0], nums.[1]))
- |> Array.map (fun series -> Chart.Point(snd series, Name = (fst series)).WithLegend())
- |> Array.toSeq
- |> Chart.Combine
- use form = new System.Windows.Forms.Form(Width=400, Height=300, Visible=true, Text="Hello charting")
- charts.ShowChart() |> ignore
- System.Windows.Forms.Application.Run(form)
- [<EntryPoint>]
- let main argv =
- let x = [| 0.0; 0.0 |]
- let y = [| 3.0; 4.0; 5.0 |]
- let k = 3
- let r = classify0 x group labels 3
- printfn "%A" r
- let bData, bLabels = fileToMatrix "datingTestSet.txt"
- display bData bLabels |> ignore
- printfn "result: %A" (classify0 y bData bLabels k)
- 0 // return an integer exit code
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement