def simpleRunNN(self, epoches, batch, pace, train_ratio = 0.75): # translate label into number data = [copy.copy(self.data[0])] data.append([[float(ele) for ele in sample] for sample in self.data[1]]) # normalize data right = [] left = [] for attr_id in range(len(data[1][0])): attr_list = [row[attr_id] for row in data[1]] right.append(max(attr_list)) left.append(min(attr_list)) for r_id in range(len(data[1])): for c_id in range(len(data[1][r_id])): data[1][r_id][c_id] = (data[1][r_id][c_id] - left[c_id]) / (right[c_id] - left[c_id]) clas_list = list(set(self.data_label)) new_label = [] for label in self.data_label: new_label.append([0 for i in range(len(clas_list))]) new_label[-1][clas_list.index(label)] = 1 # split train data and test data train_data, test_data, train_data_label, test_data_label = self.randomSplit(train_ratio, data, new_label) # train nn = NN.BPNN() act = NN.Activition() # one input, one hidden, one softmax nn.deliverLayer(len(train_data[0])) nn.activeLayer(8, act.sigmoid) nn.activeLayer(len(clas_list), act.sigmoid) nn.softmaxLayer(len(clas_list)) self.train(train_data[1], train_data_label, test_data, test_data_label, clas_list, epoches, batch, pace, nn) # test predictions = nn.predict(test_data[1]) accuracy = sum([1 for label, pred in zip(test_data_label, predictions) if clas_list[label.index(1)] == clas_list[pred.index(1)]]) / len(predictions) # for label, pred in zip(test_data_label, predictions): # print(str(clas_list[label.index(1)]) + " " + str(clas_list[pred.index(1)])) print("gengeral accuracy is: %f" %(accuracy)) return accuracy