def updateWindow(self, win, cm, cvscores, Y, title): f = win.gcf() f.clear() ax = f.add_subplot(111) DataGuru.plot_confusion_matrix(cm, np.unique(Y), ax, title="confusion matrix") ax.set_title(title) win.show()
def evaluate(self, data_frame, classifier_model): """ Run a trained classifier on multiple arrays """ result_object = ResultObject(None, None, None, CommandStatus.Error) # Get the data frame sns.set(color_codes=True) #command_status, df, kl1, _ = DataGuru.transformArray_to_dataFrame(array_datas) df = data_frame.data # if command_status == CommandStatus.Error: # return ResultObject(None, None, None, CommandStatus.Error) if StatContainer.ground_truth is None: Printer.Print("Please set a feature vector to ground truth by", "typing set ground truth to", "to get the prediction accuracy") result_object = ResultObject(None, None, None, CommandStatus.Error) return result_object else: df = DataGuru.removeGT(df, StatContainer.ground_truth) Y = StatContainer.ground_truth.data # Remove nans: df, Y = DataGuru.removenan(df, Y) X = df.values # Get the classifier model trained_model = classifier_model.data model = trained_model['Model'] scaler = trained_model['Scaler'] # Scale the values based on the training standardizer X = scaler.transform(X) # Code to run the classifier # Plot the classification result win = Window.window() f = win.gcf() ax = f.add_subplot(111) Printer.Print('Running the trained classifier...') predictions = model.predict(X) accuracy = metrics.accuracy_score(predictions, Y) Printer.Print("Accuracy : %s" % "{0:.3%}".format(accuracy)) cm = metrics.confusion_matrix(Y, predictions) DataGuru.plot_confusion_matrix(cm, np.unique(Y), ax, title="confusion matrix") win.show() # TODO Need to save the result result_object = ResultObject(None, None, None, CommandStatus.Success) return result_object
def evaluate(self, data_frame, classifier_algos): """ Train a classifier on multiple arrays """ result_object = ResultObject(None, None, None, CommandStatus.Error) # Get the data frame sns.set(color_codes=True) df = data_frame.data #command_status, df, kl1, _ = DataGuru.transformArray_to_dataFrame(array_datas) # if command_status == CommandStatus.Error: # return ResultObject(None, None, None, CommandStatus.Error) # Get the ground truth array if StatContainer.ground_truth is None: Printer.Print("Please set a feature vector to ground truth by", "typing set ground truth before using this command") result_object = ResultObject(None, None, None, CommandStatus.Error) return result_object else: df = DataGuru.removeGT(df, StatContainer.ground_truth) Y = StatContainer.ground_truth.data # Remove nans: df, Y = DataGuru.removenan(df, Y) Printer.Print("Training classifier using the following features:") Printer.Print(df.columns) # Get all the classifier models to test against each other modelList = [] Printer.Print("Testing the following classifiers: ") for classifier_algo in classifier_algos: model = (classifier_algo.data[0]) Printer.Print(classifier_algo.name) modelList.append({'Name': classifier_algo.name, 'Model': model}) # Code to run the classifier X = df.values # Get a standard scaler for the extracted data X scaler = preprocessing.StandardScaler().fit(X) X = scaler.transform(X) Printer.Print('Finding the best classifier using', 'k fold cross validation...') all_cv_scores, all_mean_cv_scores, all_confusion_matrices = DataGuru.FindBestClassifier(X, Y, modelList, 10) Printer.Print('\n\nPlotting the confusion matrices...\n') for iter in range(len(modelList)): win = Window.window() f = win.gcf() ax = f.add_subplot(111) DataGuru.plot_confusion_matrix(all_confusion_matrices[iter], np.unique(Y), ax, title=modelList[iter]['Name']) win.show() Printer.Print("\n\nBest classifier is " + modelList[np.argmax(all_mean_cv_scores)]['Name'] + " with an accuracy of - %.2f%% " % max(all_mean_cv_scores)) # TODO Need to save the model # Ask user for a name for the model result_object = ResultObject(None, None, None, CommandStatus.Success) return result_object