-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathknn-digits.rkt
36 lines (28 loc) · 960 Bytes
/
knn-digits.rkt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#lang racket
;; Luke Miles, June 2015
(require "knn.rkt")
(define (string->digits str)
(for/list ([char (in-string str)])
(- (char->integer char) 48)))
(define (parse-data ls)
(if (null? ls)
'()
(begin
(let-values ([(soon later) (split-at ls 32)])
(cons (cons (apply append (map string->digits soon))
(string->number (string-trim (car later))))
(parse-data (cdr later)))))))
(define (parse-file path)
(call-with-input-file
path
(λ (in)
(parse-data (string-split (string-trim (port->string in))
"\n")))))
(define train-data (parse-file "data/train.txt"))
(define test-data (parse-file "data/test.txt"))
(define (distance p1 p2)
(for/sum ([x1 p1] [x2 p2]) (sqr (- x1 x2))))
(define knn-digits (make-knn-classifier train-data 8 distance))
(provide knn-digits)
(test-classifier knn-digits test-data)
; above line returns 0.9671675013912076