class TestFCM(unittest.TestCase): def setUp(self): self.df = pd.read_csv("iris-setosa.csv") self.X = self.df.iloc[:, 1:5].values self.y = self.df.iloc[:, 0].values self.model = FCM() self.X_train, self.X_test, self.y_train, self.y_test = train_test_split( self.X, self.y) def test_isScoreValid( self): # Controlla che l'accuratezza sia un valore valido n_clusters = 2 train_membership, centers = self.model.fuzzy_train( self.X_train, n_clusters, 2) test_membership = self.model.fuzzy_predict(self.X_test, n_clusters, centers, 2) #warnings.filterwarnings("ignore") acc = self.model.accuracy(test_membership, self.y_test) self.assertGreaterEqual(acc, 0) self.assertLessEqual(acc, 1) def test_errorThreshold( self ): # Controlla che l'errore RMSE delle membership sia minore di una certa soglia threshold = 0.4 n_clusters = 2 train_membership, centers = self.model.fuzzy_train( self.X_train, n_clusters, 2) test_membership = self.model.fuzzy_predict(self.X_test, n_clusters, centers, 2) #warnings.filterwarnings("ignore") err = self.model.RMSE_membership(test_membership, self.y_test) self.assertLessEqual(err, threshold)
def fcm_script(data): #Da utilizzare se so a priori i nomi delle colonne #feat1=sys.argv[2] #feat2=sys.argv[3] #labels=sys.argv[4] dataset = pd.read_csv(data) # extract features and labels #X = dataset[[feat1, feat2]].values #y = dataset[labels].values X = dataset.iloc[:, 1:] y = dataset.iloc[:, 0] X = np.asarray(X) y = np.asarray(y) model = FCM() N_SPLITS = 5 N_CLUSTER = 2 error = [] score = [] #cross validation skf = StratifiedKFold(n_splits=N_SPLITS, shuffle=True, random_state=1) for train_index, test_index in skf.split(X, y): #print("TRAIN:", train_index, "\nTEST:", test_index) X_train, X_test = X[train_index], X[test_index] y_train, y_test = y[train_index], y[test_index] #training train_membership, centers = model.fuzzy_train(X_train, N_CLUSTER, 2) #test test_membership = model.fuzzy_predict(X_test, N_CLUSTER, centers, 2) if (N_CLUSTER == 2): error.append(model.RMSE_membership(test_membership, y_test)) else: error.append(model.RMSE(test_membership, y_test)) score.append(model.accuracy(test_membership, y_test)) return model, score, error
gama += 0.3 cov, C, U, g = FCM.calculate_g_mat(train_data_no_label, num_of_clusters, m, max_iteration, gama) U_space = FCM.calculate_U(random_input, C, num_of_clusters, m, max_iteration) Y = FCM.calculate_Y(train_labels, num_of_classes) W, y = FCM.calculate_W(g, Y) # print(g) Y_test = FCM.calculate_Y(test_labels, num_of_classes) G_prime = FCM.calculate_g_mat_prime(test_data_no_label, C, U, cov, gama) y_test = FCM.calculate_y_test(G_prime, W) # print(U_space) # print(y) # print("Train Accuracy = " + str(FCM.accuracy(Y, y)) + "%" + # " Number of clusters: " + str(num_of_clusters)) print("Test Accuracy = " + str(FCM.accuracy(Y_test, y_test)) + "%" + " Number of clusters: " + str(num_of_clusters) + "Gama: " + str(gama)) # print(len(train_data_no_label), len(U)) FCM.draw_data(U, U_space, train_data_no_label, C, random_input, gama, max_iteration)