def test_mutual_info_calculation(self):
     X, Y = utils.load_digits()
     X = mutual_information_old.normalize_data_for_MI(X)
     for i in range(X.shape[1]):
         for j in range(i+1, X.shape[1]):
             X1 = np.array(X[:,i])
             X2 = np.array(X[:,j])
             mi_pyfeast = self.__calculate_MI(X1, X2)
             mi_ours = mutual_information_old.calculate_mutual_information_histogram_binning(X1, X2)
             logger.debug("mutual_info: features: %d and %d; pyfeast: %f \t ours: %f"%(i, j, mi_pyfeast, mi_ours))
             self.assertTrue(np.isclose(mi_pyfeast, mi_ours, rtol=0.01, atol=0.00001))
 def test_CIFE(self):
     X, Y = utils.load_digits()
     X = mutual_information_old.normalize_data_for_MI(X)
     X = X.astype("float64")
     selector = ilastik_feature_selection.filter_feature_selection.FilterFeatureSelection(X, Y, "CIFE")
     num_feat = 10
     our_set = selector.run(num_feat)
     feast_set = np.array(feast.CIFE(X, Y, num_feat)).astype("int")
     logger.debug("CIFE")
     logger.debug("ours\t%s"%str(our_set))
     logger.debug("feast\t%s"%str(feast_set))
     self.assertEqual(set(our_set), set(feast_set))
예제 #3
0
 def test_JMI(self):
     X, Y = utils.load_digits()
     X = mutual_information_old.normalize_data_for_MI(X)
     X = X.astype("float64")
     selector = ilastik_feature_selection.filter_feature_selection.FilterFeatureSelection(
         X, Y, "JMI")
     num_feat = 10
     our_set = selector.run(num_feat)
     feast_set = np.array(feast.JMI(X, Y, num_feat)).astype("int")
     logger.debug("JMI")
     logger.debug("ours\t%s" % str(our_set))
     logger.debug("feast\t%s" % str(feast_set))
     self.assertEqual(set(our_set), set(feast_set))
    def test_cond_mutual_info(self):
        X, Y = utils.load_digits()
        Y = Y.astype("int")
        X = mutual_information_old.normalize_data_for_MI(X)
        for i in range(X.shape[1]):
            for j in range(i+1, X.shape[1]):
                X1 = np.array(X[:,i])
                X2 = np.array(X[:,j])

                cond_mi_pyfeast = self.__calculate_cond_MI(X1, X2, Y)
                cond_mi_ours = mutual_information_old.calculate_conditional_MI(X1, X2, Y)
                logger.debug("class cond mutual info: features: %d and %d; pyfeast: %f \t ours: %f"%(i, j, cond_mi_pyfeast, cond_mi_ours))
                self.assertTrue(np.isclose(cond_mi_pyfeast, cond_mi_ours, rtol=0.01, atol=0.00001))
 def test_MIFS(self):
     X, Y = utils.load_digits()
     X = mutual_information_old.normalize_data_for_MI(X)
     X = X.astype("float64")
     selector = ilastik_feature_selection.filter_feature_selection.FilterFeatureSelection(X, Y, "MIFS")
     num_feat = 10
     our_set = selector.run(num_feat)
     feast_set = np.array(feast.BetaGamma(X, Y, num_feat, 1.0, 0.0)).astype("int") # MIFS in feast is buggy
                                                                                 # (beta=0 although it should be =1)
     logger.debug("MIFS")
     logger.debug("ours\t%s"%str(our_set))
     logger.debug("feast\t%s"%str(feast_set))
     self.assertEqual(set(our_set), set(feast_set))
    def test_class_cond_mi_calculation(self):
        X, Y = utils.load_digits()
        X = mutual_information_old.normalize_data_for_MI(X)
        X = X.astype("float64")
        selector = ilastik_feature_selection.filter_feature_selection.FilterFeatureSelection(X, Y, "CIFE")
        for i in range(X.shape[1]):
            for j in range(i+1, X.shape[1]):
                X1 = np.array(X[:,i])
                X2 = np.array(X[:,j])

                cond_mi_pyfeast = self.__calculate_cond_MI(X1, X2, Y)
                cond_mi_ours = selector._calculate_class_conditional_MI(X1.astype("int"), X2.astype("int"), Y)
                logger.debug("class cond mutual info: features: %d and %d; pyfeast: %f \t ours: %f"%(i, j, cond_mi_pyfeast, cond_mi_ours))
                self.assertTrue(np.isclose(cond_mi_pyfeast, cond_mi_ours, rtol=0.01, atol=0.00001))
예제 #7
0
 def test_mutual_info_calculation(self):
     X, Y = utils.load_digits()
     X = mutual_information_old.normalize_data_for_MI(X)
     for i in range(X.shape[1]):
         for j in range(i + 1, X.shape[1]):
             X1 = np.array(X[:, i])
             X2 = np.array(X[:, j])
             mi_pyfeast = self.__calculate_MI(X1, X2)
             mi_ours = mutual_information_old.calculate_mutual_information_histogram_binning(
                 X1, X2)
             logger.debug(
                 "mutual_info: features: %d and %d; pyfeast: %f \t ours: %f"
                 % (i, j, mi_pyfeast, mi_ours))
             self.assertTrue(
                 np.isclose(mi_pyfeast, mi_ours, rtol=0.01, atol=0.00001))
예제 #8
0
 def test_MIFS(self):
     X, Y = utils.load_digits()
     X = mutual_information_old.normalize_data_for_MI(X)
     X = X.astype("float64")
     selector = ilastik_feature_selection.filter_feature_selection.FilterFeatureSelection(
         X, Y, "MIFS")
     num_feat = 10
     our_set = selector.run(num_feat)
     feast_set = np.array(feast.BetaGamma(X, Y, num_feat, 1.0, 0.0)).astype(
         "int")  # MIFS in feast is buggy
     # (beta=0 although it should be =1)
     logger.debug("MIFS")
     logger.debug("ours\t%s" % str(our_set))
     logger.debug("feast\t%s" % str(feast_set))
     self.assertEqual(set(our_set), set(feast_set))
예제 #9
0
    def test_cond_mutual_info(self):
        X, Y = utils.load_digits()
        Y = Y.astype("int")
        X = mutual_information_old.normalize_data_for_MI(X)
        for i in range(X.shape[1]):
            for j in range(i + 1, X.shape[1]):
                X1 = np.array(X[:, i])
                X2 = np.array(X[:, j])

                cond_mi_pyfeast = self.__calculate_cond_MI(X1, X2, Y)
                cond_mi_ours = mutual_information_old.calculate_conditional_MI(
                    X1, X2, Y)
                logger.debug(
                    "class cond mutual info: features: %d and %d; pyfeast: %f \t ours: %f"
                    % (i, j, cond_mi_pyfeast, cond_mi_ours))
                self.assertTrue(
                    np.isclose(cond_mi_pyfeast,
                               cond_mi_ours,
                               rtol=0.01,
                               atol=0.00001))
예제 #10
0
    def test_class_cond_mi_calculation(self):
        X, Y = utils.load_digits()
        X = mutual_information_old.normalize_data_for_MI(X)
        X = X.astype("float64")
        selector = ilastik_feature_selection.filter_feature_selection.FilterFeatureSelection(
            X, Y, "CIFE")
        for i in range(X.shape[1]):
            for j in range(i + 1, X.shape[1]):
                X1 = np.array(X[:, i])
                X2 = np.array(X[:, j])

                cond_mi_pyfeast = self.__calculate_cond_MI(X1, X2, Y)
                cond_mi_ours = selector._calculate_class_conditional_MI(
                    X1.astype("int"), X2.astype("int"), Y)
                logger.debug(
                    "class cond mutual info: features: %d and %d; pyfeast: %f \t ours: %f"
                    % (i, j, cond_mi_pyfeast, cond_mi_ours))
                self.assertTrue(
                    np.isclose(cond_mi_pyfeast,
                               cond_mi_ours,
                               rtol=0.01,
                               atol=0.00001))