def train_fnn(nn): accuracy = 0.0 matrix = np.array([]) fnn_copy = FNN() all_nn_accuracy = np.array([]) org_data, org_label = LoadData.get_method2_fnn_train(nn) org_label = np.array([1 if label == nn else 0 for label in org_label]) X_train, X_test, y_train, y_test = train_test_split(org_data, org_label, test_size=0.3) # print(X_train, X_train.shape) # print(y_train, y_train.shape) print('<---Train the FNN ' + nn + ' Start--->') for i in range(fnn_random_size): # Random Generate the mean, standard deviation mean = np.array( [np.random.uniform(-1, 1) for _ in range(fnn_membership_size)]) stddev = np.array( [np.random.uniform(0, 1) for _ in range(fnn_membership_size)]) weight = np.array( [np.random.uniform(-1, 1) for _ in range(fnn_rule_size)]) fnn = FNN(fnn_input_size, fnn_membership_size, fnn_rule_size, fnn_output_size, mean, stddev, weight, fnn_lr, 1) fnn.training_model(fnn_epoch, X_train, y_train) test_output = fnn.testing_model(X_test) label_pred = [ 1 if values >= fnn_threshold else 0 for values in test_output ] C_matrix = confusion_matrix(y_test, label_pred) C_accuracy = np.sum(C_matrix.diagonal()) / np.sum(C_matrix) all_nn_accuracy = np.append(all_nn_accuracy, C_accuracy) # print(C_matrix) # print(C_accuracy) if C_accuracy > accuracy: fnn_copy = copy.deepcopy(fnn) accuracy = copy.deepcopy(C_accuracy) matrix = copy.deepcopy(C_matrix) print('swap') print('<---Train the FNN ' + nn + ' Successfully--->') print('<----------------------------------------------->') # rel_path = 'Experiment/Graph/method2/Best_FNN_' + nn + '_error_trend.png' # abs_path = os.path.join(os.path.dirname(__file__), rel_path) # ErrorPlot.error_trend( # 'Best_FNN_' + str(nn) + '_error_trend', len(fnn_copy.error_list), fnn_copy.error_list, abs_path) # # rel_path = 'Experiment/Graph/method2/Accuracy vs FNN' + str(nn) + '.png' # abs_path = os.path.join(os.path.dirname(__file__), rel_path) # AccuracyPlot.build_accuracy_plot( # 'Accuracy vs FNN'+str(nn), np.array([i for i in range(1, len(all_nn_accuracy) + 1, 1)]), # all_nn_accuracy, abs_path) return fnn_copy, accuracy, matrix
all_label = ['C1', 'C2', 'C3', 'C4', 'C5', 'C6'] # cluster_num = {'C1': 6, 'C2': 5, 'C3': 5, 'C4': 5, 'C5': 5, 'C6': 4} cluster_num = {'C1': 2, 'C2': 2, 'C3': 2, 'C4': 2, 'C5': 2, 'C6': 2} nn_category = np.array([]) for element in all_label: if cluster_num[element] == 0: nn_category = np.append(nn_category, element) else: for num in range(cluster_num[element]): nn_category = np.append(nn_category, element + '_' + str(num)) print('nn_category', nn_category) # Run the experiment from one dimension to five dimension for nn in nn_category: # Read file LNN_Train_data.xlsx' org_data, org_label = LoadData.get_method2_fnn_train(nn) # print('org_data', org_data) # print('org_label', org_label) data1, data2 = (np.array([]) for _ in range(2)) for element, stamp in zip(org_data, org_label): print(element, stamp) if stamp == nn: data1 = np.append(data1, element) else: data2 = np.append(data2, element) # Make graph fig = plt.figure(figsize=(8, 6), dpi=100) ax = Axes3D(fig)