-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
aeb7356
commit 6f8b8ab
Showing
8 changed files
with
532 additions
and
79 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
module knn | ||
|
||
open System | ||
open System.IO | ||
open Deedle | ||
open FSharp.Data | ||
open XPlot.GoogleCharts | ||
open XPlot.GoogleCharts.Deedle | ||
|
||
type Entry = {Label: string; Values: int list} | ||
|
||
// Calculates Squared Euclidean distance between pixels values of two images | ||
let distance (values1: int list, values2: int list) = | ||
values1 | ||
|> List.zip values2 | ||
|> List.map (fun it -> Math.Pow(float(fst it) - float(snd it), 2.0)) | ||
|> List.sum | ||
|
||
// Loading valies from training/test data. This assumes that the first one is the | ||
// label/class/category of the data | ||
let loadValues (filename: String) = | ||
File.ReadAllLines(filename) | ||
|> Seq.ofArray | ||
// skip header | ||
|> Seq.skip (1) | ||
|> Seq.map (fun line -> | ||
{ | ||
Label = line.Substring(0, line.IndexOf(',')); | ||
Values = line.Split(',') | ||
|> Seq.ofArray | ||
// skip label | ||
|> Seq.skip (1) | ||
|> Seq.map (fun n -> Convert.ToInt32(n)) | ||
|> Seq.toList | ||
}) | ||
|> Seq.toList | ||
|
||
let knn (entries: Entry list, newEntry: string * int[], k: int) = | ||
entries |> List.map (fun x -> (x.Label, distance (x.Values, snd (newEntry) |> Array.toList))) | ||
|> List.sortBy (fun x -> snd x) | ||
|> Seq.ofList | ||
|> Seq.take k | ||
|> Seq.countBy (fun x -> fst x) | ||
|> Seq.toList | ||
|
||
|
||
// location of the csv training file | ||
let loaded = loadValues @"digit-recognizer.csv" | ||
|
||
// this entry is '5' from the training set | ||
let newEntry = ("X",[|0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;41;149;156;179;254;254;201;119;46;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;13;147;241;253;253;254;253;253;253;253;245;160;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;31;224;253;253;180;174;175;174;174;174;174;223;247;145;6;0;0;0;0;0;0;0;0;0;0;0;0;7;197;254;253;165;2;0;0;0;0;0;0;12;102;184;16;0;0;0;0;0;0;0;0;0;0;0;0;152;253;254;162;18;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;235;254;158;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;74;250;253;15;0;0;0;16;20;19;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;199;253;253;0;0;25;130;235;254;247;145;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;20;253;253;177;100;219;240;253;253;254;253;253;125;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;5;193;253;253;254;253;253;200;155;155;238;253;229;23;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;61;249;254;241;150;30;0;0;0;215;254;254;58;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;36;39;30;0;0;0;0;0;214;253;234;31;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;41;241;253;183;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;201;253;253;102;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;114;254;253;154;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;62;254;255;241;30;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;10;118;235;253;249;103;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;55;81;0;102;211;253;253;253;135;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;79;243;234;254;253;253;216;117;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;48;245;253;254;207;126;27;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0|]) | ||
// 5 nearest neigbors | ||
let k = 5 | ||
// getting back the labels for each of the neighbors | ||
let labels = knn (loaded, newEntry, k) | ||
// locating the guess. the one with the maximum votes | ||
let guess = fst (labels |> List.item 0) | ||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
module linearregression | ||
|
||
open System | ||
open System.IO | ||
open Deedle | ||
open FSharp.Data | ||
open XPlot.GoogleCharts | ||
open XPlot.GoogleCharts.Deedle | ||
open MathNet.Numerics.LinearAlgebra | ||
open MathNet.Numerics.LinearRegression | ||
open MathNet.Numerics.Fit | ||
|
||
let rows = File.ReadAllLines(@"auto-mpg.csv") | ||
|> Array.map (fun t -> t.Split(',') | ||
|> Array.map (fun t -> float t)) | ||
let mpgData = DenseMatrix.ofRowArrays rows | ||
|
||
let myMat = matrix [[1.0;2.0;3.0] | ||
[4.0;5.0;2.0] | ||
[7.0;0.8;9.0]] | ||
|
||
let qr = myMat.QR() | ||
|
||
let x = [14;16;27;42;39;50;83] | ||
let y = [02;05;07;09;10;13;20] | ||
let y' = [3;4;5;7;23;21;34] | ||
|
||
let calculateCoefficients x y = | ||
let xy = List.zip x y | ||
|> List.map (fun it -> float (fst it) * float (snd it)) | ||
|> List.sum | ||
let x_ = x |> List.map (fun z -> float z) | ||
|> List.average | ||
let y_ = y |> List.map (fun z -> float z) | ||
|> List.average | ||
let sx_2 = x |> List.sumBy (fun t -> float t * float t) | ||
let sy_2 = y |> List.sumBy (fun t -> float t * float t) | ||
let n = float x.Length | ||
let b1 = (xy - n * x_ * y_)/(sx_2 - n * x_ * x_) | ||
let b0 = y_ - b1 * x_ | ||
(b0, b1) | ||
|
||
let coef = calculateCoefficients x y | ||
let b0 = fst coef | ||
let b1 = snd coef | ||
|
||
let regressionPairs = x |> List.map ( fun xElem -> (xElem, b0 + b1* float xElem )) | ||
|
||
let pairs = List.zip x y |
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,9 @@ | ||
# fslab-ml | ||
Some old ML code in F# in Mac Environment | ||
|
||
\pi | ||
|
||
# Euclidean distance | ||
**Euclidean distance** | ||
d^2(p,q) = (p1-q1)^2+(p2-q2)^2+...+(pi-qi)^2+...+(pn-qn)^2 | ||
|
||
**Entropy** | ||
H(X) = sum(P(xi)*I(xi)) = -sum(P(xi) * logb * p(xi)) | ||
|
Oops, something went wrong.