| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -25,8 +25,6 @@ from sklearn.manifold import MDS | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					from sklearn.manifold import TSNE | 
					 | 
					 | 
					 | 
					from sklearn.manifold import TSNE | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					from sklearn.metrics import classification_report | 
					 | 
					 | 
					 | 
					from sklearn.metrics import classification_report | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					from sklearn.preprocessing import scale | 
					 | 
					 | 
					 | 
					from sklearn.preprocessing import scale | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#from sklearn.metrics import r2_score | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#from rfpimp import permutation_importances | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import eli5 | 
					 | 
					 | 
					 | 
					import eli5 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					from eli5.sklearn import PermutationImportance | 
					 | 
					 | 
					 | 
					from eli5.sklearn import PermutationImportance | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					from sklearn.feature_selection import SelectKBest | 
					 | 
					 | 
					 | 
					from sklearn.feature_selection import SelectKBest | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -37,6 +35,9 @@ from sklearn.decomposition import PCA | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					from mlxtend.classifier import StackingCVClassifier | 
					 | 
					 | 
					 | 
					from mlxtend.classifier import StackingCVClassifier | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					from mlxtend.feature_selection import ColumnSelector | 
					 | 
					 | 
					 | 
					from mlxtend.feature_selection import ColumnSelector | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					from skdist.distribute.search import DistGridSearchCV | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					from pyspark.sql import SparkSession | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					# This block of code is for the connection between the server, the database, and the client (plus routing). | 
					 | 
					 | 
					 | 
					# This block of code is for the connection between the server, the database, and the client (plus routing). | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					# Access MongoDB  | 
					 | 
					 | 
					 | 
					# Access MongoDB  | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -108,16 +109,20 @@ def Reset(): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    target_names = [] | 
					 | 
					 | 
					 | 
					    target_names = [] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    return 'The reset was done!' | 
					 | 
					 | 
					 | 
					    return 'The reset was done!' | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					# Retrieve data from client  | 
					 | 
					 | 
					 | 
					# Retrieve data from client and select the correct data set | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					@cross_origin(origin='localhost',headers=['Content-Type','Authorization']) | 
					 | 
					 | 
					 | 
					@cross_origin(origin='localhost',headers=['Content-Type','Authorization']) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					@app.route('/data/ServerRequest', methods=["GET", "POST"]) | 
					 | 
					 | 
					 | 
					@app.route('/data/ServerRequest', methods=["GET", "POST"]) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					def RetrieveFileName(): | 
					 | 
					 | 
					 | 
					def RetrieveFileName(): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    fileName = request.get_data().decode('utf8').replace("'", '"') | 
					 | 
					 | 
					 | 
					    fileName = request.get_data().decode('utf8').replace("'", '"') | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global featureSelection  | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    featureSelection = request.get_data().decode('utf8').replace("'", '"') | 
					 | 
					 | 
					 | 
					    #global featureSelection  | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    featureSelection = json.loads(featureSelection) | 
					 | 
					 | 
					 | 
					    #featureSelection = request.get_data().decode('utf8').replace("'", '"') | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    #featureSelection = json.loads(featureSelection) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global DataRawLength | 
					 | 
					 | 
					 | 
					    global DataRawLength | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global DataResultsRaw | 
					 | 
					 | 
					 | 
					    global DataResultsRaw | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global RANDOM_SEED | 
					 | 
					 | 
					 | 
					    global RANDOM_SEED | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    RANDOM_SEED = 42 | 
					 | 
					 | 
					 | 
					    RANDOM_SEED = 42 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -153,14 +158,22 @@ def RetrieveFileName(): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global crossValidation | 
					 | 
					 | 
					 | 
					    global crossValidation | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    crossValidation = 3 | 
					 | 
					 | 
					 | 
					    crossValidation = 3 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    global scoring | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    scoring = {'accuracy': 'accuracy', 'f1_macro': 'f1_weighted', 'precision': 'precision_weighted', 'recall': 'recall_weighted', 'jaccard': 'jaccard_weighted'} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #scoring = {'accuracy': 'accuracy', 'f1_macro': 'f1_weighted', 'precision': 'precision_weighted', 'recall': 'recall_weighted', 'jaccard': 'jaccard_weighted', 'neg_log_loss': 'neg_log_loss', 'r2': 'r2', 'neg_mean_absolute_error': 'neg_mean_absolute_error', 'neg_mean_absolute_error': 'neg_mean_absolute_error'} | 
					 | 
					 | 
					 | 
					    #scoring = {'accuracy': 'accuracy', 'f1_macro': 'f1_weighted', 'precision': 'precision_weighted', 'recall': 'recall_weighted', 'jaccard': 'jaccard_weighted', 'neg_log_loss': 'neg_log_loss', 'r2': 'r2', 'neg_mean_absolute_error': 'neg_mean_absolute_error', 'neg_mean_absolute_error': 'neg_mean_absolute_error'} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    global NumberofscoringMetrics | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    NumberofscoringMetrics = len(scoring) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global yPredictProb | 
					 | 
					 | 
					 | 
					    global yPredictProb | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    yPredictProb = [] | 
					 | 
					 | 
					 | 
					    yPredictProb = [] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global loopFeatures | 
					 | 
					 | 
					 | 
					    global loopFeatures | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    loopFeatures = 2 | 
					 | 
					 | 
					 | 
					    loopFeatures = 2 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    global factors | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    factors = [1,1,1,1,1] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global columns  | 
					 | 
					 | 
					 | 
					    global columns  | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    columns = [] | 
					 | 
					 | 
					 | 
					    columns = [] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -255,112 +268,6 @@ def column_index(df, query_cols): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    sidx = np.argsort(cols) | 
					 | 
					 | 
					 | 
					    sidx = np.argsort(cols) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    return sidx[np.searchsorted(cols,query_cols,sorter=sidx)].tolist() | 
					 | 
					 | 
					 | 
					    return sidx[np.searchsorted(cols,query_cols,sorter=sidx)].tolist() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					global mem | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					mem = Memory("./cache_dir") | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					def GridSearch(clf, params): | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global XData | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global yData | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global scoring | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global target_names | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    grid = GridSearchCV(estimator=clf,  | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                param_grid=params, | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                scoring=scoring,  | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                cv=crossValidation, | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                refit='accuracy', | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                n_jobs = -1) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    grid.fit(XData, yData) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    cv_results = [] | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    cv_results.append(grid.cv_results_) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    df_cv_results = pd.DataFrame.from_dict(cv_results) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    number_of_classifiers = len(df_cv_results.iloc[0][0]) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    number_of_columns = len(df_cv_results.iloc[0]) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    df_cv_results_per_item = [] | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    df_cv_results_per_row = [] | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					     | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    for i in range(number_of_classifiers): | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        df_cv_results_per_item = [] | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        for column in df_cv_results.iloc[0]: | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            df_cv_results_per_item.append(column[i]) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        df_cv_results_per_row.append(df_cv_results_per_item) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    df_cv_results_classifiers = pd.DataFrame(data = df_cv_results_per_row, columns= df_cv_results.columns) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    parameters = df_cv_results_classifiers['params'] | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    PerClassMetrics = [] | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #perm_imp_rfpimp = [] | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #FeatureImp = [] | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #RFEList = [] | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    permList = [] | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    PerFeatureAccuracy = [] | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global subset | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global loopFeatures | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global yPredictProb | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global columns | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    columns = [] | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    counter = 0 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    subset = XData | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    for i, eachClassifierParams in enumerate(grid.cv_results_['params']): | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        eachClassifierParamsDictList = {} | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        for key, value in eachClassifierParams.items(): | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            Listvalue = [] | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            Listvalue.append(value) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            eachClassifierParamsDictList[key] = Listvalue | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            counter = counter + 1 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        grid = GridSearchCV(estimator=clf,  | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            param_grid=eachClassifierParamsDictList, | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            scoring=scoring,  | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            cv=crossValidation, | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            refit='accuracy', | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            n_jobs = -1) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        if (featureSelection['featureSelection'] == ''): | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            subset = XData | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        else: | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            featureSelected = [] | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            for indices, each in enumerate(XData.columns): | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                if (int(''.join(x for x in featureSelection['featureSelection'][loopFeatures] if x.isdigit())) == 1): | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    featureSelected.append(each) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                loopFeatures = loopFeatures + 3 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            subset = XData[featureSelected] | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            element = (column_index(XData, featureSelected)) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            columns.append(element) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        grid.fit(subset, yData)  | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        #perm_imp_rfpimp.append(permutation_importances(grid.best_estimator_, subset, yData, r2)['Importance'])  | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        perm = PermutationImportance(grid.best_estimator_, cv = None, refit = True, n_iter = 50).fit(subset, yData) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        permList.append(perm.feature_importances_) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        n_feats = subset.shape[1] | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        for i in range(n_feats): | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            scores = model_selection.cross_val_score(grid.best_estimator_, subset.values[:, i].reshape(-1, 1), yData, cv=crossValidation) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            PerFeatureAccuracy.append(scores.mean()) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        yPredict = grid.predict(subset) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        yPredictProb.append(grid.predict_proba(subset)) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        PerClassMetrics.append(classification_report(yData, yPredict, target_names=target_names, digits=2, output_dict=True)) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        #if (FI == 1): | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        #    X = subset.values | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        #    Y = array(yData) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        #    FeatureImp.append(class_feature_importance(X, Y, grid.best_estimator_.feature_importances_)) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        #    rfe = RFE(grid.best_estimator_, 3) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        #    fit = rfe.fit(subset, yData) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        #    RFEList.append(fit.ranking_) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    bestfeatures = SelectKBest(score_func=chi2, k='all') | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    fit = bestfeatures.fit(subset,yData) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    dfscores = pd.DataFrame(fit.scores_) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    dfcolumns = pd.DataFrame(subset.columns) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #concat two dataframes for better visualization  | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    featureScores = pd.concat([dfcolumns,dfscores],axis=1) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    featureScores.columns = ['Specs','Score']  #naming the dataframe columns | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #FeatureImpPandas = pd.DataFrame(FeatureImp) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #RFEListPD = pd.DataFrame(RFEList) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #perm_imp_rfpimp = pd.DataFrame(perm_imp_rfpimp) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    perm_imp_eli5PD = pd.DataFrame(permList) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    PerClassMetricsPandas = pd.DataFrame(PerClassMetrics) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    PerFeatureAccuracyPandas = pd.DataFrame(PerFeatureAccuracy) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    return df_cv_results_classifiers, parameters, PerClassMetricsPandas, PerFeatureAccuracyPandas, perm_imp_eli5PD, featureScores | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#def r2(rf, X_train, y_train): | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#    return r2_score(y_train, rf.predict(X_train)) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					def class_feature_importance(X, Y, feature_importances): | 
					 | 
					 | 
					 | 
					def class_feature_importance(X, Y, feature_importances): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    N, M = X.shape | 
					 | 
					 | 
					 | 
					    N, M = X.shape | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    X = scale(X) | 
					 | 
					 | 
					 | 
					    X = scale(X) | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -403,12 +310,8 @@ def Preprocessing(): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global factors | 
					 | 
					 | 
					 | 
					    global factors | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    factors = [1,1,1,1,1,1] | 
					 | 
					 | 
					 | 
					    factors = [1,1,1,1,1,1] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global df_cv_results_classifiers_metrics | 
					 | 
					 | 
					 | 
					    global df_cv_results_classifiers_metrics | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global NumberofscoringMetrics | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    del df_cv_results_classifiers['params'] | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    df_cv_results_classifiers_metrics = df_cv_results_classifiers.copy() | 
					 | 
					 | 
					 | 
					    df_cv_results_classifiers_metrics = df_cv_results_classifiers.copy() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    del df_cv_results_classifiers_metrics['mean_fit_time'] | 
					 | 
					 | 
					 | 
					    df_cv_results_classifiers_metrics = df_cv_results_classifiers_metrics.filter(['mean_test_accuracy','mean_test_f1_macro','mean_test_precision','mean_test_recall','mean_test_jaccard']) | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    del df_cv_results_classifiers_metrics['mean_score_time'] | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    df_cv_results_classifiers_metrics = df_cv_results_classifiers_metrics.ix[:, 0:NumberofscoringMetrics] | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    return [parameters,PerClassMetrics,FeatureAccuracy,df_cv_results_classifiers_metrics,perm_imp_eli5PDCon,featureScoresCon] | 
					 | 
					 | 
					 | 
					    return [parameters,PerClassMetrics,FeatureAccuracy,df_cv_results_classifiers_metrics,perm_imp_eli5PDCon,featureScoresCon] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					def sumPerMetric(factors): | 
					 | 
					 | 
					 | 
					def sumPerMetric(factors): | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -416,7 +319,6 @@ def sumPerMetric(factors): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    preProcessResults = [] | 
					 | 
					 | 
					 | 
					    preProcessResults = [] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    preProcessResults = Preprocessing() | 
					 | 
					 | 
					 | 
					    preProcessResults = Preprocessing() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    loopThroughMetrics = preProcessResults[3] | 
					 | 
					 | 
					 | 
					    loopThroughMetrics = preProcessResults[3] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global scoring | 
					 | 
					 | 
					 | 
					    global scoring | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global metricsPerModel | 
					 | 
					 | 
					 | 
					    global metricsPerModel | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    metricsPerModel = [] | 
					 | 
					 | 
					 | 
					    metricsPerModel = [] | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -425,7 +327,7 @@ def sumPerMetric(factors): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    metricsPerModel.append(loopThroughMetrics['mean_test_precision'].sum()/loopThroughMetrics['mean_test_precision'].count()) | 
					 | 
					 | 
					 | 
					    metricsPerModel.append(loopThroughMetrics['mean_test_precision'].sum()/loopThroughMetrics['mean_test_precision'].count()) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    metricsPerModel.append(loopThroughMetrics['mean_test_recall'].sum()/loopThroughMetrics['mean_test_recall'].count()) | 
					 | 
					 | 
					 | 
					    metricsPerModel.append(loopThroughMetrics['mean_test_recall'].sum()/loopThroughMetrics['mean_test_recall'].count()) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    metricsPerModel.append(loopThroughMetrics['mean_test_jaccard'].sum()/loopThroughMetrics['mean_test_jaccard'].count()) | 
					 | 
					 | 
					 | 
					    metricsPerModel.append(loopThroughMetrics['mean_test_jaccard'].sum()/loopThroughMetrics['mean_test_jaccard'].count()) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    for index, row in loopThroughMetrics.iterrows(): | 
					 | 
					 | 
					 | 
					    for row in loopThroughMetrics.iterrows(): | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        rowSum = 0 | 
					 | 
					 | 
					 | 
					        rowSum = 0 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        lengthFactors = len(scoring) | 
					 | 
					 | 
					 | 
					        lengthFactors = len(scoring) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        for loop,elements in enumerate(row): | 
					 | 
					 | 
					 | 
					        for loop,elements in enumerate(row): | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -496,7 +398,6 @@ def InitializeEnsemble(): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    ModelSpaceMDS = FunMDS(XClassifiers) | 
					 | 
					 | 
					 | 
					    ModelSpaceMDS = FunMDS(XClassifiers) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    ModelSpaceTSNE = FunTsne(XClassifiers) | 
					 | 
					 | 
					 | 
					    ModelSpaceTSNE = FunTsne(XClassifiers) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    ModelSpaceTSNE = ModelSpaceTSNE.tolist() | 
					 | 
					 | 
					 | 
					    ModelSpaceTSNE = ModelSpaceTSNE.tolist() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    print(ModelSpaceTSNE) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global ClassifierIDsList | 
					 | 
					 | 
					 | 
					    global ClassifierIDsList | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    key = 0 | 
					 | 
					 | 
					 | 
					    key = 0 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    EnsembleModel(ClassifierIDsList, key) | 
					 | 
					 | 
					 | 
					    EnsembleModel(ClassifierIDsList, key) | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -697,70 +598,89 @@ def SendToPlot(): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    } | 
					 | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    return jsonify(response) | 
					 | 
					 | 
					 | 
					    return jsonify(response) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					# Retrieve data from client  | 
					 | 
					 | 
					 | 
					# Initialize every model for each algorithm | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					@cross_origin(origin='localhost',headers=['Content-Type','Authorization']) | 
					 | 
					 | 
					 | 
					@cross_origin(origin='localhost',headers=['Content-Type','Authorization']) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					@app.route('/data/ServerRequestSelParameters', methods=["GET", "POST"]) | 
					 | 
					 | 
					 | 
					@app.route('/data/ServerRequestSelParameters', methods=["GET", "POST"]) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					def RetrieveModel(): | 
					 | 
					 | 
					 | 
					def RetrieveModel(): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global RetrievedModel | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    # get the models from the frontend | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    RetrievedModel = request.get_data().decode('utf8').replace("'", '"') | 
					 | 
					 | 
					 | 
					    RetrievedModel = request.get_data().decode('utf8').replace("'", '"') | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    RetrievedModel = json.loads(RetrievedModel) | 
					 | 
					 | 
					 | 
					    RetrievedModel = json.loads(RetrievedModel) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global parametersPerformancePerModel | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    parametersPerformancePerModel = [] | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global algorithms  | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global factors | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    factors = [1,1,1,1,1,1] | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    algorithms = RetrievedModel['Algorithms'] | 
					 | 
					 | 
					 | 
					    algorithms = RetrievedModel['Algorithms'] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    # loop through the algorithms | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    global allParametersPerformancePerModel | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    for eachAlgor in algorithms: | 
					 | 
					 | 
					 | 
					    for eachAlgor in algorithms: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        if (eachAlgor) == 'KNN': | 
					 | 
					 | 
					 | 
					        if (eachAlgor) == 'KNN': | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            clf = KNeighborsClassifier() | 
					 | 
					 | 
					 | 
					            clf = KNeighborsClassifier() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            params = {'n_neighbors': list(range(1, 25)), 'weights': ['uniform', 'distance'], 'algorithm': ['brute', 'kd_tree', 'ball_tree'], 'metric': ['chebyshev', 'manhattan', 'euclidean', 'minkowski']} | 
					 | 
					 | 
					 | 
					            params = {'n_neighbors': list(range(1, 25)), 'weights': ['uniform', 'distance'], 'algorithm': ['brute', 'kd_tree', 'ball_tree'], 'metric': ['chebyshev', 'manhattan', 'euclidean', 'minkowski']} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            AlgorithmsIDsEnd = 0 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        else:  | 
					 | 
					 | 
					 | 
					        else:  | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            clf = RandomForestClassifier() | 
					 | 
					 | 
					 | 
					            clf = RandomForestClassifier() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            params = {'n_estimators': list(range(80, 120)), 'criterion': ['gini', 'entropy']} | 
					 | 
					 | 
					 | 
					            params = {'n_estimators': list(range(80, 120)), 'criterion': ['gini', 'entropy']} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        GridSearchForParameters(clf, params, eachAlgor, factors) | 
					 | 
					 | 
					 | 
					            AlgorithmsIDsEnd = 576 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        allParametersPerformancePerModel = GridSearchForModels(clf, params, eachAlgor, factors, AlgorithmsIDsEnd) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    # call the function that sends the results to the frontend  | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SendEachClassifiersPerformanceToVisualize() | 
					 | 
					 | 
					 | 
					    SendEachClassifiersPerformanceToVisualize() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    return 'Everything Okay' | 
					 | 
					 | 
					 | 
					    return 'Everything Okay' | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					def GridSearchForParameters(clf, params, eachAlgor, factors): | 
					 | 
					 | 
					 | 
					location = './cachedir' | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global scoring  | 
					 | 
					 | 
					 | 
					memory = Memory(location, verbose=0) | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global NumberofscoringMetrics | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    scoring = {'accuracy': 'accuracy', 'f1_macro': 'f1_weighted', 'precision': 'precision_weighted', 'recall': 'recall_weighted', 'jaccard': 'jaccard_weighted'} | 
					 | 
					 | 
					 | 
					# calculating for all algorithms and models the performance and other results | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    NumberofscoringMetrics = len(scoring) | 
					 | 
					 | 
					 | 
					@memory.cache | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					def GridSearchForModels(clf, params, eachAlgor, factors, AlgorithmsIDsEnd): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    grid = GridSearchCV(estimator=clf,  | 
					 | 
					 | 
					 | 
					    # instantiate spark session | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                param_grid=params, | 
					 | 
					 | 
					 | 
					    spark = (    | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                scoring=scoring,  | 
					 | 
					 | 
					 | 
					        SparkSession     | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                cv=crossValidation, | 
					 | 
					 | 
					 | 
					        .builder     | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                refit='accuracy', | 
					 | 
					 | 
					 | 
					        .getOrCreate()     | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                n_jobs = -1) | 
					 | 
					 | 
					 | 
					        ) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    sc = spark.sparkContext  | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    # this is the grid we use to train the models | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    grid = DistGridSearchCV(     | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        estimator=clf, param_grid=params,      | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        sc=sc, cv=crossValidation, refit='accuracy', scoring=scoring, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        verbose=0, n_jobs=-1) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    # fit and extract the probabilities | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    grid.fit(XData, yData) | 
					 | 
					 | 
					 | 
					    grid.fit(XData, yData) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    yPredict = grid.predict(XData) | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    # process the results | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    cv_results = [] | 
					 | 
					 | 
					 | 
					    cv_results = [] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    cv_results.append(grid.cv_results_) | 
					 | 
					 | 
					 | 
					    cv_results.append(grid.cv_results_) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    df_cv_results = pd.DataFrame.from_dict(cv_results) | 
					 | 
					 | 
					 | 
					    df_cv_results = pd.DataFrame.from_dict(cv_results) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    number_of_classifiers = len(df_cv_results.iloc[0][0]) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    number_of_columns = len(df_cv_results.iloc[0]) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    df_cv_results_per_item = [] | 
					 | 
					 | 
					 | 
					    # number of models stored | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    number_of_models = len(df_cv_results.iloc[0][0]) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    # initialize results per row | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    df_cv_results_per_row = [] | 
					 | 
					 | 
					 | 
					    df_cv_results_per_row = [] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    for i in range(number_of_classifiers): | 
					 | 
					 | 
					 | 
					    # loop through number of models | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    modelsIDs = [] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    for i in range(number_of_models): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        modelsIDs.append(AlgorithmsIDsEnd+i) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					         # initialize results per item | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        df_cv_results_per_item = [] | 
					 | 
					 | 
					 | 
					        df_cv_results_per_item = [] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        for column in df_cv_results.iloc[0]: | 
					 | 
					 | 
					 | 
					        for column in df_cv_results.iloc[0]: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            df_cv_results_per_item.append(column[i]) | 
					 | 
					 | 
					 | 
					            df_cv_results_per_item.append(column[i]) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        df_cv_results_per_row.append(df_cv_results_per_item) | 
					 | 
					 | 
					 | 
					        df_cv_results_per_row.append(df_cv_results_per_item) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    df_cv_results_classifiers = pd.DataFrame(data = df_cv_results_per_row, columns= df_cv_results.columns) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global allParametersPerformancePerModel | 
					 | 
					 | 
					 | 
					    # store the results into a pandas dataframe | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global parametersPerformancePerModel | 
					 | 
					 | 
					 | 
					    df_cv_results_classifiers = pd.DataFrame(data = df_cv_results_per_row, columns= df_cv_results.columns) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    # copy and filter in order to get only the metrics | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    metrics = df_cv_results_classifiers.copy() | 
					 | 
					 | 
					 | 
					    metrics = df_cv_results_classifiers.copy() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    del metrics['mean_fit_time'] | 
					 | 
					 | 
					 | 
					    metrics = metrics.filter(['mean_test_accuracy','mean_test_f1_macro','mean_test_precision','mean_test_recall','mean_test_jaccard'])  | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    del metrics['mean_score_time'] | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    metrics = metrics.ix[:, 0:NumberofscoringMetrics] | 
					 | 
					 | 
					 | 
					    # control the factors | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    sumperModel = [] | 
					 | 
					 | 
					 | 
					    sumperModel = [] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global rowSum | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    for index, row in metrics.iterrows(): | 
					 | 
					 | 
					 | 
					    for index, row in metrics.iterrows(): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        rowSum = 0 | 
					 | 
					 | 
					 | 
					        rowSum = 0 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        lengthFactors = NumberofscoringMetrics | 
					 | 
					 | 
					 | 
					        lengthFactors = NumberofscoringMetrics | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -771,29 +691,75 @@ def GridSearchForParameters(clf, params, eachAlgor, factors): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            sumperModel = 0 | 
					 | 
					 | 
					 | 
					            sumperModel = 0 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        else: | 
					 | 
					 | 
					 | 
					        else: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            sumperModel.append(rowSum/lengthFactors) | 
					 | 
					 | 
					 | 
					            sumperModel.append(rowSum/lengthFactors) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global target_names | 
					 | 
					 | 
					 | 
					     | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global PerClassMetric | 
					 | 
					 | 
					 | 
					    # summarize all models metrics | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global PerClassMetricPandas | 
					 | 
					 | 
					 | 
					    summarizedMetrics = pd.DataFrame(sumperModel) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    summarizedMetrics.rename(columns={0:'sum'}) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    # concat parameters and performance | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    parameters = pd.DataFrame(df_cv_results_classifiers['params']) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    parametersPerformancePerModel = pd.concat([summarizedMetrics, parameters], axis=1) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    parametersPerformancePerModel = parametersPerformancePerModel.to_json() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					     | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    parametersLocal = json.loads(parametersPerformancePerModel)['params'].copy() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    Models = [] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    for index, items in enumerate(parametersLocal): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        Models.append(str(index)) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    parametersLocalNew = [ parametersLocal[your_key] for your_key in Models ] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    permList = [] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    PerFeatureAccuracy = [] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    PerClassMetric = [] | 
					 | 
					 | 
					 | 
					    PerClassMetric = [] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    yPredictProb.append(grid.predict_proba(XData)) | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    for eachModelParameters in parametersLocalNew: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        clf.set_params(**eachModelParameters) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        perm = PermutationImportance(clf, cv = None, refit = True, n_iter = 25).fit(XData, yData) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        permList.append(perm.feature_importances_) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        n_feats = XData.shape[1] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        for i in range(n_feats): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            scores = model_selection.cross_val_score(clf, XData.values[:, i].reshape(-1, 1), yData, cv=crossValidation) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            PerFeatureAccuracy.append(scores.mean()) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        clf.fit(XData, yData)  | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        yPredict = clf.predict(XData) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        # retrieve target names (class names) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        PerClassMetric.append(classification_report(yData, yPredict, target_names=target_names, digits=2, output_dict=True)) | 
					 | 
					 | 
					 | 
					        PerClassMetric.append(classification_report(yData, yPredict, target_names=target_names, digits=2, output_dict=True)) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    PerClassMetricPandas = pd.DataFrame(PerClassMetric)   | 
					 | 
					 | 
					 | 
					    PerClassMetricPandas = pd.DataFrame(PerClassMetric)   | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    del PerClassMetricPandas['accuracy']   | 
					 | 
					 | 
					 | 
					    del PerClassMetricPandas['accuracy']   | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    del PerClassMetricPandas['macro avg']   | 
					 | 
					 | 
					 | 
					    del PerClassMetricPandas['macro avg']   | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    del PerClassMetricPandas['weighted avg']   | 
					 | 
					 | 
					 | 
					    del PerClassMetricPandas['weighted avg']   | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    summarizedMetrics = pd.DataFrame(sumperModel) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    summarizedMetrics.rename(columns={0:'sum'}) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    parameters = pd.DataFrame(df_cv_results_classifiers['params']) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    parametersPerformancePerModel = pd.concat([summarizedMetrics, parameters], axis=1) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    PerClassMetricPandas = PerClassMetricPandas.to_json() | 
					 | 
					 | 
					 | 
					    PerClassMetricPandas = PerClassMetricPandas.to_json() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    parametersPerformancePerModel = parametersPerformancePerModel.to_json() | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    allParametersPerformancePerModel.append(parametersPerformancePerModel) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    allParametersPerformancePerModel.append(PerClassMetricPandas) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    return 'Everything is okay' | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#GridSearchForParameters = mem.cache(GridSearchForParameters) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					# Sending each model's results | 
					 | 
					 | 
					 | 
					    perm_imp_eli5PD = pd.DataFrame(permList) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    perm_imp_eli5PD = perm_imp_eli5PD.to_json() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    PerFeatureAccuracyPandas = pd.DataFrame(PerFeatureAccuracy) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    PerFeatureAccuracyPandas = PerFeatureAccuracyPandas.to_json() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    bestfeatures = SelectKBest(score_func=chi2, k='all') | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    fit = bestfeatures.fit(XData,yData) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    dfscores = pd.DataFrame(fit.scores_) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    dfcolumns = pd.DataFrame(XData.columns) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    featureScores = pd.concat([dfcolumns,dfscores],axis=1) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    featureScores.columns = ['Specs','Score']  #naming the dataframe columns | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    featureScores = featureScores.to_json() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    # gather the results and send them back | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    results.append(modelsIDs) # Position: 0 and so on | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    results.append(parametersPerformancePerModel) # Position: 1 and so on | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    results.append(PerClassMetricPandas) # Position: 2 and so on | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    results.append(PerFeatureAccuracyPandas) # Position: 3 and so on | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    results.append(perm_imp_eli5PD) # Position: 4 and so on | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    results.append(featureScores) # Position: 5 and so on | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    return results | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					# Sending each model's results to frontend | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					@app.route('/data/PerformanceForEachModel', methods=["GET", "POST"]) | 
					 | 
					 | 
					 | 
					@app.route('/data/PerformanceForEachModel', methods=["GET", "POST"]) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					def SendEachClassifiersPerformanceToVisualize(): | 
					 | 
					 | 
					 | 
					def SendEachClassifiersPerformanceToVisualize(): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    response = {     | 
					 | 
					 | 
					 | 
					    response = {     | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -833,161 +799,55 @@ def RetrieveModelsParam(): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    results = [] | 
					 | 
					 | 
					 | 
					    results = [] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    counter1 = 0 | 
					 | 
					 | 
					 | 
					    counter1 = 0 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    counter2 = 0 | 
					 | 
					 | 
					 | 
					    counter2 = 0 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    KNNModels = [] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    RFModels = [] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    parametersLocalKNN = json.loads(allParametersPerformancePerModel[1])['params'].copy() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    your_key = '496' | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    parametersLocalRF = json.loads(allParametersPerformancePerModel[4])['params'].copy() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    for index, items in enumerate(algorithmList): | 
					 | 
					 | 
					 | 
					    for index, items in enumerate(algorithmList): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        if (items == 'KNN'): | 
					 | 
					 | 
					 | 
					        if (items == 'KNN'): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            counter1 = counter1 + 1 | 
					 | 
					 | 
					 | 
					            counter1 = counter1 + 1 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            KNNModels.append(RetrieveModelsPar['models'][index]) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        else: | 
					 | 
					 | 
					 | 
					        else: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            counter2 = counter2 + 1 | 
					 | 
					 | 
					 | 
					            counter2 = counter2 + 1 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					            RFModels.append(str(int(RetrieveModelsPar['models'][index])-576)) | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    output = pd.DataFrame() | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    for d in RetrieveModelsPar['parameters']:   | 
					 | 
					 | 
					 | 
					    parametersLocalKNNNew = [ parametersLocalKNN[your_key] for your_key in KNNModels ] | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        output = output.append(json.loads(d), ignore_index=True) | 
					 | 
					 | 
					 | 
					    parametersLocalRFNew = [ parametersLocalRF[your_key] for your_key in RFModels ] | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    RetrieveModelsPandSel = output.loc[0:counter1,:] | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    RetrieveModelsPandSel2 = output.loc[counter1:counter1+counter2,:] | 
					 | 
					 | 
					 | 
					    #output = pd.DataFrame() | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    RetrieveModelsPandSelDic = RetrieveModelsPandSel.to_dict(orient='list') | 
					 | 
					 | 
					 | 
					    #print(RetrieveModelsPar['models']) | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    RetrieveModelsPandSelDic2 = RetrieveModelsPandSel2.to_dict(orient='list') | 
					 | 
					 | 
					 | 
					    #for d in RetrieveModelsPar['parameters']:   | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					    #    output = output.append(json.loads(d), ignore_index=True) | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    RetrieveModels = {} | 
					 | 
					 | 
					 | 
					    #RetrieveModelsPandSel = output.loc[0:counter1,:] | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    for key, value in RetrieveModelsPandSelDic.items(): | 
					 | 
					 | 
					 | 
					    #RetrieveModelsPandSel2 = output.loc[counter1:counter1+counter2,:] | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        withoutDuplicates = Remove(value) | 
					 | 
					 | 
					 | 
					    #RetrieveModelsPandSelDic = RetrieveModelsPandSel.to_dict(orient='list') | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        RetrieveModels[key] = withoutDuplicates | 
					 | 
					 | 
					 | 
					    #RetrieveModelsPandSelDic2 = RetrieveModelsPandSel2.to_dict(orient='list') | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					    #print(RetrieveModelsPandSelDic) | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    RetrieveModels2 = {} | 
					 | 
					 | 
					 | 
					    #RetrieveModels = {} | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    for key, value in RetrieveModelsPandSelDic2.items(): | 
					 | 
					 | 
					 | 
					    #for key, value in RetrieveModelsPandSelDic.items(): | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        withoutDuplicates = Remove(value) | 
					 | 
					 | 
					 | 
					    #    withoutDuplicates = Remove(value) | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        RetrieveModels2[key] = withoutDuplicates | 
					 | 
					 | 
					 | 
					    #    RetrieveModels[key] = withoutDuplicates | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    #RetrieveModels2 = {} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    #for key, value in RetrieveModelsPandSelDic2.items(): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    #    withoutDuplicates = Remove(value) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    #    RetrieveModels2[key] = withoutDuplicates | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global resultsList | 
					 | 
					 | 
					 | 
					    global resultsList | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    resultsList = [] | 
					 | 
					 | 
					 | 
					    resultsList = [] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    for alg in count: | 
					 | 
					 | 
					 | 
					    for alg in count: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        if (alg == 'KNN'): | 
					 | 
					 | 
					 | 
					        if (alg == 'KNN'): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            clf = KNeighborsClassifier() | 
					 | 
					 | 
					 | 
					            clf = KNeighborsClassifier() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            params = RetrieveModels | 
					 | 
					 | 
					 | 
					            #params = RetrieveModels | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            detailsParams.append(params) | 
					 | 
					 | 
					 | 
					            #detailsParams.append(params) | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            results.append(GridSearch(clf, params)) | 
					 | 
					 | 
					 | 
					            results.append(GridSearch(clf, parametersLocalKNNNew)) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            resultsList.append(results[0]) | 
					 | 
					 | 
					 | 
					            resultsList.append(results[0]) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        elif (alg == 'RF'): | 
					 | 
					 | 
					 | 
					        elif (alg == 'RF'): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            clf = RandomForestClassifier() | 
					 | 
					 | 
					 | 
					            clf = RandomForestClassifier() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            params = RetrieveModels2 | 
					 | 
					 | 
					 | 
					            #params = RetrieveModels2 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            detailsParams.append(params) | 
					 | 
					 | 
					 | 
					            #detailsParams.append(params) | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            results.append(GridSearch(clf, params)) | 
					 | 
					 | 
					 | 
					            results.append(GridSearch(clf, parametersLocalRFNew)) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            resultsList.append(results[0]) | 
					 | 
					 | 
					 | 
					            resultsList.append(results[0]) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        else: | 
					 | 
					 | 
					 | 
					        else: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            pass | 
					 | 
					 | 
					 | 
					            pass | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    return 'Everything Okay' | 
					 | 
					 | 
					 | 
					    return 'Everything Okay' | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					# Retrieve data from client  | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					@cross_origin(origin='localhost',headers=['Content-Type','Authorization']) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					@app.route('/data/FeaturesScoresUpdate', methods=["GET", "POST"]) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					def UpdateBarChartLine(): | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    RetrieveModelsforUpdate = request.get_data().decode('utf8').replace("'", '"') | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    RetrieveModelsforUpdate = json.loads(RetrieveModelsforUpdate) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    algorithms = RetrieveModelsforUpdate['algorithms'] | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    count = [] | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if ('KNN' in algorithms): | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        count.append('KNN') | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    else: | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        count.append(0) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if ('RF' in algorithms): | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        count.append('RF') | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    else: | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        count.append(0) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    results = [] | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    counter1 = 0 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    counter2 = 0 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    for index, items in enumerate(algorithms): | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        if (items == 'KNN'): | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            counter1 = counter1 + 1 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        else: | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            counter2 = counter2 + 1 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    output = pd.DataFrame() | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    output2 = pd.DataFrame() | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    loop = 0 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    for d in RetrieveModelsforUpdate['parameters']:   | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        if (loop < counter1): | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            output = output.append(json.loads(d), ignore_index=True) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        else: | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            output2 = output2.append(json.loads(d), ignore_index=True) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        loop = loop + 1 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    output.dropna(axis='columns') | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    output2.dropna(axis='columns') | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					     | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (output.empty): | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        pass | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    else: | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        RetrieveModelsPandSel = output.loc[0:counter1,:] | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        RetrieveModelsPandSelDic = RetrieveModelsPandSel.to_dict(orient='list') | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        RetrieveModels = {} | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        for key, value in RetrieveModelsPandSelDic.items(): | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            withoutDuplicates = Remove(value) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            RetrieveModels[key] = withoutDuplicates | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (output2.empty): | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        pass | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    else: | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        RetrieveModelsPandSel2 = output2.loc[0:counter2,:] | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        RetrieveModelsPandSelDic2 = RetrieveModelsPandSel2.to_dict(orient='list') | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        RetrieveModels2 = {} | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        for key, value in RetrieveModelsPandSelDic2.items(): | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            withoutDuplicates = Remove(value) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            RetrieveModels2[key] = withoutDuplicates | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    factors = [1,1,1,1,1,1] | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global allParametersPerformancePerModelUpdate | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    allParametersPerformancePerModelUpdate = [] | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    for alg in count: | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        if (alg == 'KNN'): | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            clf = KNeighborsClassifier() | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            params = RetrieveModels | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            GridSearchForUpdate(clf, params, factors) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        elif (alg == 'RF'): | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            clf = RandomForestClassifier() | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            params = RetrieveModels2 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            GridSearchForUpdate(clf, params, factors) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        else: | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            allParametersPerformancePerModelUpdate.append(0) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SendEachClassifiersPerformanceToVisualizeLinePlot() | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    return 'Everything Okay' | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					def GridSearchForUpdate(clf, params, factors): | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global scoring  | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global NumberofscoringMetrics | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    scoring = {'accuracy': 'accuracy', 'f1_macro': 'f1_weighted', 'precision': 'precision_weighted', 'recall': 'recall_weighted', 'jaccard': 'jaccard_weighted'} | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    NumberofscoringMetrics = len(scoring) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    grid = GridSearchCV(estimator=clf,  | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                param_grid=params, | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                scoring=scoring,  | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                cv=crossValidation, | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                refit='accuracy', | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                n_jobs = -1) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    grid.fit(XData, yData) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    yPredict = grid.predict(XData) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global allParametersPerformancePerModelUpdate | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global target_names | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global PerClassUpd | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global PerClassMetricUpdate | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    PerClassUpd = [] | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    PerClassMetricUpdate = [] | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    PerClassUpd.append(classification_report(yData, yPredict, target_names=target_names, digits=2, output_dict=True)) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    PerClassMetricUpdate = pd.DataFrame(PerClassUpd)    | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    del PerClassMetricUpdate['accuracy']   | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    del PerClassMetricUpdate['macro avg']   | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    del PerClassMetricUpdate['weighted avg']   | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    PerClassMetricUpdate = PerClassMetricUpdate.to_json() | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    allParametersPerformancePerModelUpdate.append(PerClassMetricUpdate) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    return 'Everything is okay' | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					# Sending each model's results | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					@app.route('/data/UpdatePerFeaturePerformance', methods=["GET", "POST"]) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					def SendEachClassifiersPerformanceToVisualizeLinePlot (): | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    global allParametersPerformancePerModelUpdate | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    response = {     | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        'PerformanceCheck': allParametersPerformancePerModelUpdate, | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    } | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    return jsonify(response) | 
					 | 
					 | 
					 | 
					 |