Пример #1
0
class Recognizer():
    def __init__(self):
        self.trainer = None

    def train(self, dataFileName):
        self.trainer = Trainer(dataFileName)
        self.trainer.trainAll()
        self.trainer.dump()

    def load(self):
        trainer = Trainer()
        trainer.load()
        self.trainer = trainer

    def classify(self, X, label1, label2):
        '''
        输入向量X, 在label1, label2间预测它的类属性
        '''
        positiveLabel = min(label1, label2)
        negativeLabel = max(label1, label2)
        svm = self.trainer.getSvmInstance(positiveLabel, negativeLabel)
        y = svm.predict(X)
        if y == 1:
            return positiveLabel
        elif y == -1:
            return negativeLabel
        else:
            raise

    def predict(self, X):
        count_dict = {} #{label : times}
        for i in range(10):
            for j in range(i, 10, 1):
                if i == j:
                    continue
                label = self.classify(X, i, j)
                if count_dict.has_key(label):
                    count_dict[label] += 1
                else:
                    count_dict[label] = 1

        maxTime = -1
        maxLabel = -1
        for label in count_dict:
            time = count_dict[label]
            if time > maxTime:
                maxTime = time
                maxLabel = label
        return maxLabel
Пример #2
0
    def test_getSvm(self):
        return
        trainer = Trainer()
        trainer.load()
        svm1 = trainer.getSvmInstance(6, 7)

        dataSet = DigitDataSet()
        dataSet.load(os.path.join('..', 'data', 'sample')).map(6, 7)

        svm2 = SVM()
        svm2.train(dataSet, 2, 0.0001)

        m,n = dataSet.shape()
        for i in range(m):
            X = dataSet.getData(i)
            y1= svm1.predict(X)
            y2 = svm2.predict(X)
            self.assertTrue(y1 == y2)