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))
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))
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_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_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_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))