Group work for a Monash Research Methods course
1class ImageClassifier:
2 """Class to create an ImageClassifier from a regular classifier with 5
3 methods that are common amongst classifiers.
4 """
5
6 def __init__(self, clf, *args, **kwargs):
7 self.clf = clf(*args, **kwargs)
8
9 def fit(self, X, *args, **kwargs):
10 X = X.reshape((len(X), -1))
11 return self.clf.fit(X, *args, **kwargs)
12
13 def predict(self, X, *args, **kwargs):
14 X = X.reshape((len(X), -1))
15 return self.clf.predict(X, *args, **kwargs)
16
17 def score(self, X, *args, **kwargs):
18 X = X.reshape((len(X), -1))
19 return self.clf.score(X, *args, **kwargs)
20
21 def get_params(self, *args, **kwargs):
22 return self.clf.get_params(*args, **kwargs)
23
24 def set_params(self, **params):
25 return self.set_params(**params)
26
27if __name__ == '__main__':
28
29 # Import datasets, classifiers and performance metrics
30 from sklearn import datasets, svm, metrics
31
32 # The digits dataset
33 digits = datasets.load_digits()
34
35 n_samples = len(digits.images)
36 data = digits.images
37
38 # Create a classifier: a support vector classifier
39 classifier = ImageClassifier(svm.SVC, gamma=0.001)
40
41 # We learn the digits on the first half of the digits
42 classifier.fit(data[:n_samples // 2], digits.target[:n_samples // 2])
43
44 # Now predict the value of the digit on the second half:
45 expected = digits.target[n_samples // 2:]
46 predicted = classifier.predict(data[n_samples // 2:])
47
48 print("Classification report for classifier %s:\n%s\n"
49 % (classifier, metrics.classification_report(expected, predicted)))
50 print("Confusion matrix:\n%s" % metrics.confusion_matrix(expected, predicted))