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)
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_))
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