Skip to content

Commit

Permalink
Iterative kNN with no flash
Browse files Browse the repository at this point in the history
  • Loading branch information
Charles Marsh committed Apr 30, 2014
1 parent e8f0eba commit c1c16e8
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 16 deletions.
Empty file added __init__.py
Empty file.
23 changes: 23 additions & 0 deletions learners/knn.py
@@ -0,0 +1,23 @@
from sklearn.neighbors import KNeighborsClassifier
import numpy as np


class kNN(object):

def __init__(self, classes):
self.model = KNeighborsClassifier(n_neighbors=2)
self.X = None
self.y = None

def partial_fit(self, x, y):
if self.X is None and self.y is None:
self.X = np.array([x])
self.y = y
else:
self.X = np.vstack((self.X, x))
self.y = np.hstack((self.y, y))

self.model.fit(self.X, self.y)

def predict(self, x):
return self.model.predict(x)[0]
14 changes: 8 additions & 6 deletions main.py
@@ -1,21 +1,23 @@
from sklearn.datasets import load_svmlight_file
import numpy as np
from random import shuffle
import warnings

from sklearn.datasets import load_svmlight_file
from utils.experiment import test

from ensemblers.adaboost import AdaBooster
from ensemblers.ogboost import OGBooster
from ensemblers.ocpboost import OCPBooster
from ensemblers.expboost import EXPBooster

from learners.sk_naive_bayes import NaiveBayes
from learners.perceptron import Perceptron
from learners.random_stump import RandomStump
from learners.decision_stump import DecisionStump
from learners.ce_knn import kNN
from learners.knn import kNN
from learners.histogram import RNB
from learners.winnow import Winnow
from utils.experiment import test
import warnings
warnings.filterwarnings("ignore", module="sklearn")

warnings.filterwarnings("ignore", module="sklearn")

def loadData(filename):
X, y = load_svmlight_file(filename)
Expand Down
30 changes: 20 additions & 10 deletions utils/test.py
@@ -1,23 +1,33 @@
import unittest
from perceptron import Perceptron
import sys
sys.path.append("../")
import numpy as np
from ..learners.knn import kNN


class TestPerceptron(unittest.TestCase):
class TestLearners(unittest.TestCase):

def testSimple(self):
def setUp(self):
x1 = [1, 2, 3]
y1 = 1
x2 = [1, 3, 5]
y2 = -1
y2 = 1
x3 = [-1, -1, -1]
y3 = 1
y3 = -1
x4 = [1, 2, 4]
y4 = 1
data = [(x1, y1), (x2, y2), (x3, y3), (x4, y4)]
p = Perceptron()
for (x, y) in data:
p.update(x, y)
self.assertEqual(p.w, [1.0, 1.0, 2.0])
x5 = [-0.5, -0.5, 0]
y5 = -1
data = [(x1, y1), (x2, y2), (x3, y3), (x4, y4), (x5, y5)]
self.data = [(np.array(x), np.array([y])) for (x, y) in data]
self.labels = np.array([-1, 1])

def testKNN(self):
model = kNN(self.labels)
for (x, y) in self.data:
model.partial_fit(x, y)
print model.predict(np.array([0, 0, 0]))


if __name__ == '__main__':
unittest.main()

0 comments on commit c1c16e8

Please sign in to comment.