Skip to content

Instantly share code, notes, and snippets.

View actsasgeek's full-sized avatar

Stephyn Butcher actsasgeek

View GitHub Profile
@actsasgeek
actsasgeek / nearest_neighbor_v1.scala
Created June 8, 2011 19:04
"Walking skeleton" of the nearest neighbor algorithm.
class Instance( featureValues: List[Double], var classLabel: String) {
}
class NearestNeighbor( library: List[Instance]) {
def classify( query: Instance) {
query.classLabel = "unknown"
}
}
object NearestNeighbor {
@actsasgeek
actsasgeek / nearest_neighbor_v2.scala
Created June 8, 2011 19:46
Improved version of the Nearest Neighbor "walking skeleton"
class Instance( featureValues: List[Double], classLabel: Option[String] = None) {
def assignClassLabel( assignedClassLabel: Option[String]): Instance = {
new Instance( featureValues, assignedClassLabel)
}
override def toString(): String = {
"<'"+classLabel.getOrElse( "None")+"' is ["+featureValues.mkString( ", ")+"]>"
}
}
@actsasgeek
actsasgeek / nearest_neighbor_v3.scala
Created June 8, 2011 21:29
The distanceTo() method of Instance.
class Instance( val featureValues: List[Double], classLabel: Option[String] = None) {
def assignClassLabel( assignedClassLabel: Option[String]): Instance = {
new Instance( featureValues, assignedClassLabel)
}
def distanceTo( otherInstance: Instance): Double = {
euclideanDistance( featureValues, otherInstance.featureValues)
}
def euclideanDistance( thisVector: List[ Double], thatVector: List[ Double]): Double = {
@actsasgeek
actsasgeek / nearest_neighbor_v4.scala
Created June 9, 2011 02:11
The NearestNeighbor#classify() method.
class NearestNeighbor( library: List[Instance]) {
def classify( query: Instance): Instance = {
val distanceMeasurements = library.map( example => (query.distanceTo( example), example))
val sortedDistanceMeasurements = distanceMeasurements.sortWith(( e1, e2) => ( e1._1 - e2._1) < 0)
val nearestExample = sortedDistanceMeasurements.head._2
query.assignClassLabel( nearestExample.classLabel)
}
}
@actsasgeek
actsasgeek / nearest_neighbor_spec_v1.scala
Created June 9, 2011 02:29
The spec for NearestNeighbor
class NearestNeighborSpec extends Spec with ShouldMatchers {
describe( "A Nearest Neighbor classifier") {
val library = List(
new Instance( List( 3.0, 3.0), Some( "A")),
new Instance( List( 4.0, 2.0), Some( "A")),
new Instance( List( 2.0, 2.0), Some( "B"))
)
val nearestNeighbor = new NearestNeighbor( library)
it( "can find the 1st closest example in the library to a query") {
val query = new Instance( List( 0.0, 0.0))
@actsasgeek
actsasgeek / gist:1015928
Created June 9, 2011 02:31
Results of running the unit test: NearestNeighborSpec
[info] == NearestNeighborSpec ==
[info] A Nearest Neighbor classifier
[info] - can find the 1st closest example in the library to a query
[info] == NearestNeighborSpec ==
[info]
[info] == test-complete ==
[info] == test-complete ==
@actsasgeek
actsasgeek / nearest_neighbor_v5.scala
Created June 9, 2011 17:18
Changes to Nearest Neighbor object to support loading instances from a file.
object NearestNeighbor {
def create( libraryFileName: String): NearestNeighbor = {
val instances = getInstancesFromFile( libraryFileName)
val library = createLibraryFromCSVs( instances)
new NearestNeighbor( library)
}
def getInstancesFromFile( libraryFileName: String): List[ String] = {
Source.fromFile( new File( libraryFileName)).getLines().toList
}
@actsasgeek
actsasgeek / classifier.scala
Created June 9, 2011 17:52
A script to run the Nearest Neighbor algorithm...
val nearestNeighbor = NearestNeighbor.create( args( 0))
val query = Instance.parseString( args( 1))
println( nearestNeighbor.classify( query))
@actsasgeek
actsasgeek / nearest_neighbor_1.0.scala
Created June 9, 2011 17:58
Full source code for kNN with k = 1
import scala.io.Source;
import scala.collection.mutable.ListBuffer;
import java.io.File;
case class Instance( featureValues: List[Double], classLabel: Option[String] = None) {
def assignClassLabel( assignedClassLabel: Option[String]): Instance = {
new Instance( featureValues, assignedClassLabel)
}
@actsasgeek
actsasgeek / nearest_neighbor_spec_1.0.scala
Created June 9, 2011 17:59
Tests for nearest_neighbor.scala
import org.scalatest.Spec
import org.scalatest.matchers.ShouldMatchers
import scala.io.Source;
class InstanceSpec extends Spec with ShouldMatchers {
describe( "An Instance") {
val instance = new Instance( List( 0.0, 0.0))
it( "can calculate the distance between itself and another instance.") {
val otherInstance = new Instance( List( 3.0, 4.0))