Metadata-Version: 1.1
Name: feature_selection_fdr
Version: 0.1
Summary: Feature selection with FDR control.
Home-page: https://github.com/mehdirostami/feature_selection_fdr
Author: Mehdi Rostami
Author-email: mehdi.rostamiforooshani@mail.utoronto.ca
License: UNKNOWN
Description-Content-Type: UNKNOWN
Description: >>> import numpy as np 
        >>> from fs_fdr import barber_candes_selection, knockoff_features_construction, utils
        >>> 
        >>> from sklearn.ensemble import GradientBoostingClassifier
        >>> #######################################################################################
        >>> #### Simulate data to check the performance of the methods.
        >>> #######################################################################################
        >>> 
        >>> 
        >>> type = "classification"
        >>> # First simulate some data
        >>> n, p, p1 = 1000, 50, 20
        >>> rho = 0.
        >>> mean = 0.
        >>> sd = 1.
        >>> error_std = 1.
        >>> r = ["uniform", .0, .5]
        >>> x = mean + sd * np.random.normal(0., 1., size=(n, p))
        >>> true_w = np.random.uniform(r[1], r[2], size=(p1, 1))
        >>> negate = np.random.binomial(n=1, p=.5, size=(p1, 1))
        >>> negate[np.where(negate==0.), :] = -1
        >>> true_w = true_w * negate
        >>> true_index = np.random.choice(np.arange(p), size = p1, replace=False)
        >>> true_index = np.sort(true_index)
        >>> xbeta = np.dot(x[:, true_index], true_w)
        >>> pr = 1/(1+np.exp(-xbeta))
        >>> t = (pr > .5) + 0.
        >>> 
        >>> q = .1
        >>> # Step 2: Create knockoff features using the knockoff_method library 
        >>> 
        >>> # Set parameters
        >>> 
        >>> selection_method = "knockoff-MX"
        >>> optimization = ["ASDP", "selfblocks", 50, 50]
        >>> 
        >>> VI_stat = "Diff"
        >>> 
        >>> 
        >>> myknockoff = knockoff_features_construction.Knockoff(x, selection_method, optimization)
        >>> knockoff_attrs = myknockoff.knockoff_features()
        >>> x, x_tilda = knockoff_attrs.X, knockoff_attrs.X_tilde
        >>> 
        >>> 
        >>> 
        >>> modeling = {"model":"gradient boosting", "params":"classification fi"}
        >>> 
        >>> 
        >>> data = [x, x_tilda, t] 
        >>> knockoff_selection = barber_candes_selection.BarberCandesSelection(data, modeling, selection_method,q=q, VI_stat=VI_stat).selection()
        >>> 
        >>> S_knock = knockoff_selection.S
        >>> FDR_UB = knockoff_selection.FDR_UB
        >>> 
        >>> 
        >>> 
        >>> fdr_knock = 100*utils.FDR(S_knock, true_index)
        >>> power_knock = 100*utils.power(S_knock, true_index)
        >>> fnp_knock = 100*utils.FNP(S_knock, true_index, p)
        >>> print('------------Knockoff ({})-------------'.format(modeling["model"]))
        >>> print("Empirical FDR: " + str(100*np.round(FDR_UB, 2)) + "%")
        >>> print("FDR:  " +str(fdr_knock) + "%")
        >>> print("power:  "+str(power_knock) + "%") 
        >>> print("FNP:  "+str(fnp_knock) + "%")
        >>> 
        >>> 
        >>> ##########DSS
        >>> 
        >>> 
        >>> modeling = {"model":"gradient boosting", "params":"classification fi"}
        >>> selection_method = "DSS"
        >>> data = [x, t] 
        >>> split_type = ["sampling", 5, 5]
        >>> prob = .7
        >>> DSS_selection = barber_candes_selection.BarberCandesSelection(data, modeling, selection_method,q=q).selection()
        >>> 
        >>> S_dss = DSS_selection.S
        >>> FDR_UB = DSS_selection.FDR_UB
        >>> 
        >>> 
        >>> 
        >>> fdr_dss = 100*utils.FDR(S_dss, true_index)
        >>> power_dss = 100*utils.power(S_dss, true_index)
        >>> fnp_dss = 100*utils.FNP(S_dss, true_index, p)
        >>> print('------------DSS ({})-------------'.format(modeling["model"]))
        >>> print("Empirical FDR: " + str(100*np.round(FDR_UB, 2)) + "%")
        >>> print("FDR:  " +str(fdr_dss) + "%")
        >>> print("power:  "+str(power_dss) + "%") 
        >>> print("FNP:  "+str(fnp_dss) + "%")
        >>> 
        >>> 
        >>> 
        >>> ############### SVM
        >>> 
        >>> modeling = {"model": "not specified", "params":"given"}
        >>> 
        >>> from sklearn.svm import SVC
        >>> 
        >>> svm = SVC(C=1., kernel="linear")
        >>> svm_w = svm.fit(np.hstack((x, x_tilda)), t.ravel()).coef_
        >>> 
        >>> selection_method = "knockoff" 
        >>> knockoff_selection = barber_candes_selection.BarberCandesSelection(modeling=modeling, selection_method=selection_method, w = svm_w).selection()
        >>> 
        >>> S_knock = knockoff_selection.S
        >>> FDR_UB = knockoff_selection.FDR_UB
        >>> print("empirical FDR: " + str(100*np.round(FDR_UB, 2)))
        >>> 
        >>> fdr_knock = 100*utils.FDR(S_knock, true_index)
        >>> power_knock = 100*utils.power(S_knock, true_index)
        >>> fnp_knock = 100*utils.FNP(S_knock, true_index, p)
        >>> print('------------Knockoff ({})-------------'.format(modeling["model"]))
        >>> print("Empirical FDR: " + str(100*np.round(FDR_UB, 2)) + "%")
        >>> print("FDR:  " +str(fdr_knock) + "%")
        >>> print("power:  "+str(power_knock) + "%") 
        >>> print("FNP:  "+str(fnp_knock) + "%")
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 2.7
