def startTraining(self):
        # buat matriks elemen 1 untuk klasifikasi objek dan elemen -1 untuk klasifikasi bukan objek
        kelasObjek = np.ones(len(
            self.vektorObjek))  # kelas 1 menandakan klasifikasi objek
        kelasNonObjek = np.ones(
            len(self.vektorNonObjek
                )) * -1  # kelas -1 menandakan klasifikasi bukan objek

        # push ke stack dari data kelas diatas untuk data train kelas klasifikasi (horizontal stack)
        trainDataY = np.hstack((kelasObjek, kelasNonObjek))
        # print trainDataY,np.size(trainDataY)

        dataVektor = []
        # Push fitur vektor objek ke array dataVektor, buat stack ke array trainDataX (vertical stack)
        for fiturVektor in self.vektorObjek:
            dataVektor.append(fiturVektor)
            trainDataX = np.vstack(
                dataVektor)  # buat stack matriks banyakdata*banyakvektor

        # Lanjutkan push fitur vektor yang bukan objek ke array dataVektor, lalu push ke stack trainDataX
        for fiturVektor in self.vektorNonObjek:
            dataVektor.append(fiturVektor)
            trainDataX = np.vstack(dataVektor)
        # print np.size(trainDataX)
        isSave = raw_input("Simpan data ke dataset? (y/n): ")
        if isSave == "y":
            np.savetxt("dataX.csv", trainDataX, delimiter=",")

        # diperoleh array matriks trainDataX yang berukuran banyak data latih * jumlah vektor per data citra
        # dan array matriks trainDataY yang berisi nilai klasifikasi, untuk selanjutnya ditraining menggunakan SVM
        print "Training vektor dengan SVM..."
        clf = SVM(kernel="linear", galat=1e-2, C=0.4)
        clf.fit(trainDataX, trainDataY)

        print "Training sukses."
        print "Spesifikasi model SVM yang telah dilatih: "
        print "-- Nilai bobot:"
        print clf.w
        # plot hasil training data untuk melihat hyperplane-nya
        print "-- Plot Hyperplane:"
        clf.plot_margin(trainDataX[trainDataY == 1],
                        trainDataX[trainDataY == -1], clf)

        print "-- Confusion Matrix:"
        ConfusionMatrix(model=clf).printMatrix()

        # Buat folder untuk menyimpan model SVM hasil training
        if not os.path.isdir(os.path.split(folderModel)[0]):
            os.makedirs(os.path.split(folderModel)[0])

        # Simpan model ke folder yang telah dibuat/ada
        joblib.dump(clf, folderModel)
        print "Model classifier saved to {}".format(folderModel)
Exemplo n.º 2
0
else:
    y_train = y_train.reshape([-1])
    y_test = y_test.reshape([-1])

# Preprocess samples
logger.info("Preprocessing samples")
X_train, X_test = clf.preprocess([X_train, X_test])

logger.info("X_train shape : {}".format(X_train.shape))
logger.info("X_test shape : {}".format(X_test.shape))

# Perform grid-search on hyper-parameters
logger.info("Tuning hyper-parameters with grid search\n")
config = json.load(open("config.json"))[options.method]
clf = GridSearchCV(clf.get_classifier(), config, n_jobs=options.n_jobs, verbose=4)
grid_result = clf.fit(X_train, y_train)

# Compute predictions
logger.info("Compute predictions\n")
y_pred = clf.predict(X_test)

# Log grid search results
logger.info("Grid search results\n\n" + "".join("%f (±%f) with %r" % (scores.mean(), scores.std(), params) + "\n"
                                                for params, mean_score, scores in grid_result.grid_scores_))
logger.info("Best hyper-parameters: {}\n".format(grid_result.best_params_))

# Analyse results
logger.info("Classification report\n\n{}".format(classification_report(y_test, y_pred)))
logger.info("Confusion matrix\n\n{}\n".format(confusion_matrix(y_test, y_pred)))
logger.info("Overall accuracy : ==> {} <==".format(accuracy_score(y_test, y_pred)))
logger.info("With hyper-parameters: {}".format(grid_result.best_params_))
Exemplo n.º 3
0
def classifier_train(classifier, kernel,  x_k, y_k):
    # n_obs, n_features = x_k.shape[0], x_k.shape[1]
    classifier = SVM(kernel, C=4, gamma=4)
    classifier.fit(x_k, y_k)
    # classifier.opt(x_k, y_k)
    return classifier