print('\nPrecision score: %f \n' % precision) print('\nF-measure score: %f \n' % f_measure) print('\nRecall score: %f \n' % recall) print('Window size 1: %f \n' % max_win1) print('Window size 2: %f \n' % max_win2) print('Window size 3: %f \n' % max_win3) print('Window size 4: %f \n' % max_win4) print('Window size 5: %f \n' % max_win5) print('Window size 6: %f \n' % max_win6) print('Window size filter: %f \n' % max_win_filter) max_win = max(max_win1, max_win2, max_win3, max_win4, max_win5, max_win6) # Prune the original sensor data. for i in range(0,cv_x_rep.shape[0]): if i<=((max_win + max_win_filter - 2)/2 - 1) or i>=(cv_x_rep.shape[0]-(max_win + max_win_filter - 2)/2): cv_x_piezo = cv_x_piezo.drop([i]) cv_x_strain = cv_x_strain.drop([i]) cv_x_mic = cv_x_mic.drop([i]) cv_x_piezo.index = range(0,cv_x_piezo.shape[0]) cv_x_strain.index = range(0,cv_x_strain.shape[0]) cv_x_mic.index = range(0,cv_x_mic.shape[0]) # Visualize the results. plot.draw_coloredLabel(cv_y_mark, predicted_mark, (-500, cv_y_mark.shape[0]+5000)) # plot.draw_label(cv_y_mark, predicted_mark, (-500, cv_y_mark.shape[0]+500)) plot.draw_sensorData(cv_x_piezo, cv_y_mark, predicted_mark, (-500, cv_x_piezo.shape[0]+4000)) plot.draw_sensorData(cv_x_strain, cv_y_mark, predicted_mark, (-500, cv_x_piezo.shape[0]+4000)) plot.draw_sensorData(cv_x_mic, cv_y_mark, predicted_mark, (-500, cv_x_piezo.shape[0]+4000))
def main(argv): args = parser.parse_args(argv[1:]) # Fetch the data. (cv_x, cv_y, cv_x_df) = sensor_data.load_data() cv_y.index = range(0, cv_y.shape[0]) # Feature columns describe how to use the input. my_feature_columns = [] for key in cv_x_df.keys(): my_feature_columns.append(tf.feature_column.numeric_column(key=key)) # Build 2 hidden layer DNN with 10, 10 units respectively. classifier = tf.estimator.DNNClassifier(feature_columns=my_feature_columns, hidden_units=[10, 10], n_classes=5) # Cross validation n_splits = 50 dataset = sensor_data.cv_dataset(cv_x, cv_y, n_splits) accu = 0 step = 0 pred_label = [] print(type(cv_y)) for x_train, y_train, x_test, y_test in dataset: x_train = pd.DataFrame(x_train, columns=[ 'Mean_Piezo', 'Std_Piezo', 'Mean_Strain', 'Std_Strain', 'Mean_Mic', 'Std_Mic' ]) y_train = pd.DataFrame(y_train) x_test = pd.DataFrame(x_test, columns=[ 'Mean_Piezo', 'Std_Piezo', 'Mean_Strain', 'Std_Strain', 'Mean_Mic', 'Std_Mic' ]) y_test = pd.DataFrame(y_test) step = step + 1 classifier.train(input_fn=lambda: sensor_data.train_input_fn( x_train, y_train, args.batch_size), steps=args.train_steps) predictions = classifier.predict( input_fn=lambda: sensor_data.eval_input_fn( x_test, labels=None, batch_size=args.batch_size)) for pred_dict in predictions: pred_label.append(pred_dict['class_ids'][0]) pred_label = pd.Series(pred_label) # Apply mode filter to the estimated labels. filter_mode = lambda x: mode(x)[0][0] window_filter = 51 pred_label = pred_label.rolling(window=window_filter, center=True).apply(filter_mode, raw=True) cv_y.index = range(0, cv_y.shape[0]) pred_label.index = range(0, pred_label.shape[0]) # Eliminate the begining and the end of the labels after the mode filtering. for i in range(0, cv_y.shape[0]): if i <= ( (window_filter - 1) / 2 - 1) or i >= (cv_y.shape[0] - (window_filter - 1) / 2): cv_y = cv_y.drop([i]) pred_label = pred_label.drop([i]) cv_y.index = range(0, cv_y.shape[0]) pred_label.index = range(0, pred_label.shape[0]) precision = metrics.precision_score(cv_y, pred_label, average='weighted') f_measure = metrics.f1_score(cv_y, pred_label, average='weighted') recall = metrics.recall_score(cv_y, pred_label, average='weighted') # Calculate and output the accuracy. print('\nTest set accuracy: %f \n' % (1 - (((cv_y != pred_label).sum()) / (cv_y.shape[0])))) # Output the precision, recall and f-measure scores.f-measure. print('\nPrecision score: %f \n' % precision) print('\nRecall score: %f \n' % recall) print('\nF-measure score: %f \n' % f_measure) cv_x = sensor_data.sensorData() cv_x_piezo = cv_x[0] cv_x_strain = cv_x[1] cv_x_mic = cv_x[2] max_window_size = sensor_data.transferWindowSize() # Prune the original sensor data. for i in range(0, cv_x_piezo.shape[0]): if i <= ((max_window_size + window_filter - 2) / 2 - 1) or i >= (cv_x_piezo.shape[0] - (max_window_size + window_filter - 2) / 2): cv_x_piezo = cv_x_piezo.drop([i]) cv_x_strain = cv_x_strain.drop([i]) cv_x_mic = cv_x_mic.drop([i]) cv_x_piezo.index = range(0, cv_x_piezo.shape[0]) cv_x_strain.index = range(0, cv_x_strain.shape[0]) cv_x_mic.index = range(0, cv_x_mic.shape[0]) # Plot the results. plot.draw_coloredLabel(cv_y, pred_label, (-500, cv_y.shape[0] + 5000)) plot.draw_sensorData(cv_x_piezo, cv_y, pred_label, (-500, cv_y.shape[0] + 4000)) plot.draw_sensorData(cv_x_strain, cv_y, pred_label, (-500, cv_y.shape[0] + 4000)) plot.draw_sensorData(cv_x_mic, cv_y, pred_label, (-500, cv_y.shape[0] + 4000))