parent
							
								
									4d5a8b9796
								
							
						
					
					
						commit
						877575a375
					
				
									
										Binary file not shown.
									
								
							
						| @ -0,0 +1 @@ | ||||
| {"duration": 0.006577968597412109, "input_args": {}} | ||||
| @ -0,0 +1,11 @@ | ||||
| # first line: 447 | ||||
| @memory.cache | ||||
| def create_global_function(): | ||||
|     global estimator | ||||
|     def estimator(C, gamma): | ||||
|         # initialize model | ||||
|         model = SVC(C=C, gamma=gamma, degree=1, random_state=RANDOM_SEED) | ||||
|         # set in cross-validation | ||||
|         result = cross_validate(model, XData, yData, cv=crossValidation) | ||||
|         # result is mean of test_score | ||||
|         return np.mean(result['test_score']) | ||||
| @ -0,0 +1 @@ | ||||
| {"duration": 4.569021940231323, "input_args": {}} | ||||
									
										Binary file not shown.
									
								
							
						| @ -0,0 +1,17 @@ | ||||
| # first line: 457 | ||||
| @memory.cache | ||||
| def executeModel(): | ||||
| 
 | ||||
|     create_global_function() | ||||
|     global estimator | ||||
| 
 | ||||
|     params = {"C": (0.0001, 10000), "gamma": (0.0001, 10000)} | ||||
|     svc_bayesopt = BayesianOptimization(estimator, params) | ||||
|     svc_bayesopt.maximize(init_points=5, n_iter=20, acq='ucb') | ||||
|     bestParams = svc_bayesopt.max['params'] | ||||
|     estimator = SVC(C=bestParams.get('C'), gamma=bestParams.get('gamma'), probability=True) | ||||
|     estimator.fit(XData, yData) | ||||
|     yPredict = estimator.predict(XData) | ||||
|     yPredictProb = cross_val_predict(estimator, XData, yData, cv=crossValidation, method='predict_proba') | ||||
| 
 | ||||
|     return 'Everything Okay' | ||||
| @ -1,8 +0,0 @@ | ||||
| <!-- About page for the application. --> | ||||
| 
 | ||||
| <template> | ||||
|   <div> | ||||
|     <img src="@/assets/isovis.jpg"> | ||||
|     <p>HyperSearVis is a visual analytics tool created by Angelos Chatzimparmpas, member of the ISOVIS Group, Linnaeus University, Sweden.</p> | ||||
|   </div> | ||||
| </template> | ||||
| @ -1,351 +0,0 @@ | ||||
| <template> | ||||
|   <div id="PCP" class="parcoords" style="min-height: 285px;"></div> | ||||
| </template> | ||||
| 
 | ||||
| <script> | ||||
| import 'parcoord-es/dist/parcoords.css'; | ||||
| import ParCoords from 'parcoord-es'; | ||||
| import * as d3Base from 'd3' | ||||
| 
 | ||||
| // attach all d3 plugins to the d3 library | ||||
| const d3 = Object.assign(d3Base) | ||||
| 
 | ||||
| import { EventBus } from '../main.js' | ||||
| 
 | ||||
| export default { | ||||
|   name: 'AlgorithmHyperParam', | ||||
|   data () { | ||||
|     return { | ||||
|       ModelsPerformance: 0, | ||||
|       selAlgorithm: 0, | ||||
|       keyAllOrClass: true, | ||||
|       listClassPerf: [], | ||||
|       pc: 0, | ||||
|       factors: [1,0,0 | ||||
|       ,1,0,0,1,0 | ||||
|       ,0,1,0,0,0 | ||||
|       ,0,0,1,0,0 | ||||
|       ,0,1,1,1 | ||||
|       ], | ||||
|       SVCModels: 576, | ||||
|       GausNBModels: 736,  | ||||
|       MLPModels: 1236, | ||||
|       LRModels: 1356,  | ||||
|       LDAModels: 1996, | ||||
|       QDAModels: 2196, | ||||
|       RFModels: 2446, | ||||
|       ExtraTModels: 2606, | ||||
|       AdaBModels: 2766, | ||||
|       GradBModels: 2926, | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     reset () { | ||||
|       d3.selectAll("#PCP > *").remove();  | ||||
|     }, | ||||
|     PCPView () { | ||||
|       d3.selectAll("#PCP > *").remove();  | ||||
|       if (this.selAlgorithm != '') { | ||||
|         var colors = ['#a6cee3','#1f78b4','#b2df8a','#33a02c','#fb9a99','#e31a1c','#fdbf6f','#ff7f00','#cab2d6','#6a3d9a','#b15928'] | ||||
|         var colorGiv = 0 | ||||
|          | ||||
|         var factorsLocal = this.factors | ||||
|         var divide = 0 | ||||
| 
 | ||||
|         factorsLocal.forEach(element => { | ||||
|           divide = element + divide | ||||
|         }); | ||||
| 
 | ||||
|         var McKNN = [] | ||||
|         const performanceAlgKNN = JSON.parse(this.ModelsPerformance[6]) | ||||
|         for (let j = 0; j < Object.values(performanceAlgKNN['mean_test_accuracy']).length; j++) { | ||||
|           let sumKNN | ||||
|           sumKNN = (factorsLocal[0] * Object.values(performanceAlgKNN['mean_test_accuracy'])[j]) + (factorsLocal[1] * Object.values(performanceAlgKNN['geometric_mean_score_micro'])[j]) + (factorsLocal[2] * Object.values(performanceAlgKNN['geometric_mean_score_macro'])[j]) | ||||
|             + (factorsLocal[3] * Object.values(performanceAlgKNN['geometric_mean_score_weighted'])[j]) + (factorsLocal[4] * Object.values(performanceAlgKNN['mean_test_precision_micro'])[j]) + (factorsLocal[5] * Object.values(performanceAlgKNN['mean_test_precision_macro'])[j]) + (factorsLocal[6] * Object.values(performanceAlgKNN['mean_test_precision_weighted'])[j]) + (factorsLocal[7] * Object.values(performanceAlgKNN['mean_test_recall_micro'])[j]) | ||||
|             + (factorsLocal[8] * Object.values(performanceAlgKNN['mean_test_recall_macro'])[j]) + (factorsLocal[9] * Object.values(performanceAlgKNN['mean_test_recall_weighted'])[j]) + (factorsLocal[10] * Object.values(performanceAlgKNN['f5_micro'])[j]) + (factorsLocal[11] * Object.values(performanceAlgKNN['f5_macro'])[j]) + (factorsLocal[12] * Object.values(performanceAlgKNN['f5_weighted'])[j]) + (factorsLocal[13] * Object.values(performanceAlgKNN['f1_micro'])[j]) | ||||
|             + (factorsLocal[14] * Object.values(performanceAlgKNN['f1_macro'])[j]) + (factorsLocal[15] * Object.values(performanceAlgKNN['f1_weighted'])[j]) + (factorsLocal[16] * Object.values(performanceAlgKNN['f2_micro'])[j]) + (factorsLocal[17] * Object.values(performanceAlgKNN['f2_macro'])[j]) + (factorsLocal[18] * Object.values(performanceAlgKNN['f2_weighted'])[j]) + (factorsLocal[19] * Math.abs(Object.values(performanceAlgKNN['matthews_corrcoef'])[j])) | ||||
|             + (factorsLocal[20] * Object.values(performanceAlgKNN['mean_test_roc_auc_ovo_weighted'])[j]) + (factorsLocal[21] * (1 - Object.values(performanceAlgKNN['log_loss'])[j])) | ||||
|           McKNN.push((sumKNN/divide)*100) | ||||
|         } | ||||
|         var McSVC = [] | ||||
|         const performanceAlgSVC = JSON.parse(this.ModelsPerformance[15]) | ||||
|         for (let j = 0; j < Object.values(performanceAlgSVC['mean_test_accuracy']).length; j++) { | ||||
|           let sumSVC | ||||
|           sumSVC = (factorsLocal[0] * Object.values(performanceAlgSVC['mean_test_accuracy'])[j]) + (factorsLocal[1] * Object.values(performanceAlgSVC['geometric_mean_score_micro'])[j]) + (factorsLocal[2] * Object.values(performanceAlgSVC['geometric_mean_score_macro'])[j]) | ||||
|             + (factorsLocal[3] * Object.values(performanceAlgSVC['geometric_mean_score_weighted'])[j]) + (factorsLocal[4] * Object.values(performanceAlgSVC['mean_test_precision_micro'])[j]) + (factorsLocal[5] * Object.values(performanceAlgSVC['mean_test_precision_macro'])[j]) + (factorsLocal[6] * Object.values(performanceAlgSVC['mean_test_precision_weighted'])[j]) + (factorsLocal[7] * Object.values(performanceAlgSVC['mean_test_recall_micro'])[j]) | ||||
|             + (factorsLocal[8] * Object.values(performanceAlgSVC['mean_test_recall_macro'])[j]) + (factorsLocal[9] * Object.values(performanceAlgSVC['mean_test_recall_weighted'])[j]) + (factorsLocal[10] * Object.values(performanceAlgSVC['f5_micro'])[j]) + (factorsLocal[11] * Object.values(performanceAlgSVC['f5_macro'])[j]) + (factorsLocal[12] * Object.values(performanceAlgSVC['f5_weighted'])[j]) + (factorsLocal[13] * Object.values(performanceAlgSVC['f1_micro'])[j]) | ||||
|             + (factorsLocal[14] * Object.values(performanceAlgSVC['f1_macro'])[j]) + (factorsLocal[15] * Object.values(performanceAlgSVC['f1_weighted'])[j]) + (factorsLocal[16] * Object.values(performanceAlgSVC['f2_micro'])[j]) + (factorsLocal[17] * Object.values(performanceAlgSVC['f2_macro'])[j]) + (factorsLocal[18] * Object.values(performanceAlgSVC['f2_weighted'])[j]) + (factorsLocal[19] * Math.abs(Object.values(performanceAlgSVC['matthews_corrcoef'])[j])) | ||||
|             + (factorsLocal[20] * Object.values(performanceAlgSVC['mean_test_roc_auc_ovo_weighted'])[j]) + (factorsLocal[21] * (1 - Object.values(performanceAlgSVC['log_loss'])[j])) | ||||
|           McSVC.push((sumSVC/divide)*100) | ||||
|         } | ||||
|         var McGausNB = [] | ||||
|         const performanceAlgGausNB = JSON.parse(this.ModelsPerformance[24]) | ||||
|         for (let j = 0; j < Object.values(performanceAlgGausNB['mean_test_accuracy']).length; j++) { | ||||
|           let sumGausNB  | ||||
|           sumGausNB = (factorsLocal[0] * Object.values(performanceAlgGausNB['mean_test_accuracy'])[j]) + (factorsLocal[1] * Object.values(performanceAlgGausNB['geometric_mean_score_micro'])[j]) + (factorsLocal[2] * Object.values(performanceAlgGausNB['geometric_mean_score_macro'])[j]) | ||||
|             + (factorsLocal[3] * Object.values(performanceAlgGausNB['geometric_mean_score_weighted'])[j]) + (factorsLocal[4] * Object.values(performanceAlgGausNB['mean_test_precision_micro'])[j]) + (factorsLocal[5] * Object.values(performanceAlgGausNB['mean_test_precision_macro'])[j]) + (factorsLocal[6] * Object.values(performanceAlgGausNB['mean_test_precision_weighted'])[j]) + (factorsLocal[7] * Object.values(performanceAlgGausNB['mean_test_recall_micro'])[j]) | ||||
|             + (factorsLocal[8] * Object.values(performanceAlgGausNB['mean_test_recall_macro'])[j]) + (factorsLocal[9] * Object.values(performanceAlgGausNB['mean_test_recall_weighted'])[j]) + (factorsLocal[10] * Object.values(performanceAlgGausNB['f5_micro'])[j]) + (factorsLocal[11] * Object.values(performanceAlgGausNB['f5_macro'])[j]) + (factorsLocal[12] * Object.values(performanceAlgGausNB['f5_weighted'])[j]) + (factorsLocal[13] * Object.values(performanceAlgGausNB['f1_micro'])[j]) | ||||
|             + (factorsLocal[14] * Object.values(performanceAlgGausNB['f1_macro'])[j]) + (factorsLocal[15] * Object.values(performanceAlgGausNB['f1_weighted'])[j]) + (factorsLocal[16] * Object.values(performanceAlgGausNB['f2_micro'])[j]) + (factorsLocal[17] * Object.values(performanceAlgGausNB['f2_macro'])[j]) + (factorsLocal[18] * Object.values(performanceAlgGausNB['f2_weighted'])[j]) + (factorsLocal[19] * Math.abs(Object.values(performanceAlgGausNB['matthews_corrcoef'])[j])) | ||||
|             + (factorsLocal[20] * Object.values(performanceAlgGausNB['mean_test_roc_auc_ovo_weighted'])[j]) + (factorsLocal[21] * (1 - Object.values(performanceAlgGausNB['log_loss'])[j])) | ||||
|           McGausNB.push((sumGausNB/divide)*100) | ||||
|         } | ||||
|         var McMLP = [] | ||||
|         const performanceAlgMLP = JSON.parse(this.ModelsPerformance[33]) | ||||
|         for (let j = 0; j < Object.values(performanceAlgMLP['mean_test_accuracy']).length; j++) { | ||||
|           let sumMLP | ||||
|         sumMLP = (factorsLocal[0] * Object.values(performanceAlgMLP['mean_test_accuracy'])[j]) + (factorsLocal[1] * Object.values(performanceAlgMLP['geometric_mean_score_micro'])[j]) + (factorsLocal[2] * Object.values(performanceAlgMLP['geometric_mean_score_macro'])[j]) | ||||
|           + (factorsLocal[3] * Object.values(performanceAlgMLP['geometric_mean_score_weighted'])[j]) + (factorsLocal[4] * Object.values(performanceAlgMLP['mean_test_precision_micro'])[j]) + (factorsLocal[5] * Object.values(performanceAlgMLP['mean_test_precision_macro'])[j]) + (factorsLocal[6] * Object.values(performanceAlgMLP['mean_test_precision_weighted'])[j]) + (factorsLocal[7] * Object.values(performanceAlgMLP['mean_test_recall_micro'])[j]) | ||||
|           + (factorsLocal[8] * Object.values(performanceAlgMLP['mean_test_recall_macro'])[j]) + (factorsLocal[9] * Object.values(performanceAlgMLP['mean_test_recall_weighted'])[j]) + (factorsLocal[10] * Object.values(performanceAlgMLP['f5_micro'])[j]) + (factorsLocal[11] * Object.values(performanceAlgMLP['f5_macro'])[j]) + (factorsLocal[12] * Object.values(performanceAlgMLP['f5_weighted'])[j]) + (factorsLocal[13] * Object.values(performanceAlgMLP['f1_micro'])[j]) | ||||
|           + (factorsLocal[14] * Object.values(performanceAlgMLP['f1_macro'])[j]) + (factorsLocal[15] * Object.values(performanceAlgMLP['f1_weighted'])[j]) + (factorsLocal[16] * Object.values(performanceAlgMLP['f2_micro'])[j]) + (factorsLocal[17] * Object.values(performanceAlgMLP['f2_macro'])[j]) + (factorsLocal[18] * Object.values(performanceAlgMLP['f2_weighted'])[j]) + (factorsLocal[19] * Math.abs(Object.values(performanceAlgMLP['matthews_corrcoef'])[j])) | ||||
|           + (factorsLocal[20] * Object.values(performanceAlgMLP['mean_test_roc_auc_ovo_weighted'])[j]) + (factorsLocal[21] * (1 - Object.values(performanceAlgMLP['log_loss'])[j])) | ||||
|           McMLP.push((sumMLP/divide)*100) | ||||
|         } | ||||
|         var McLR = [] | ||||
|         const performanceAlgLR = JSON.parse(this.ModelsPerformance[42]) | ||||
|         for (let j = 0; j < Object.values(performanceAlgLR['mean_test_accuracy']).length; j++) { | ||||
|           let sumLR | ||||
|         sumLR = (factorsLocal[0] * Object.values(performanceAlgLR['mean_test_accuracy'])[j]) + (factorsLocal[1] * Object.values(performanceAlgLR['geometric_mean_score_micro'])[j]) + (factorsLocal[2] * Object.values(performanceAlgLR['geometric_mean_score_macro'])[j]) | ||||
|           + (factorsLocal[3] * Object.values(performanceAlgLR['geometric_mean_score_weighted'])[j]) + (factorsLocal[4] * Object.values(performanceAlgLR['mean_test_precision_micro'])[j]) + (factorsLocal[5] * Object.values(performanceAlgLR['mean_test_precision_macro'])[j]) + (factorsLocal[6] * Object.values(performanceAlgLR['mean_test_precision_weighted'])[j]) + (factorsLocal[7] * Object.values(performanceAlgLR['mean_test_recall_micro'])[j]) | ||||
|           + (factorsLocal[8] * Object.values(performanceAlgLR['mean_test_recall_macro'])[j]) + (factorsLocal[9] * Object.values(performanceAlgLR['mean_test_recall_weighted'])[j]) + (factorsLocal[10] * Object.values(performanceAlgLR['f5_micro'])[j]) + (factorsLocal[11] * Object.values(performanceAlgLR['f5_macro'])[j]) + (factorsLocal[12] * Object.values(performanceAlgLR['f5_weighted'])[j]) + (factorsLocal[13] * Object.values(performanceAlgLR['f1_micro'])[j]) | ||||
|           + (factorsLocal[14] * Object.values(performanceAlgLR['f1_macro'])[j]) + (factorsLocal[15] * Object.values(performanceAlgLR['f1_weighted'])[j]) + (factorsLocal[16] * Object.values(performanceAlgLR['f2_micro'])[j]) + (factorsLocal[17] * Object.values(performanceAlgLR['f2_macro'])[j]) + (factorsLocal[18] * Object.values(performanceAlgLR['f2_weighted'])[j]) + (factorsLocal[19] * Math.abs(Object.values(performanceAlgLR['matthews_corrcoef'])[j])) | ||||
|           + (factorsLocal[20] * Object.values(performanceAlgLR['mean_test_roc_auc_ovo_weighted'])[j]) + (factorsLocal[21] * (1 - Object.values(performanceAlgLR['log_loss'])[j])) | ||||
|           McLR.push((sumLR/divide)*100) | ||||
|         } | ||||
|         var McLDA = [] | ||||
|         const performanceAlgLDA = JSON.parse(this.ModelsPerformance[51]) | ||||
|         for (let j = 0; j < Object.values(performanceAlgLDA['mean_test_accuracy']).length; j++) { | ||||
|           let sumLDA | ||||
|         sumLDA = (factorsLocal[0] * Object.values(performanceAlgLDA['mean_test_accuracy'])[j]) + (factorsLocal[1] * Object.values(performanceAlgLDA['geometric_mean_score_micro'])[j]) + (factorsLocal[2] * Object.values(performanceAlgLDA['geometric_mean_score_macro'])[j]) | ||||
|           + (factorsLocal[3] * Object.values(performanceAlgLDA['geometric_mean_score_weighted'])[j]) + (factorsLocal[4] * Object.values(performanceAlgLDA['mean_test_precision_micro'])[j]) + (factorsLocal[5] * Object.values(performanceAlgLDA['mean_test_precision_macro'])[j]) + (factorsLocal[6] * Object.values(performanceAlgLDA['mean_test_precision_weighted'])[j]) + (factorsLocal[7] * Object.values(performanceAlgLDA['mean_test_recall_micro'])[j]) | ||||
|           + (factorsLocal[8] * Object.values(performanceAlgLDA['mean_test_recall_macro'])[j]) + (factorsLocal[9] * Object.values(performanceAlgLDA['mean_test_recall_weighted'])[j]) + (factorsLocal[10] * Object.values(performanceAlgLDA['f5_micro'])[j]) + (factorsLocal[11] * Object.values(performanceAlgLDA['f5_macro'])[j]) + (factorsLocal[12] * Object.values(performanceAlgLDA['f5_weighted'])[j]) + (factorsLocal[13] * Object.values(performanceAlgLDA['f1_micro'])[j]) | ||||
|           + (factorsLocal[14] * Object.values(performanceAlgLDA['f1_macro'])[j]) + (factorsLocal[15] * Object.values(performanceAlgLDA['f1_weighted'])[j]) + (factorsLocal[16] * Object.values(performanceAlgLDA['f2_micro'])[j]) + (factorsLocal[17] * Object.values(performanceAlgLDA['f2_macro'])[j]) + (factorsLocal[18] * Object.values(performanceAlgLDA['f2_weighted'])[j]) + (factorsLocal[19] * Math.abs(Object.values(performanceAlgLDA['matthews_corrcoef'])[j])) | ||||
|           + (factorsLocal[20] * Object.values(performanceAlgLDA['mean_test_roc_auc_ovo_weighted'])[j]) + (factorsLocal[21] * (1 - Object.values(performanceAlgLDA['log_loss'])[j])) | ||||
|           McLDA.push((sumLDA/divide)*100) | ||||
|         } | ||||
|         var McQDA = [] | ||||
|         const performanceAlgQDA = JSON.parse(this.ModelsPerformance[60]) | ||||
|         for (let j = 0; j < Object.values(performanceAlgQDA['mean_test_accuracy']).length; j++) { | ||||
|           let sumQDA | ||||
|         sumQDA = (factorsLocal[0] * Object.values(performanceAlgQDA['mean_test_accuracy'])[j]) + (factorsLocal[1] * Object.values(performanceAlgQDA['geometric_mean_score_micro'])[j]) + (factorsLocal[2] * Object.values(performanceAlgQDA['geometric_mean_score_macro'])[j]) | ||||
|           + (factorsLocal[3] * Object.values(performanceAlgQDA['geometric_mean_score_weighted'])[j]) + (factorsLocal[4] * Object.values(performanceAlgQDA['mean_test_precision_micro'])[j]) + (factorsLocal[5] * Object.values(performanceAlgQDA['mean_test_precision_macro'])[j]) + (factorsLocal[6] * Object.values(performanceAlgQDA['mean_test_precision_weighted'])[j]) + (factorsLocal[7] * Object.values(performanceAlgQDA['mean_test_recall_micro'])[j]) | ||||
|           + (factorsLocal[8] * Object.values(performanceAlgQDA['mean_test_recall_macro'])[j]) + (factorsLocal[9] * Object.values(performanceAlgQDA['mean_test_recall_weighted'])[j]) + (factorsLocal[10] * Object.values(performanceAlgQDA['f5_micro'])[j]) + (factorsLocal[11] * Object.values(performanceAlgQDA['f5_macro'])[j]) + (factorsLocal[12] * Object.values(performanceAlgQDA['f5_weighted'])[j]) + (factorsLocal[13] * Object.values(performanceAlgQDA['f1_micro'])[j]) | ||||
|           + (factorsLocal[14] * Object.values(performanceAlgQDA['f1_macro'])[j]) + (factorsLocal[15] * Object.values(performanceAlgQDA['f1_weighted'])[j]) + (factorsLocal[16] * Object.values(performanceAlgQDA['f2_micro'])[j]) + (factorsLocal[17] * Object.values(performanceAlgQDA['f2_macro'])[j]) + (factorsLocal[18] * Object.values(performanceAlgQDA['f2_weighted'])[j]) + (factorsLocal[19] * Math.abs(Object.values(performanceAlgQDA['matthews_corrcoef'])[j])) | ||||
|           + (factorsLocal[20] * Object.values(performanceAlgQDA['mean_test_roc_auc_ovo_weighted'])[j]) + (factorsLocal[21] * (1 - Object.values(performanceAlgQDA['log_loss'])[j])) | ||||
|           McQDA.push((sumQDA/divide)*100) | ||||
|         } | ||||
|         var McRF = [] | ||||
|         const performanceAlgRF = JSON.parse(this.ModelsPerformance[69]) | ||||
|         for (let j = 0; j < Object.values(performanceAlgRF['mean_test_accuracy']).length; j++) { | ||||
|           let sumRF | ||||
|         sumRF = (factorsLocal[0] * Object.values(performanceAlgRF['mean_test_accuracy'])[j]) + (factorsLocal[1] * Object.values(performanceAlgRF['geometric_mean_score_micro'])[j]) + (factorsLocal[2] * Object.values(performanceAlgRF['geometric_mean_score_macro'])[j]) | ||||
|           + (factorsLocal[3] * Object.values(performanceAlgRF['geometric_mean_score_weighted'])[j]) + (factorsLocal[4] * Object.values(performanceAlgRF['mean_test_precision_micro'])[j]) + (factorsLocal[5] * Object.values(performanceAlgRF['mean_test_precision_macro'])[j]) + (factorsLocal[6] * Object.values(performanceAlgRF['mean_test_precision_weighted'])[j]) + (factorsLocal[7] * Object.values(performanceAlgRF['mean_test_recall_micro'])[j]) | ||||
|           + (factorsLocal[8] * Object.values(performanceAlgRF['mean_test_recall_macro'])[j]) + (factorsLocal[9] * Object.values(performanceAlgRF['mean_test_recall_weighted'])[j]) + (factorsLocal[10] * Object.values(performanceAlgRF['f5_micro'])[j]) + (factorsLocal[11] * Object.values(performanceAlgRF['f5_macro'])[j]) + (factorsLocal[12] * Object.values(performanceAlgRF['f5_weighted'])[j]) + (factorsLocal[13] * Object.values(performanceAlgRF['f1_micro'])[j]) | ||||
|           + (factorsLocal[14] * Object.values(performanceAlgRF['f1_macro'])[j]) + (factorsLocal[15] * Object.values(performanceAlgRF['f1_weighted'])[j]) + (factorsLocal[16] * Object.values(performanceAlgRF['f2_micro'])[j]) + (factorsLocal[17] * Object.values(performanceAlgRF['f2_macro'])[j]) + (factorsLocal[18] * Object.values(performanceAlgRF['f2_weighted'])[j]) + (factorsLocal[19] * Math.abs(Object.values(performanceAlgRF['matthews_corrcoef'])[j])) | ||||
|           + (factorsLocal[20] * Object.values(performanceAlgRF['mean_test_roc_auc_ovo_weighted'])[j]) + (factorsLocal[21] * (1 - Object.values(performanceAlgRF['log_loss'])[j])) | ||||
|           McRF.push((sumRF/divide)*100) | ||||
|         } | ||||
|         var McExtraT = [] | ||||
|         const performanceAlgExtraT = JSON.parse(this.ModelsPerformance[78]) | ||||
|         for (let j = 0; j < Object.values(performanceAlgExtraT['mean_test_accuracy']).length; j++) { | ||||
|           let sumExtraT | ||||
|         sumExtraT = (factorsLocal[0] * Object.values(performanceAlgExtraT['mean_test_accuracy'])[j]) + (factorsLocal[1] * Object.values(performanceAlgExtraT['geometric_mean_score_micro'])[j]) + (factorsLocal[2] * Object.values(performanceAlgExtraT['geometric_mean_score_macro'])[j]) | ||||
|           + (factorsLocal[3] * Object.values(performanceAlgExtraT['geometric_mean_score_weighted'])[j]) + (factorsLocal[4] * Object.values(performanceAlgExtraT['mean_test_precision_micro'])[j]) + (factorsLocal[5] * Object.values(performanceAlgExtraT['mean_test_precision_macro'])[j]) + (factorsLocal[6] * Object.values(performanceAlgExtraT['mean_test_precision_weighted'])[j]) + (factorsLocal[7] * Object.values(performanceAlgExtraT['mean_test_recall_micro'])[j]) | ||||
|           + (factorsLocal[8] * Object.values(performanceAlgExtraT['mean_test_recall_macro'])[j]) + (factorsLocal[9] * Object.values(performanceAlgExtraT['mean_test_recall_weighted'])[j]) + (factorsLocal[10] * Object.values(performanceAlgExtraT['f5_micro'])[j]) + (factorsLocal[11] * Object.values(performanceAlgExtraT['f5_macro'])[j]) + (factorsLocal[12] * Object.values(performanceAlgExtraT['f5_weighted'])[j]) + (factorsLocal[13] * Object.values(performanceAlgExtraT['f1_micro'])[j]) | ||||
|           + (factorsLocal[14] * Object.values(performanceAlgExtraT['f1_macro'])[j]) + (factorsLocal[15] * Object.values(performanceAlgExtraT['f1_weighted'])[j]) + (factorsLocal[16] * Object.values(performanceAlgExtraT['f2_micro'])[j]) + (factorsLocal[17] * Object.values(performanceAlgExtraT['f2_macro'])[j]) + (factorsLocal[18] * Object.values(performanceAlgExtraT['f2_weighted'])[j]) + (factorsLocal[19] * Math.abs(Object.values(performanceAlgExtraT['matthews_corrcoef'])[j])) | ||||
|           + (factorsLocal[20] * Object.values(performanceAlgExtraT['mean_test_roc_auc_ovo_weighted'])[j]) + (factorsLocal[21] * (1 - Object.values(performanceAlgExtraT['log_loss'])[j])) | ||||
|           McExtraT.push((sumExtraT/divide)*100) | ||||
|         } | ||||
|         var McAdaB = [] | ||||
|         const performanceAlgAdaB = JSON.parse(this.ModelsPerformance[87]) | ||||
|         for (let j = 0; j < Object.values(performanceAlgAdaB['mean_test_accuracy']).length; j++) { | ||||
|         let sumAdaB | ||||
|         sumAdaB = (factorsLocal[0] * Object.values(performanceAlgAdaB['mean_test_accuracy'])[j]) + (factorsLocal[1] * Object.values(performanceAlgAdaB['geometric_mean_score_micro'])[j]) + (factorsLocal[2] * Object.values(performanceAlgAdaB['geometric_mean_score_macro'])[j]) | ||||
|           + (factorsLocal[3] * Object.values(performanceAlgAdaB['geometric_mean_score_weighted'])[j]) + (factorsLocal[4] * Object.values(performanceAlgAdaB['mean_test_precision_micro'])[j]) + (factorsLocal[5] * Object.values(performanceAlgAdaB['mean_test_precision_macro'])[j]) + (factorsLocal[6] * Object.values(performanceAlgAdaB['mean_test_precision_weighted'])[j]) + (factorsLocal[7] * Object.values(performanceAlgAdaB['mean_test_recall_micro'])[j]) | ||||
|           + (factorsLocal[8] * Object.values(performanceAlgAdaB['mean_test_recall_macro'])[j]) + (factorsLocal[9] * Object.values(performanceAlgAdaB['mean_test_recall_weighted'])[j]) + (factorsLocal[10] * Object.values(performanceAlgAdaB['f5_micro'])[j]) + (factorsLocal[11] * Object.values(performanceAlgAdaB['f5_macro'])[j]) + (factorsLocal[12] * Object.values(performanceAlgAdaB['f5_weighted'])[j]) + (factorsLocal[13] * Object.values(performanceAlgAdaB['f1_micro'])[j]) | ||||
|           + (factorsLocal[14] * Object.values(performanceAlgAdaB['f1_macro'])[j]) + (factorsLocal[15] * Object.values(performanceAlgAdaB['f1_weighted'])[j]) + (factorsLocal[16] * Object.values(performanceAlgAdaB['f2_micro'])[j]) + (factorsLocal[17] * Object.values(performanceAlgAdaB['f2_macro'])[j]) + (factorsLocal[18] * Object.values(performanceAlgAdaB['f2_weighted'])[j]) + (factorsLocal[19] * Math.abs(Object.values(performanceAlgAdaB['matthews_corrcoef'])[j])) | ||||
|           + (factorsLocal[20] * Object.values(performanceAlgAdaB['mean_test_roc_auc_ovo_weighted'])[j]) + (factorsLocal[21] * (1 - Object.values(performanceAlgAdaB['log_loss'])[j])) | ||||
|           McAdaB.push((sumAdaB/divide)*100) | ||||
|         } | ||||
|         var McGradB = [] | ||||
|         const performanceAlgGradB = JSON.parse(this.ModelsPerformance[96]) | ||||
|         for (let j = 0; j < Object.values(performanceAlgGradB['mean_test_accuracy']).length; j++) { | ||||
|           let sumGradB | ||||
|         sumGradB = (factorsLocal[0] * Object.values(performanceAlgGradB['mean_test_accuracy'])[j]) + (factorsLocal[1] * Object.values(performanceAlgGradB['geometric_mean_score_micro'])[j]) + (factorsLocal[2] * Object.values(performanceAlgGradB['geometric_mean_score_macro'])[j]) | ||||
|           + (factorsLocal[3] * Object.values(performanceAlgGradB['geometric_mean_score_weighted'])[j]) + (factorsLocal[4] * Object.values(performanceAlgGradB['mean_test_precision_micro'])[j]) + (factorsLocal[5] * Object.values(performanceAlgGradB['mean_test_precision_macro'])[j]) + (factorsLocal[6] * Object.values(performanceAlgGradB['mean_test_precision_weighted'])[j]) + (factorsLocal[7] * Object.values(performanceAlgGradB['mean_test_recall_micro'])[j]) | ||||
|           + (factorsLocal[8] * Object.values(performanceAlgGradB['mean_test_recall_macro'])[j]) + (factorsLocal[9] * Object.values(performanceAlgGradB['mean_test_recall_weighted'])[j]) + (factorsLocal[10] * Object.values(performanceAlgGradB['f5_micro'])[j]) + (factorsLocal[11] * Object.values(performanceAlgGradB['f5_macro'])[j]) + (factorsLocal[12] * Object.values(performanceAlgGradB['f5_weighted'])[j]) + (factorsLocal[13] * Object.values(performanceAlgGradB['f1_micro'])[j]) | ||||
|           + (factorsLocal[14] * Object.values(performanceAlgGradB['f1_macro'])[j]) + (factorsLocal[15] * Object.values(performanceAlgGradB['f1_weighted'])[j]) + (factorsLocal[16] * Object.values(performanceAlgGradB['f2_micro'])[j]) + (factorsLocal[17] * Object.values(performanceAlgGradB['f2_macro'])[j]) + (factorsLocal[18] * Object.values(performanceAlgGradB['f2_weighted'])[j]) + (factorsLocal[19] * Math.abs(Object.values(performanceAlgGradB['matthews_corrcoef'])[j])) | ||||
|           + (factorsLocal[20] * Object.values(performanceAlgGradB['mean_test_roc_auc_ovo_weighted'])[j]) + (factorsLocal[21] * (1 - Object.values(performanceAlgGradB['log_loss'])[j])) | ||||
|           McGradB.push((sumGradB/divide)*100) | ||||
|         } | ||||
| 
 | ||||
|         var Combined = 0 | ||||
|         if (this.selAlgorithm == 'KNN') {     | ||||
|           Combined = JSON.parse(this.ModelsPerformance[1]) | ||||
|           colorGiv = colors[0] | ||||
|         } else if (this.selAlgorithm == 'SVC') {     | ||||
|           Combined = JSON.parse(this.ModelsPerformance[10]) | ||||
|           colorGiv = colors[1] | ||||
|         } else if (this.selAlgorithm == 'GauNB') {     | ||||
|           Combined = JSON.parse(this.ModelsPerformance[19]) | ||||
|           colorGiv = colors[2] | ||||
|         } else if (this.selAlgorithm == 'MLP') {     | ||||
|           Combined = JSON.parse(this.ModelsPerformance[28]) | ||||
|           colorGiv = colors[3] | ||||
|         } else if (this.selAlgorithm == 'LR') {     | ||||
|           Combined = JSON.parse(this.ModelsPerformance[37]) | ||||
|           colorGiv = colors[4] | ||||
|         } else if (this.selAlgorithm == 'LDA') {     | ||||
|           Combined = JSON.parse(this.ModelsPerformance[46]) | ||||
|           colorGiv = colors[5] | ||||
|         } else if (this.selAlgorithm == 'QDA') {     | ||||
|           Combined = JSON.parse(this.ModelsPerformance[55]) | ||||
|           colorGiv = colors[6] | ||||
|         } else if (this.selAlgorithm == 'RF') {     | ||||
|           Combined = JSON.parse(this.ModelsPerformance[64]) | ||||
|           colorGiv = colors[7] | ||||
|         } else if (this.selAlgorithm == 'ExtraT') {     | ||||
|           Combined = JSON.parse(this.ModelsPerformance[73]) | ||||
|           colorGiv = colors[8] | ||||
|         } else if (this.selAlgorithm == 'AdaB') {     | ||||
|           Combined = JSON.parse(this.ModelsPerformance[82]) | ||||
|           colorGiv = colors[9] | ||||
|         } else { | ||||
|           Combined = JSON.parse(this.ModelsPerformance[91]) | ||||
|           colorGiv = colors[10] | ||||
|         } | ||||
|         var valuesPerf = Object.values(Combined['params']) | ||||
|          | ||||
|         var ObjectsParams = Combined['params'] | ||||
|         var newObjectsParamsΚΝΝ = [] | ||||
|         var newObjectsParamsSVC = [] | ||||
|         var newObjectsParamsGausNB = [] | ||||
|         var newObjectsParamsMLP = [] | ||||
|         var newObjectsParamsLR = [] | ||||
|         var newObjectsParamsLDA = [] | ||||
|         var newObjectsParamsQDA = [] | ||||
|         var newObjectsParamsRF = [] | ||||
|         var newObjectsParamsExtraT = [] | ||||
|         var newObjectsParamsAdaB = [] | ||||
|         var newObjectsParamsGradB = [] | ||||
|         var ArrayCombined = [] | ||||
|         var temp | ||||
|         for (var i = 0; i < valuesPerf.length; i++) { | ||||
|           if (this.keyAllOrClass) { | ||||
|             if (this.selAlgorithm === 'KNN') { | ||||
|               newObjectsParamsΚΝΝ.push({model: i,'# Perf (%) #': McKNN[i],'n_neighbors':ObjectsParams[i].n_neighbors,'metric':ObjectsParams[i].metric,'algorithm':ObjectsParams[i].algorithm,'weights':ObjectsParams[i].weights}) | ||||
|               ArrayCombined[i] = newObjectsParamsΚΝΝ[i] | ||||
|             } else if (this.selAlgorithm === 'SVC') { | ||||
|               newObjectsParamsSVC.push({model: this.SVCModels + i,'# Perf (%) #': McSVC[i],'C':ObjectsParams[i].C,'kernel':ObjectsParams[i].kernel}) | ||||
|               ArrayCombined[i] = newObjectsParamsSVC[i] | ||||
|             } else if (this.selAlgorithm === 'GauNB') { | ||||
|               newObjectsParamsGausNB.push({model: this.GausNBModels + i,'# Perf (%) #': McGausNB[i],'var_smoothing':ObjectsParams[i].var_smoothing}) | ||||
|               ArrayCombined[i] = newObjectsParamsGausNB[i] | ||||
|             } else if (this.selAlgorithm === 'MLP') { | ||||
|               newObjectsParamsMLP.push({model: this.MLPModels + i,'# Perf (%) #': McMLP[i],'alpha':ObjectsParams[i].alpha,'tol':ObjectsParams[i].tol,'activation':ObjectsParams[i].activation,'max_iter':ObjectsParams[i].max_iter,'solver':ObjectsParams[i].solver}) | ||||
|               ArrayCombined[i] = newObjectsParamsMLP[i] | ||||
|             } else if (this.selAlgorithm === 'LR') { | ||||
|               newObjectsParamsLR.push({model: this.LRModels + i,'# Perf (%) #': McLR[i],'C':ObjectsParams[i].C,'max_iter':ObjectsParams[i].max_iter,'solver':ObjectsParams[i].solver,'penalty':ObjectsParams[i].penalty}) | ||||
|               ArrayCombined[i] = newObjectsParamsLR[i] | ||||
|             } else if (this.selAlgorithm === 'LDA') { | ||||
|               newObjectsParamsLDA.push({model: this.LDAModels + i,'# Perf (%) #': McLDA[i],'shrinkage':ObjectsParams[i].shrinkage,'solver':ObjectsParams[i].solver}) | ||||
|               ArrayCombined[i] = newObjectsParamsLDA[i] | ||||
|             } else if (this.selAlgorithm === 'QDA') { | ||||
|               newObjectsParamsQDA.push({model: this.QDAModels + i,'# Perf (%) #': McQDA[i],'reg_param':ObjectsParams[i].reg_param,'tol':ObjectsParams[i].tol}) | ||||
|               ArrayCombined[i] = newObjectsParamsQDA[i] | ||||
|             } else if (this.selAlgorithm === 'RF') { | ||||
|               newObjectsParamsRF.push({model: this.RFModels + i,'# Perf (%) #': McRF[i],'n_estimators':ObjectsParams[i].n_estimators,'criterion':ObjectsParams[i].criterion}) | ||||
|               ArrayCombined[i] = newObjectsParamsRF[i] | ||||
|             } else if (this.selAlgorithm === 'ExtraT') { | ||||
|               newObjectsParamsExtraT.push({model: this.ExtraTModels + i,'# Perf (%) #': McExtraT[i],'n_estimators':ObjectsParams[i].n_estimators,'criterion':ObjectsParams[i].criterion}) | ||||
|               ArrayCombined[i] = newObjectsParamsExtraT[i] | ||||
|             } else if (this.selAlgorithm === 'AdaB') { | ||||
|               newObjectsParamsAdaB.push({model: this.AdaBModels + i,'# Perf (%) #': McAdaB[i],'n_estimators':ObjectsParams[i].n_estimators,'learning_rate':ObjectsParams[i].learning_rate,'algorithm':ObjectsParams[i].algorithm}) | ||||
|               ArrayCombined[i] = newObjectsParamsAdaB[i] | ||||
|             } else { | ||||
|               newObjectsParamsGradB.push({model: this.GradBModels + i,'# Perf (%) #': McGradB[i],'n_estimators':ObjectsParams[i].n_estimators,'criterion':ObjectsParams[i].criterion,'learning_rate':ObjectsParams[i].learning_rate}) | ||||
|               ArrayCombined[i] = newObjectsParamsGradB[i] | ||||
|             } | ||||
|           } else { | ||||
|             if (this.selAlgorithm === 'KNN') { | ||||
|               newObjectsParamsΚΝΝ.push({model: i,'# Perf (%) #': this.listClassPerf[0][i],'n_neighbors':ObjectsParams[i].n_neighbors,'metric':ObjectsParams[i].metric,'algorithm':ObjectsParams[i].algorithm,'weights':ObjectsParams[i].weights}) | ||||
|               ArrayCombined[i] = newObjectsParamsΚΝΝ[i] | ||||
|             } else if (this.selAlgorithm === 'SVC') { | ||||
|               newObjectsParamsSVC.push({model: this.SVCModels + i,'# Perf (%) #': this.listClassPerf[1][i],'C':ObjectsParams[i].C,'kernel':ObjectsParams[i].kernel}) | ||||
|               ArrayCombined[i] = newObjectsParamsSVC[i] | ||||
|             } else if (this.selAlgorithm === 'GauNB') { | ||||
|               newObjectsParamsGausNB.push({model: this.GausNBModels + i,'# Perf (%) #': this.listClassPerf[2][i],'var_smoothing':ObjectsParams[i].var_smoothing}) | ||||
|               ArrayCombined[i] = newObjectsParamsGausNB[i] | ||||
|             } else if (this.selAlgorithm === 'MLP') { | ||||
|               newObjectsParamsMLP.push({model: this.MLPModels + i,'# Perf (%) #': this.listClassPerf[3][i],'alpha':ObjectsParams[i].alpha,'tol':ObjectsParams[i].tol,'activation':ObjectsParams[i].activation,'max_iter':ObjectsParams[i].max_iter,'solver':ObjectsParams[i].solver}) | ||||
|               ArrayCombined[i] = newObjectsParamsMLP[i] | ||||
|             } else if (this.selAlgorithm === 'LR') { | ||||
|               newObjectsParamsLR.push({model: this.LRModels + i,'# Perf (%) #': this.listClassPerf[4][i],'C':ObjectsParams[i].C,'max_iter':ObjectsParams[i].max_iter,'solver':ObjectsParams[i].solver,'penalty':ObjectsParams[i].penalty}) | ||||
|               ArrayCombined[i] = newObjectsParamsLR[i] | ||||
|             } else if (this.selAlgorithm === 'LDA') { | ||||
|               newObjectsParamsLDA.push({model: this.LDAModels + i,'# Perf (%) #': this.listClassPerf[5][i],'shrinkage':ObjectsParams[i].shrinkage,'solver':ObjectsParams[i].solver}) | ||||
|               ArrayCombined[i] = newObjectsParamsLDA[i] | ||||
|             } else if (this.selAlgorithm === 'QDA') { | ||||
|               newObjectsParamsQDA.push({model: this.QDAModels + i,'# Perf (%) #': this.listClassPerf[6][i],'reg_param':ObjectsParams[i].reg_param,'tol':ObjectsParams[i].tol}) | ||||
|               ArrayCombined[i] = newObjectsParamsQDA[i] | ||||
|             } else if (this.selAlgorithm === 'RF') { | ||||
|               newObjectsParamsRF.push({model: this.RFModels + i,'# Perf (%) #': this.listClassPerf[7][i],'n_estimators':ObjectsParams[i].n_estimators,'criterion':ObjectsParams[i].criterion}) | ||||
|               ArrayCombined[i] = newObjectsParamsRF[i] | ||||
|             } else if (this.selAlgorithm === 'ExtraT') { | ||||
|               newObjectsParamsExtraT.push({model: this.ExtraTModels + i,'# Perf (%) #': this.listClassPerf[8][i],'n_estimators':ObjectsParams[i].n_estimators,'criterion':ObjectsParams[i].criterion}) | ||||
|               ArrayCombined[i] = newObjectsParamsExtraT[i] | ||||
|             } else if (this.selAlgorithm === 'AdaB') { | ||||
|               newObjectsParamsAdaB.push({model: this.AdaBModels + i,'# Perf (%) #': this.listClassPerf[9][i],'n_estimators':ObjectsParams[i].n_estimators,'learning_rate':ObjectsParams[i].learning_rate,'algorithm':ObjectsParams[i].algorithm}) | ||||
|               ArrayCombined[i] = newObjectsParamsAdaB[i] | ||||
|             } else { | ||||
|               newObjectsParamsGradB.push({model: this.GradBModels + i,'# Perf (%) #': this.listClassPerf[10][i],'n_estimators':ObjectsParams[i].n_estimators,'criterion':ObjectsParams[i].criterion,'learning_rate':ObjectsParams[i].learning_rate}) | ||||
|               ArrayCombined[i] = newObjectsParamsGradB[i] | ||||
|             } | ||||
|           } | ||||
|         } | ||||
|         EventBus.$emit('AllAlModels', ArrayCombined.length) | ||||
|         this.pc = ParCoords()("#PCP") | ||||
|             .data(ArrayCombined) | ||||
|             .color(colorGiv) | ||||
|             .hideAxis(['model']) | ||||
|             .bundlingStrength(0) // set bundling strength | ||||
|             .smoothness(0) | ||||
|             .showControlPoints(false) | ||||
|             .render() | ||||
|             .brushMode('1D-axes') | ||||
|             .reorderable() | ||||
|             .interactive(); | ||||
| 
 | ||||
|         this.pc.on("brushend", function(d) { | ||||
|           EventBus.$emit('AllSelModels', d.length) | ||||
|           EventBus.$emit('UpdateBoxPlot', d) | ||||
|         }); | ||||
|       } | ||||
|     }, | ||||
|     sliders () { | ||||
| 
 | ||||
|     }, | ||||
| 
 | ||||
|     clear () { | ||||
|         d3.selectAll("#PCP > *").remove();  | ||||
|     }, | ||||
|   }, | ||||
|   mounted() { | ||||
|     EventBus.$on('ReturningBrushedPointsModels', this.brushed) | ||||
|     EventBus.$on('emittedEventCallingModelSelect', data => { this.selAlgorithm = data }) | ||||
|     EventBus.$on('emittedEventCallingModel', data => { this.ModelsPerformance = data }) | ||||
|     EventBus.$on('emittedEventCallingModel', this.PCPView) | ||||
|     EventBus.$on('ResponsiveandChange', this.PCPView) | ||||
|     EventBus.$on('emittedEventCallingModelClear', this.clear) | ||||
| 
 | ||||
|     EventBus.$on('CallFactorsView', data => { this.factors = data }) | ||||
|     EventBus.$on('CallFactorsView', this.PCPView) | ||||
| 
 | ||||
|     EventBus.$on('boxplotSet', data => { this.listClassPerf = data }) | ||||
|     EventBus.$on('boxplotCall', data => { this.keyAllOrClass = data }) | ||||
| 
 | ||||
|     // reset view | ||||
|     EventBus.$on('resetViews', this.reset) | ||||
|     EventBus.$on('clearPCP', this.reset) | ||||
|   } | ||||
| } | ||||
| </script> | ||||
									
										
											File diff suppressed because it is too large
											Load Diff
										
									
								
							
						| @ -1,309 +0,0 @@ | ||||
| <template> | ||||
| <div> | ||||
|   <div align="center"> | ||||
|             Projection method: <select id="selectBarChartCM" @change="selectVisualRepresentationCM()"> | ||||
|               <option value="mdsCM" selected>MDS</option> | ||||
|               <option value="tsneCM">t-SNE</option> | ||||
|               <option value="umapCM">UMAP</option> | ||||
|             </select> | ||||
|                | ||||
|             Action: <button | ||||
|             id="Remove" | ||||
|             v-on:click="Remove"> | ||||
|             <font-awesome-icon icon="dna" /> | ||||
|             {{ CrossoverMutateText }} | ||||
|             </button> | ||||
|   </div> | ||||
|   <div id="OverviewPlotlyCM" class="OverviewPlotlyCM"></div> | ||||
| </div> | ||||
| </template> | ||||
| 
 | ||||
| <script> | ||||
| import * as Plotly from 'plotly.js' | ||||
| import * as d3Base from 'd3' | ||||
| 
 | ||||
| import { EventBus } from '../main.js' | ||||
| 
 | ||||
| // attach all d3 plugins to the d3 library | ||||
| const d3 = Object.assign(d3Base) | ||||
| 
 | ||||
| export default { | ||||
|   name: 'CrossoverMutationSpace', | ||||
|   data () { | ||||
|     return { | ||||
|       CrossoverMutateText: 'Unselected points\' crossover & mutation', | ||||
|       WH: [], | ||||
|       ScatterPlotResults: '', | ||||
|       representationDef: 'mdsCM', | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     reset () { | ||||
|       Plotly.purge('OverviewPlotlyCM') | ||||
|     }, | ||||
|     selectVisualRepresentationCM () { | ||||
|       const representationSelectionDocum = document.getElementById('selectBarChartCM') | ||||
|       this.representationSelection = representationSelectionDocum.options[representationSelectionDocum.selectedIndex].value | ||||
|       EventBus.$emit('RepresentationSelectionCM', this.representationSelection) | ||||
|     }, | ||||
|     clean(obj) { | ||||
|       var propNames = Object.getOwnPropertyNames(obj); | ||||
|       for (var i = 0; i < propNames.length; i++) { | ||||
|         var propName = propNames[i]; | ||||
|         if (obj[propName] === null || obj[propName] === undefined) { | ||||
|           delete obj[propName]; | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     ScatterPlotView () { | ||||
|       Plotly.purge('OverviewPlotlyCM') | ||||
| 
 | ||||
|       var modelId = JSON.parse(this.ScatterPlotResults[0]) | ||||
|       var colorsforScatterPlot = JSON.parse(this.ScatterPlotResults[1]) | ||||
|       var parametersLoc = JSON.parse(this.ScatterPlotResults[2]) | ||||
|       var parameters = JSON.parse(parametersLoc) | ||||
|       var MDSData= JSON.parse(this.ScatterPlotResults[9]) | ||||
|       var TSNEData = JSON.parse(this.ScatterPlotResults[10]) | ||||
|       var UMAPData = JSON.parse(this.ScatterPlotResults[11]) | ||||
| 
 | ||||
|       EventBus.$emit('sendPointsNumberCM', modelId.length) | ||||
| 
 | ||||
|       var stringParameters = [] | ||||
|       for (let i = 0; i < parameters.length; i++) { | ||||
|         this.clean(parameters[i]) | ||||
|         stringParameters.push(JSON.stringify(parameters[i]).replace(/,/gi, '<br>')) | ||||
|       } | ||||
| 
 | ||||
|       var classifiersInfoProcessing = [] | ||||
|       for (let i = 0; i < modelId.length; i++) { | ||||
|         if (i < 100) { | ||||
|           classifiersInfoProcessing[i] = '<b>Model ID:</b> ' + modelId[i] + '<br><b>Algorithm:</b> k-nearest neighbor' + '<br><b>Parameters:</b> ' + stringParameters[i] | ||||
|         } | ||||
|         else { | ||||
|           classifiersInfoProcessing[i] = '<b>Model ID:</b> ' + modelId[i] + '<br><b>Algorithm:</b> logistic regression' + '<br><b>Parameters:</b> ' + stringParameters[i] | ||||
|         } | ||||
|       } | ||||
| 
 | ||||
|       var DataGeneral, maxX, minX, maxY, minY, layout | ||||
| 
 | ||||
|       var width = this.WH[0]*8 // interactive visualization | ||||
|       var height = this.WH[1]*4 // interactive visualization | ||||
| 
 | ||||
|       if (this.representationDef == 'mdsCM') { | ||||
|         maxX = Math.max(MDSData[0]) | ||||
|         minX = Math.min(MDSData[0]) | ||||
|         maxY = Math.max(MDSData[1]) | ||||
|         minY = Math.max(MDSData[1]) | ||||
| 
 | ||||
|         DataGeneral = [{ | ||||
|           type: 'scatter', | ||||
|           mode: 'markers', | ||||
|           x: MDSData[0], | ||||
|           y: MDSData[1], | ||||
|           hovertemplate:  | ||||
|                 "%{text}<br><br>" + | ||||
|                 "<extra></extra>", | ||||
|           text: classifiersInfoProcessing, | ||||
|           marker: { | ||||
|            line: { color: 'rgb(0, 0, 0)', width: 3 }, | ||||
|             color: colorsforScatterPlot, | ||||
|             size: 12, | ||||
|             colorscale: 'Viridis', | ||||
|             colorbar: { | ||||
|               title: '# Performance (%) #', | ||||
|               titleside:'right', | ||||
|             }, | ||||
|           } | ||||
|          | ||||
|         }] | ||||
|         layout = { | ||||
| 
 | ||||
|           xaxis: { | ||||
|               visible: false, | ||||
|               range: [minX, maxX] | ||||
|           }, | ||||
|           yaxis: { | ||||
|               visible: false, | ||||
|               range: [minY, maxY] | ||||
|           }, | ||||
|           font: { family: 'Helvetica', size: 16, color: '#000000' }, | ||||
|           autosize: true, | ||||
|           width: width, | ||||
|           height: height, | ||||
|           dragmode: 'lasso', | ||||
|           hovermode: "closest", | ||||
|           hoverlabel: { bgcolor: "#FFF" }, | ||||
|           legend: {orientation: 'h', y: -0.3}, | ||||
|           margin: { | ||||
|             l: 50, | ||||
|             r: 0, | ||||
|             b: 30, | ||||
|             t: 40, | ||||
|             pad: 0 | ||||
|           }, | ||||
|         } | ||||
|       } else if (this.representationDef == 'tsneCM') { | ||||
|         var result = TSNEData.reduce(function(r, a) { | ||||
|             a.forEach(function(s, i) { | ||||
|                 var key = i === 0 ? 'Xax' : 'Yax'; | ||||
| 
 | ||||
|                 r[key] || (r[key] = []); // if key not found on result object, add the key with empty array as the value | ||||
| 
 | ||||
|                 r[key].push(s); | ||||
|             }) | ||||
|             return r; | ||||
|         }, {}) | ||||
|          | ||||
|         maxX = Math.max(result.Xax) | ||||
|         minX = Math.min(result.Xax) | ||||
|         maxY = Math.max(result.Yax) | ||||
|         minY = Math.max(result.Yax) | ||||
| 
 | ||||
|         DataGeneral = [{ | ||||
|           type: 'scatter', | ||||
|           mode: 'markers', | ||||
|           x: result.Xax, | ||||
|           y: result.Yax, | ||||
|           hovertemplate:  | ||||
|                 "%{text}<br><br>" + | ||||
|                 "<extra></extra>", | ||||
|           text: classifiersInfoProcessing, | ||||
|           marker: { | ||||
|               line: { color: 'rgb(0, 0, 0)', width: 3 }, | ||||
|               color: colorsforScatterPlot, | ||||
|               size: 12, | ||||
|               colorscale: 'Viridis', | ||||
|               colorbar: { | ||||
|                 title: '# Performance (%) #', | ||||
|                 titleside: 'right' | ||||
|               }, | ||||
|           } | ||||
|         }] | ||||
|         layout = { | ||||
| 
 | ||||
|           xaxis: { | ||||
|               visible: false, | ||||
|               range: [minX, maxX] | ||||
|           }, | ||||
|           yaxis: { | ||||
|               visible: false, | ||||
|               range: [minY, maxY] | ||||
|           }, | ||||
|           autosize: true, | ||||
|           width: width, | ||||
|           height: height, | ||||
|           dragmode: 'lasso', | ||||
|           hovermode: "closest", | ||||
|           hoverlabel: { bgcolor: "#FFF" }, | ||||
|           legend: {orientation: 'h', y: -0.3}, | ||||
|           margin: { | ||||
|             l: 50, | ||||
|             r: 0, | ||||
|             b: 30, | ||||
|             t: 40, | ||||
|             pad: 0 | ||||
|           }, | ||||
|         } | ||||
| 
 | ||||
|       } else { | ||||
|         maxX = Math.max(UMAPData[0]) | ||||
|         minX = Math.min(UMAPData[0]) | ||||
|         maxY = Math.max(UMAPData[1]) | ||||
|         minY = Math.max(UMAPData[1]) | ||||
| 
 | ||||
|         DataGeneral = [{ | ||||
|           type: 'scatter', | ||||
|           mode: 'markers', | ||||
|           x: UMAPData[0], | ||||
|           y: UMAPData[1], | ||||
|           hovertemplate:  | ||||
|                 "%{text}<br><br>" + | ||||
|                 "<extra></extra>", | ||||
|           text: classifiersInfoProcessing, | ||||
|           marker: { | ||||
|            line: { color: 'rgb(0, 0, 0)', width: 3 }, | ||||
|             color: colorsforScatterPlot, | ||||
|             size: 12, | ||||
|             colorscale: 'Viridis', | ||||
|             colorbar: { | ||||
|               title: '# Performance (%) #', | ||||
|               titleside: 'right' | ||||
|             }, | ||||
|           } | ||||
|          | ||||
|         }] | ||||
|         layout = { | ||||
| 
 | ||||
|           xaxis: { | ||||
|               visible: false, | ||||
|               range: [minX, maxX] | ||||
|           }, | ||||
|           yaxis: { | ||||
|               visible: false, | ||||
|               range: [minY, maxY] | ||||
|           }, | ||||
|           autosize: true, | ||||
|           width: width, | ||||
|           height: height, | ||||
|           dragmode: 'lasso', | ||||
|           hovermode: "closest", | ||||
|           hoverlabel: { bgcolor: "#FFF" }, | ||||
|           legend: {orientation: 'h', y: -0.3}, | ||||
|           margin: { | ||||
|             l: 50, | ||||
|             r: 0, | ||||
|             b: 30, | ||||
|             t: 40, | ||||
|             pad: 0 | ||||
|           }, | ||||
|         } | ||||
|       } | ||||
|       | ||||
|       var config = {scrollZoom: true, displaylogo: false, showLink: false, showSendToCloud: false, modeBarButtonsToRemove: ['toImage', 'toggleSpikelines', 'autoScale2d', 'hoverClosestGl2d','hoverCompareCartesian','select2d','hoverClosestCartesian','zoomIn2d','zoomOut2d','zoom2d'], responsive: true} | ||||
|        | ||||
|       var scat = document.getElementById('OverviewPlotlyCM') | ||||
|        | ||||
|       Plotly.newPlot(scat, DataGeneral, layout, config) | ||||
|       this.selectedPointsOverview() | ||||
|     }, | ||||
|     selectedPointsOverview () { | ||||
|         const OverviewPlotly = document.getElementById('OverviewPlotlyCM') | ||||
|         var allModels = JSON.parse(this.ScatterPlotResults[0]) | ||||
|         OverviewPlotly.on('plotly_selected', function (evt) { | ||||
|           if (typeof evt !== 'undefined') { | ||||
|             var pushModelsRemainingTemp = [] | ||||
|             const ClassifierIDsList = [] | ||||
|             for (let i = 0; evt.points.length; i++) { | ||||
|               if (evt.points[i] === undefined) { | ||||
|                 break | ||||
|               } else { | ||||
|                 const OnlyId = evt.points[i].text.split(' ')[2] | ||||
|                 const OnlyIdCleared = OnlyId.split('<br>') | ||||
|                 ClassifierIDsList.push(OnlyIdCleared[0]) | ||||
|               } | ||||
|             } | ||||
|             for (let i = 0; i < allModels.length; i++) { | ||||
|               if (ClassifierIDsList.indexOf((allModels[i])) < 0) { | ||||
|                 pushModelsRemainingTemp.push(allModels[i]) | ||||
|               } | ||||
|             } | ||||
|               EventBus.$emit('RemainingPointsCM', pushModelsRemainingTemp) | ||||
|               EventBus.$emit('SendSelectedPointsUpdateIndicatorCM', ClassifierIDsList) | ||||
|               EventBus.$emit('SendSelectedPointsToServerEventCM', ClassifierIDsList) | ||||
|           } | ||||
|         }) | ||||
|       }, | ||||
|   }, | ||||
|   mounted() { | ||||
|     EventBus.$on('emittedEventCallingCrossoverMutation', data => { | ||||
|       this.ScatterPlotResults = data}) | ||||
|     EventBus.$on('emittedEventCallingCrossoverMutation', this.ScatterPlotView) | ||||
| 
 | ||||
|     EventBus.$on('RepresentationSelectionCM', data => {this.representationDef = data}) | ||||
|     EventBus.$on('RepresentationSelectionCM', this.ScatterPlotView) | ||||
| 
 | ||||
|     // reset view | ||||
|     EventBus.$on('resetViews', this.reset) | ||||
|   } | ||||
| } | ||||
| </script> | ||||
| @ -0,0 +1,86 @@ | ||||
| <template> | ||||
|   <div> | ||||
|     <label id="data" for="param-dataset" data-toggle="tooltip" data-placement="right" title="Tip: use one of the data sets already provided or upload a new file.">{{ dataset }}</label> | ||||
|     <select id="selectFile" @change="selectDataSet()"> | ||||
|         <option value="HeartC.csv" selected>Heart Disease</option> | ||||
|         <option value="IrisC.csv">Iris</option> | ||||
|         <option value="local">Upload New File</option> | ||||
|     </select> | ||||
|     <button class="btn-outline-success" | ||||
|     id="initializeID" | ||||
|     v-on:click="initialize"> | ||||
|     <font-awesome-icon icon="search" /> | ||||
|     {{ searchText }} | ||||
|     </button> | ||||
|     <button class="btn-outline-danger" | ||||
|     id="resetID" | ||||
|     v-on:click="reset"> | ||||
|     <font-awesome-icon icon="trash" /> | ||||
|     {{ resetText }} | ||||
|     </button> | ||||
|   </div> | ||||
| </template> | ||||
| 
 | ||||
| <script> | ||||
| import Papa from 'papaparse' | ||||
| import { EventBus } from '../main.js' | ||||
| import {$,jQuery} from 'jquery'; | ||||
| import * as d3Base from 'd3' | ||||
| 
 | ||||
| // attach all d3 plugins to the d3 library | ||||
| const d3 = Object.assign(d3Base) | ||||
| 
 | ||||
| export default { | ||||
|   name: 'FeatureSpace1', | ||||
|   data () { | ||||
|     return { | ||||
|       defaultDataSet: 'HeartC', // default value for the first data set | ||||
|       searchText: 'Hyper-parameter search', | ||||
|       resetText: 'Reset', | ||||
|       dataset: 'Data set' | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     selectDataSet () {    | ||||
|       const fileName = document.getElementById('selectFile') | ||||
|       this.defaultDataSet = fileName.options[fileName.selectedIndex].value | ||||
|       this.defaultDataSet = this.defaultDataSet.split('.')[0] | ||||
| 
 | ||||
|       if (this.defaultDataSet == "DiabetesC" || this.defaultDataSet == "HeartC" || this.defaultDataSet == "IrisC" || this.defaultDataSet == "StanceC") { // This is a function that handles a new file, which users can upload. | ||||
|         this.dataset = "Data set" | ||||
|         d3.select("#data").select("input").remove(); // Remove the selection field. | ||||
|         EventBus.$emit('SendToServerDataSetConfirmation', this.defaultDataSet) | ||||
|       } else { | ||||
|         EventBus.$emit('SendToServerDataSetConfirmation', this.defaultDataSet) | ||||
|         d3.select("#data").select("input").remove(); | ||||
|         this.dataset = "" | ||||
|         var data | ||||
|         d3.select("#data") | ||||
|           .append("input") | ||||
|           .attr("type", "file") | ||||
|           .style("font-size", "18.5px") | ||||
|           .style("width", "200px") | ||||
|           .on("change", function() { | ||||
|             var file = d3.event.target.files[0]; | ||||
|             Papa.parse(file, { | ||||
|                 header: true, | ||||
|                 dynamicTyping: true, | ||||
|                 skipEmptyLines: true, | ||||
|                 complete: function(results) { | ||||
|                   data = results.data; | ||||
|                   EventBus.$emit('SendToServerLocalFile', data) | ||||
|                 } | ||||
|               }); | ||||
|           }) | ||||
|       } | ||||
|     }, | ||||
|     reset () { | ||||
|       EventBus.$emit('reset') | ||||
|       EventBus.$emit('alternateFlagLock') | ||||
|     }, | ||||
|     initialize () { | ||||
|       EventBus.$emit('ConfirmDataSet') | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
| @ -0,0 +1,86 @@ | ||||
| <template> | ||||
|   <div> | ||||
|     <label id="data" for="param-dataset" data-toggle="tooltip" data-placement="right" title="Tip: use one of the data sets already provided or upload a new file.">{{ dataset }}</label> | ||||
|     <select id="selectFile" @change="selectDataSet()"> | ||||
|         <option value="HeartC.csv" selected>Heart Disease</option> | ||||
|         <option value="IrisC.csv">Iris</option> | ||||
|         <option value="local">Upload New File</option> | ||||
|     </select> | ||||
|     <button class="btn-outline-success" | ||||
|     id="initializeID" | ||||
|     v-on:click="initialize"> | ||||
|     <font-awesome-icon icon="search" /> | ||||
|     {{ searchText }} | ||||
|     </button> | ||||
|     <button class="btn-outline-danger" | ||||
|     id="resetID" | ||||
|     v-on:click="reset"> | ||||
|     <font-awesome-icon icon="trash" /> | ||||
|     {{ resetText }} | ||||
|     </button> | ||||
|   </div> | ||||
| </template> | ||||
| 
 | ||||
| <script> | ||||
| import Papa from 'papaparse' | ||||
| import { EventBus } from '../main.js' | ||||
| import {$,jQuery} from 'jquery'; | ||||
| import * as d3Base from 'd3' | ||||
| 
 | ||||
| // attach all d3 plugins to the d3 library | ||||
| const d3 = Object.assign(d3Base) | ||||
| 
 | ||||
| export default { | ||||
|   name: 'FeatureSpace2', | ||||
|   data () { | ||||
|     return { | ||||
|       defaultDataSet: 'HeartC', // default value for the first data set | ||||
|       searchText: 'Hyper-parameter search', | ||||
|       resetText: 'Reset', | ||||
|       dataset: 'Data set' | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     selectDataSet () {    | ||||
|       const fileName = document.getElementById('selectFile') | ||||
|       this.defaultDataSet = fileName.options[fileName.selectedIndex].value | ||||
|       this.defaultDataSet = this.defaultDataSet.split('.')[0] | ||||
| 
 | ||||
|       if (this.defaultDataSet == "DiabetesC" || this.defaultDataSet == "HeartC" || this.defaultDataSet == "IrisC" || this.defaultDataSet == "StanceC") { // This is a function that handles a new file, which users can upload. | ||||
|         this.dataset = "Data set" | ||||
|         d3.select("#data").select("input").remove(); // Remove the selection field. | ||||
|         EventBus.$emit('SendToServerDataSetConfirmation', this.defaultDataSet) | ||||
|       } else { | ||||
|         EventBus.$emit('SendToServerDataSetConfirmation', this.defaultDataSet) | ||||
|         d3.select("#data").select("input").remove(); | ||||
|         this.dataset = "" | ||||
|         var data | ||||
|         d3.select("#data") | ||||
|           .append("input") | ||||
|           .attr("type", "file") | ||||
|           .style("font-size", "18.5px") | ||||
|           .style("width", "200px") | ||||
|           .on("change", function() { | ||||
|             var file = d3.event.target.files[0]; | ||||
|             Papa.parse(file, { | ||||
|                 header: true, | ||||
|                 dynamicTyping: true, | ||||
|                 skipEmptyLines: true, | ||||
|                 complete: function(results) { | ||||
|                   data = results.data; | ||||
|                   EventBus.$emit('SendToServerLocalFile', data) | ||||
|                 } | ||||
|               }); | ||||
|           }) | ||||
|       } | ||||
|     }, | ||||
|     reset () { | ||||
|       EventBus.$emit('reset') | ||||
|       EventBus.$emit('alternateFlagLock') | ||||
|     }, | ||||
|     initialize () { | ||||
|       EventBus.$emit('ConfirmDataSet') | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
| @ -0,0 +1,86 @@ | ||||
| <template> | ||||
|   <div> | ||||
|     <label id="data" for="param-dataset" data-toggle="tooltip" data-placement="right" title="Tip: use one of the data sets already provided or upload a new file.">{{ dataset }}</label> | ||||
|     <select id="selectFile" @change="selectDataSet()"> | ||||
|         <option value="HeartC.csv" selected>Heart Disease</option> | ||||
|         <option value="IrisC.csv">Iris</option> | ||||
|         <option value="local">Upload New File</option> | ||||
|     </select> | ||||
|     <button class="btn-outline-success" | ||||
|     id="initializeID" | ||||
|     v-on:click="initialize"> | ||||
|     <font-awesome-icon icon="search" /> | ||||
|     {{ searchText }} | ||||
|     </button> | ||||
|     <button class="btn-outline-danger" | ||||
|     id="resetID" | ||||
|     v-on:click="reset"> | ||||
|     <font-awesome-icon icon="trash" /> | ||||
|     {{ resetText }} | ||||
|     </button> | ||||
|   </div> | ||||
| </template> | ||||
| 
 | ||||
| <script> | ||||
| import Papa from 'papaparse' | ||||
| import { EventBus } from '../main.js' | ||||
| import {$,jQuery} from 'jquery'; | ||||
| import * as d3Base from 'd3' | ||||
| 
 | ||||
| // attach all d3 plugins to the d3 library | ||||
| const d3 = Object.assign(d3Base) | ||||
| 
 | ||||
| export default { | ||||
|   name: 'FeatureSpace3', | ||||
|   data () { | ||||
|     return { | ||||
|       defaultDataSet: 'HeartC', // default value for the first data set | ||||
|       searchText: 'Hyper-parameter search', | ||||
|       resetText: 'Reset', | ||||
|       dataset: 'Data set' | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     selectDataSet () {    | ||||
|       const fileName = document.getElementById('selectFile') | ||||
|       this.defaultDataSet = fileName.options[fileName.selectedIndex].value | ||||
|       this.defaultDataSet = this.defaultDataSet.split('.')[0] | ||||
| 
 | ||||
|       if (this.defaultDataSet == "DiabetesC" || this.defaultDataSet == "HeartC" || this.defaultDataSet == "IrisC" || this.defaultDataSet == "StanceC") { // This is a function that handles a new file, which users can upload. | ||||
|         this.dataset = "Data set" | ||||
|         d3.select("#data").select("input").remove(); // Remove the selection field. | ||||
|         EventBus.$emit('SendToServerDataSetConfirmation', this.defaultDataSet) | ||||
|       } else { | ||||
|         EventBus.$emit('SendToServerDataSetConfirmation', this.defaultDataSet) | ||||
|         d3.select("#data").select("input").remove(); | ||||
|         this.dataset = "" | ||||
|         var data | ||||
|         d3.select("#data") | ||||
|           .append("input") | ||||
|           .attr("type", "file") | ||||
|           .style("font-size", "18.5px") | ||||
|           .style("width", "200px") | ||||
|           .on("change", function() { | ||||
|             var file = d3.event.target.files[0]; | ||||
|             Papa.parse(file, { | ||||
|                 header: true, | ||||
|                 dynamicTyping: true, | ||||
|                 skipEmptyLines: true, | ||||
|                 complete: function(results) { | ||||
|                   data = results.data; | ||||
|                   EventBus.$emit('SendToServerLocalFile', data) | ||||
|                 } | ||||
|               }); | ||||
|           }) | ||||
|       } | ||||
|     }, | ||||
|     reset () { | ||||
|       EventBus.$emit('reset') | ||||
|       EventBus.$emit('alternateFlagLock') | ||||
|     }, | ||||
|     initialize () { | ||||
|       EventBus.$emit('ConfirmDataSet') | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
| @ -0,0 +1,86 @@ | ||||
| <template> | ||||
|   <div> | ||||
|     <label id="data" for="param-dataset" data-toggle="tooltip" data-placement="right" title="Tip: use one of the data sets already provided or upload a new file.">{{ dataset }}</label> | ||||
|     <select id="selectFile" @change="selectDataSet()"> | ||||
|         <option value="HeartC.csv" selected>Heart Disease</option> | ||||
|         <option value="IrisC.csv">Iris</option> | ||||
|         <option value="local">Upload New File</option> | ||||
|     </select> | ||||
|     <button class="btn-outline-success" | ||||
|     id="initializeID" | ||||
|     v-on:click="initialize"> | ||||
|     <font-awesome-icon icon="search" /> | ||||
|     {{ searchText }} | ||||
|     </button> | ||||
|     <button class="btn-outline-danger" | ||||
|     id="resetID" | ||||
|     v-on:click="reset"> | ||||
|     <font-awesome-icon icon="trash" /> | ||||
|     {{ resetText }} | ||||
|     </button> | ||||
|   </div> | ||||
| </template> | ||||
| 
 | ||||
| <script> | ||||
| import Papa from 'papaparse' | ||||
| import { EventBus } from '../main.js' | ||||
| import {$,jQuery} from 'jquery'; | ||||
| import * as d3Base from 'd3' | ||||
| 
 | ||||
| // attach all d3 plugins to the d3 library | ||||
| const d3 = Object.assign(d3Base) | ||||
| 
 | ||||
| export default { | ||||
|   name: 'FeatureSpace4', | ||||
|   data () { | ||||
|     return { | ||||
|       defaultDataSet: 'HeartC', // default value for the first data set | ||||
|       searchText: 'Hyper-parameter search', | ||||
|       resetText: 'Reset', | ||||
|       dataset: 'Data set' | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     selectDataSet () {    | ||||
|       const fileName = document.getElementById('selectFile') | ||||
|       this.defaultDataSet = fileName.options[fileName.selectedIndex].value | ||||
|       this.defaultDataSet = this.defaultDataSet.split('.')[0] | ||||
| 
 | ||||
|       if (this.defaultDataSet == "DiabetesC" || this.defaultDataSet == "HeartC" || this.defaultDataSet == "IrisC" || this.defaultDataSet == "StanceC") { // This is a function that handles a new file, which users can upload. | ||||
|         this.dataset = "Data set" | ||||
|         d3.select("#data").select("input").remove(); // Remove the selection field. | ||||
|         EventBus.$emit('SendToServerDataSetConfirmation', this.defaultDataSet) | ||||
|       } else { | ||||
|         EventBus.$emit('SendToServerDataSetConfirmation', this.defaultDataSet) | ||||
|         d3.select("#data").select("input").remove(); | ||||
|         this.dataset = "" | ||||
|         var data | ||||
|         d3.select("#data") | ||||
|           .append("input") | ||||
|           .attr("type", "file") | ||||
|           .style("font-size", "18.5px") | ||||
|           .style("width", "200px") | ||||
|           .on("change", function() { | ||||
|             var file = d3.event.target.files[0]; | ||||
|             Papa.parse(file, { | ||||
|                 header: true, | ||||
|                 dynamicTyping: true, | ||||
|                 skipEmptyLines: true, | ||||
|                 complete: function(results) { | ||||
|                   data = results.data; | ||||
|                   EventBus.$emit('SendToServerLocalFile', data) | ||||
|                 } | ||||
|               }); | ||||
|           }) | ||||
|       } | ||||
|     }, | ||||
|     reset () { | ||||
|       EventBus.$emit('reset') | ||||
|       EventBus.$emit('alternateFlagLock') | ||||
|     }, | ||||
|     initialize () { | ||||
|       EventBus.$emit('ConfirmDataSet') | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
| @ -1,312 +0,0 @@ | ||||
| <template> | ||||
| <div> | ||||
|   <div align="center"> | ||||
|             Projection method: <select id="selectBarChart" @change="selectVisualRepresentation()"> | ||||
|               <option value="mds" selected>MDS</option> | ||||
|               <option value="tsne">t-SNE</option> | ||||
|               <option value="umap">UMAP</option> | ||||
|             </select> | ||||
|                | ||||
|             Action: <button | ||||
|             id="Remove" | ||||
|             v-on:click="Remove"> | ||||
|             <font-awesome-icon icon="dna" /> | ||||
|             {{ CrossoverMutateText }} | ||||
|             </button> | ||||
|   </div> | ||||
|   <div id="OverviewPlotly" class="OverviewPlotly"></div> | ||||
| </div> | ||||
| </template> | ||||
| 
 | ||||
| <script> | ||||
| import * as Plotly from 'plotly.js' | ||||
| import * as d3Base from 'd3' | ||||
| 
 | ||||
| import { EventBus } from '../main.js' | ||||
| 
 | ||||
| // attach all d3 plugins to the d3 library | ||||
| const d3 = Object.assign(d3Base) | ||||
| 
 | ||||
| export default { | ||||
|   name: 'HyperParameterSpace', | ||||
|   data () { | ||||
|     return { | ||||
|       CrossoverMutateText: 'Unselected points\' crossover & mutation', | ||||
|       WH: [], | ||||
|       ScatterPlotResults: '', | ||||
|       representationDef: 'mds', | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     reset () { | ||||
|       Plotly.purge('OverviewPlotly') | ||||
|     }, | ||||
|     clean(obj) { | ||||
|       var propNames = Object.getOwnPropertyNames(obj); | ||||
|       for (var i = 0; i < propNames.length; i++) { | ||||
|         var propName = propNames[i]; | ||||
|         if (obj[propName] === null || obj[propName] === undefined) { | ||||
|           delete obj[propName]; | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     selectVisualRepresentation () { | ||||
|       const representationSelectionDocum = document.getElementById('selectBarChart') | ||||
|       this.representationSelection = representationSelectionDocum.options[representationSelectionDocum.selectedIndex].value | ||||
|       EventBus.$emit('RepresentationSelection', this.representationSelection) | ||||
|     }, | ||||
|     ScatterPlotView () { | ||||
|       Plotly.purge('OverviewPlotly') | ||||
| 
 | ||||
|       var modelId = JSON.parse(this.ScatterPlotResults[0]) | ||||
|       var colorsforScatterPlot = JSON.parse(this.ScatterPlotResults[1]) | ||||
|       var parametersLoc = JSON.parse(this.ScatterPlotResults[2]) | ||||
|       var parameters = JSON.parse(parametersLoc) | ||||
|       var MDSData= JSON.parse(this.ScatterPlotResults[9]) | ||||
|       var TSNEData = JSON.parse(this.ScatterPlotResults[10]) | ||||
|       var UMAPData = JSON.parse(this.ScatterPlotResults[11]) | ||||
| 
 | ||||
|       EventBus.$emit('sendPointsNumber', modelId.length) | ||||
| 
 | ||||
|       var stringParameters = [] | ||||
|       for (let i = 0; i < parameters.length; i++) { | ||||
|         this.clean(parameters[i]) | ||||
|         stringParameters.push(JSON.stringify(parameters[i]).replace(/,/gi, '<br>')) | ||||
|       } | ||||
| 
 | ||||
|       var classifiersInfoProcessing = [] | ||||
|       for (let i = 0; i < modelId.length; i++) { | ||||
|         if (i < 100) { | ||||
|           classifiersInfoProcessing[i] = '<b>Model ID:</b> ' + modelId[i] + '<br><b>Algorithm:</b> k-nearest neighbor' + '<br><b>Parameters:</b> ' + stringParameters[i] | ||||
|         } | ||||
|         else { | ||||
|           classifiersInfoProcessing[i] = '<b>Model ID:</b> ' + modelId[i] + '<br><b>Algorithm:</b> logistic regression' + '<br><b>Parameters:</b> ' + stringParameters[i] | ||||
|         } | ||||
|       } | ||||
| 
 | ||||
|       var DataGeneral, maxX, minX, maxY, minY, layout | ||||
| 
 | ||||
|       var width = this.WH[0]*8 // interactive visualization | ||||
|       var height = this.WH[1]*4 // interactive visualization | ||||
| 
 | ||||
|       if (this.representationDef == 'mds') { | ||||
|         maxX = Math.max(MDSData[0]) | ||||
|         minX = Math.min(MDSData[0]) | ||||
|         maxY = Math.max(MDSData[1]) | ||||
|         minY = Math.max(MDSData[1]) | ||||
| 
 | ||||
|         DataGeneral = [{ | ||||
|           type: 'scatter', | ||||
|           mode: 'markers', | ||||
|           x: MDSData[0], | ||||
|           y: MDSData[1], | ||||
|           hovertemplate:  | ||||
|                 "%{text}<br><br>" + | ||||
|                 "<extra></extra>", | ||||
|           text: classifiersInfoProcessing, | ||||
|           marker: { | ||||
|            line: { color: 'rgb(0, 0, 0)', width: 3 }, | ||||
|             color: colorsforScatterPlot, | ||||
|             size: 12, | ||||
|             colorscale: 'Viridis', | ||||
|             colorbar: { | ||||
|               title: '# Performance (%) #', | ||||
|               titleside:'right', | ||||
|             }, | ||||
|           } | ||||
|          | ||||
|         }] | ||||
|         layout = { | ||||
| 
 | ||||
|           xaxis: { | ||||
|               visible: false, | ||||
|               range: [minX, maxX] | ||||
|           }, | ||||
|           yaxis: { | ||||
|               visible: false, | ||||
|               range: [minY, maxY] | ||||
|           }, | ||||
|           font: { family: 'Helvetica', size: 16, color: '#000000' }, | ||||
|           autosize: true, | ||||
|           width: width, | ||||
|           height: height, | ||||
|           dragmode: 'lasso', | ||||
|           hovermode: "closest", | ||||
|           hoverlabel: { bgcolor: "#FFF" }, | ||||
|           legend: {orientation: 'h', y: -0.3}, | ||||
|           margin: { | ||||
|             l: 50, | ||||
|             r: 0, | ||||
|             b: 30, | ||||
|             t: 40, | ||||
|             pad: 0 | ||||
|           }, | ||||
|         } | ||||
|       } else if (this.representationDef == 'tsne') { | ||||
|         var result = TSNEData.reduce(function(r, a) { | ||||
|             a.forEach(function(s, i) { | ||||
|                 var key = i === 0 ? 'Xax' : 'Yax'; | ||||
| 
 | ||||
|                 r[key] || (r[key] = []); // if key not found on result object, add the key with empty array as the value | ||||
| 
 | ||||
|                 r[key].push(s); | ||||
|             }) | ||||
|             return r; | ||||
|         }, {}) | ||||
|          | ||||
|         maxX = Math.max(result.Xax) | ||||
|         minX = Math.min(result.Xax) | ||||
|         maxY = Math.max(result.Yax) | ||||
|         minY = Math.max(result.Yax) | ||||
| 
 | ||||
|         DataGeneral = [{ | ||||
|           type: 'scatter', | ||||
|           mode: 'markers', | ||||
|           x: result.Xax, | ||||
|           y: result.Yax, | ||||
|           hovertemplate:  | ||||
|                 "%{text}<br><br>" + | ||||
|                 "<extra></extra>", | ||||
|           text: classifiersInfoProcessing, | ||||
|           marker: { | ||||
|               line: { color: 'rgb(0, 0, 0)', width: 3 }, | ||||
|               color: colorsforScatterPlot, | ||||
|               size: 12, | ||||
|               colorscale: 'Viridis', | ||||
|               colorbar: { | ||||
|                 title: '# Performance (%) #', | ||||
|                 titleside: 'right' | ||||
|               }, | ||||
|           } | ||||
|         }] | ||||
|         layout = { | ||||
| 
 | ||||
|           xaxis: { | ||||
|               visible: false, | ||||
|               range: [minX, maxX] | ||||
|           }, | ||||
|           yaxis: { | ||||
|               visible: false, | ||||
|               range: [minY, maxY] | ||||
|           }, | ||||
|           autosize: true, | ||||
|           width: width, | ||||
|           height: height, | ||||
|           dragmode: 'lasso', | ||||
|           hovermode: "closest", | ||||
|           hoverlabel: { bgcolor: "#FFF" }, | ||||
|           legend: {orientation: 'h', y: -0.3}, | ||||
|           margin: { | ||||
|             l: 50, | ||||
|             r: 0, | ||||
|             b: 30, | ||||
|             t: 40, | ||||
|             pad: 0 | ||||
|           }, | ||||
|         } | ||||
| 
 | ||||
|       } else { | ||||
|         maxX = Math.max(UMAPData[0]) | ||||
|         minX = Math.min(UMAPData[0]) | ||||
|         maxY = Math.max(UMAPData[1]) | ||||
|         minY = Math.max(UMAPData[1]) | ||||
| 
 | ||||
|         DataGeneral = [{ | ||||
|           type: 'scatter', | ||||
|           mode: 'markers', | ||||
|           x: UMAPData[0], | ||||
|           y: UMAPData[1], | ||||
|           hovertemplate:  | ||||
|                 "%{text}<br><br>" + | ||||
|                 "<extra></extra>", | ||||
|           text: classifiersInfoProcessing, | ||||
|           marker: { | ||||
|            line: { color: 'rgb(0, 0, 0)', width: 3 }, | ||||
|             color: colorsforScatterPlot, | ||||
|             size: 12, | ||||
|             colorscale: 'Viridis', | ||||
|             colorbar: { | ||||
|               title: '# Performance (%) #', | ||||
|               titleside: 'right' | ||||
|             }, | ||||
|           } | ||||
|          | ||||
|         }] | ||||
|         layout = { | ||||
| 
 | ||||
|           xaxis: { | ||||
|               visible: false, | ||||
|               range: [minX, maxX] | ||||
|           }, | ||||
|           yaxis: { | ||||
|               visible: false, | ||||
|               range: [minY, maxY] | ||||
|           }, | ||||
|           autosize: true, | ||||
|           width: width, | ||||
|           height: height, | ||||
|           dragmode: 'lasso', | ||||
|           hovermode: "closest", | ||||
|           hoverlabel: { bgcolor: "#FFF" }, | ||||
|           legend: {orientation: 'h', y: -0.3}, | ||||
|           margin: { | ||||
|             l: 50, | ||||
|             r: 0, | ||||
|             b: 30, | ||||
|             t: 40, | ||||
|             pad: 0 | ||||
|           }, | ||||
|         } | ||||
|       } | ||||
|       | ||||
|       var config = {scrollZoom: true, displaylogo: false, showLink: false, showSendToCloud: false, modeBarButtonsToRemove: ['toImage', 'toggleSpikelines', 'autoScale2d', 'hoverClosestGl2d','hoverCompareCartesian','select2d','hoverClosestCartesian','zoomIn2d','zoomOut2d','zoom2d'], responsive: true} | ||||
|        | ||||
|       var scat = document.getElementById('OverviewPlotly') | ||||
|        | ||||
|       Plotly.newPlot(scat, DataGeneral, layout, config) | ||||
|       this.selectedPointsOverview() | ||||
|     }, | ||||
|     selectedPointsOverview () { | ||||
|       const OverviewPlotly = document.getElementById('OverviewPlotly') | ||||
|       var allModels = JSON.parse(this.ScatterPlotResults[0]) | ||||
|       OverviewPlotly.on('plotly_selected', function (evt) { | ||||
|         if (typeof evt !== 'undefined') { | ||||
|           var pushModelsRemainingTemp = [] | ||||
|           const ClassifierIDsList = [] | ||||
|           for (let i = 0; evt.points.length; i++) { | ||||
|             if (evt.points[i] === undefined) { | ||||
|               break | ||||
|             } else { | ||||
|               const OnlyId = evt.points[i].text.split(' ')[2] | ||||
|               const OnlyIdCleared = OnlyId.split('<br>') | ||||
|               ClassifierIDsList.push(OnlyIdCleared[0]) | ||||
|             } | ||||
|           } | ||||
|           for (let i = 0; i < allModels.length; i++) { | ||||
|             if (ClassifierIDsList.indexOf((allModels[i])) < 0) { | ||||
|               pushModelsRemainingTemp.push(allModels[i]) | ||||
|             } | ||||
|           } | ||||
|             EventBus.$emit('RemainingPoints', pushModelsRemainingTemp) | ||||
|             EventBus.$emit('SendSelectedPointsUpdateIndicator', ClassifierIDsList) | ||||
|             EventBus.$emit('SendSelectedPointsToServerEvent', ClassifierIDsList) | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|     Remove () { | ||||
|       EventBus.$emit('InitializeCrossoverMutation') | ||||
|     } | ||||
|   }, | ||||
|   mounted() { | ||||
|     EventBus.$on('emittedEventCallingScatterPlot', data => { | ||||
|       this.ScatterPlotResults = data}) | ||||
|     EventBus.$on('emittedEventCallingScatterPlot', this.ScatterPlotView) | ||||
| 
 | ||||
|     EventBus.$on('RepresentationSelection', data => {this.representationDef = data}) | ||||
|     EventBus.$on('RepresentationSelection', this.ScatterPlotView) | ||||
| 
 | ||||
|     // reset view | ||||
|     EventBus.$on('resetViews', this.reset) | ||||
|   } | ||||
| } | ||||
| </script> | ||||
| @ -1,8 +0,0 @@ | ||||
| <!-- Page not found. --> | ||||
| 
 | ||||
| <template> | ||||
|   <div> | ||||
|     <img src="@/assets/isovis.jpg"> | ||||
|     <p>404 - Page Not Found</p> | ||||
|   </div> | ||||
| </template> | ||||
| @ -1,846 +0,0 @@ | ||||
| <template> | ||||
|     <div> | ||||
|       <b-row class="md-3"> | ||||
|         <b-col cols="12"> | ||||
|           <div id="overview"></div> | ||||
|         </b-col> | ||||
|       </b-row> | ||||
|     </div> | ||||
| </template> | ||||
| 
 | ||||
| <script> | ||||
| import { EventBus } from '../main.js' | ||||
| 
 | ||||
| import { legend } from 'd3-svg-legend' | ||||
| 
 | ||||
| export default { | ||||
|   name: 'Parameters', | ||||
|   data () { | ||||
|     return { | ||||
|       WH: [], | ||||
|       storeActiveModels: [], | ||||
|       allActiveKNN: [], | ||||
|       allActiveSVC: [], | ||||
|       allActiveGausNB: [], | ||||
|       allActiveMLP: [], | ||||
|       allActiveLR: [], | ||||
|       allActiveLDA: [], | ||||
|       allActiveQDA: [], | ||||
|       allActiveRF: [], | ||||
|       allActiveExtraT: [], | ||||
|       allActiveAdaB: [], | ||||
|       allActiveGradB: [], | ||||
|       storeParameters: [], | ||||
|       keepState: 0, | ||||
|       FlagKNN: 0, | ||||
|       FlagSVC: 0, | ||||
|       FlagGausNB: 0, | ||||
|       FlagMLP: 0, | ||||
|       FlagLR: 0, | ||||
|       FlagLDA: 0, | ||||
|       FlagQDA: 0, | ||||
|       FlagRF: 0, | ||||
|       FlagExtraT: 0, | ||||
|       FlagAdaB: 0, | ||||
|       FlagGradB: 0, | ||||
|       FlagBrushAll: 0, | ||||
|       SVCModels: 576, | ||||
|       GausNBModels: 736,  | ||||
|       MLPModels: 1236, | ||||
|       LRModels: 1356,  | ||||
|       LDAModels: 1996, | ||||
|       QDAModels: 2196, | ||||
|       RFModels: 2446, | ||||
|       ExtraTModels: 2606, | ||||
|       AdaBModels: 2766, | ||||
|       GradBModels: 2926, | ||||
|       countkNNRelated: [], | ||||
|       countKNN: 0, | ||||
|       countSVCRelated: [], | ||||
|       countSVC: 0, | ||||
|       countGausNBRelated: [], | ||||
|       countGausNB: 0, | ||||
|       countMLPRelated: [], | ||||
|       countMLP: 0, | ||||
|       countLRRelated: [], | ||||
|       countLR: 0, | ||||
|       countLDARelated: [], | ||||
|       countLDA: 0, | ||||
|       countQDARelated: [], | ||||
|       countQDA: 0, | ||||
|       countRFRelated: [], | ||||
|       countRF: 0, | ||||
|       countExtraTRelated: [], | ||||
|       countExtraT: 0, | ||||
|       countAdaBRelated: [], | ||||
|       countAdaB: 0, | ||||
|       countGradBRelated: [], | ||||
|       countGradB: 0, | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     reset () { | ||||
|       setTimeout(() => { | ||||
|           var svg = d3.select("#overview"); | ||||
|         svg.selectAll("*").remove(); | ||||
|       }, 50); | ||||
|     }, | ||||
|     RadarChart(id, data, options) { | ||||
|       var cfg = { | ||||
|       w: 600,				//Width of the circle | ||||
|       h: 600,				//Height of the circle | ||||
|       margin: {top: 60, right: 20, bottom: 20, left: 120}, //The margins around the circle | ||||
|       legendPosition: {x: 20, y: 20}, // the position of the legend, from the top-left corner of the svg | ||||
|       levels: 3,				//How many levels or inner circles should there be drawn | ||||
|       maxValue: 0, 				//What is the value that the biggest circle will represent | ||||
|       labelFactor: 1.25, 			//How much farther than the radius of the outer circle should the labels be placed | ||||
|       wrapWidth: 60, 			//The number of pixels after which a label needs to be given a new line | ||||
|       opacityArea: 0.35, 			//The opacity of the area of the blob | ||||
|       dotRadius: 2, 				//The size of the colored circles of each blog | ||||
|       opacityCircles: 0.1, 			//The opacity of the circles of each blob | ||||
|       strokeWidth: 2, 			//The width of the stroke around each blob | ||||
|       roundStrokes: false,			//If true the area and stroke will follow a round path (cardinal-closed) | ||||
|       color: d3.scale.category10(),		//Color function | ||||
|       axisName: "axis", | ||||
|       areaName:"areaName", | ||||
|       value: "value", | ||||
|       sortAreas: true, | ||||
|       colorsDiff: ['#a6cee3','#1f78b4','#b2df8a','#33a02c','#fb9a99','#e31a1c','#fdbf6f','#ff7f00','#cab2d6','#6a3d9a','#b15928'] | ||||
|       }; | ||||
|        | ||||
|       //Put all of the options into a variable called cfg | ||||
|       if('undefined' !== typeof options){ | ||||
|         for(var i in options){ | ||||
|         if('undefined' !== typeof options[i]){ cfg[i] = options[i]; } | ||||
|         }//for i | ||||
|       }//if | ||||
| 
 | ||||
|       //Map the fields specified in the configuration  | ||||
|       // to the axis and value variables | ||||
|       var axisName = cfg["axisName"], | ||||
|           areaName = cfg["areaName"], | ||||
|           value = cfg["value"]; | ||||
| 
 | ||||
|       //If the supplied maxValue is smaller than the actual one, replace by the max in the data | ||||
| 	    var maxValue = Math.max(cfg.maxValue, d3.max(data, function(i){return d3.max(i.map(function(o){return o.value;}))})) | ||||
|          | ||||
|       var allAxis = (data[0].map(function(d, i){ return d[axisName] })),	//Names of each axis | ||||
|         total = allAxis.length,					//The number of different axes | ||||
|         radius = Math.min(cfg.w/2, cfg.h/2), 			//Radius of the outermost circle | ||||
|         Format = d3.format('%'),			 	//Percentage formatting | ||||
|         angleSlice = Math.PI * 2 / total;			//The width in radians of each "slice" | ||||
| 
 | ||||
|       //Scale for the radius | ||||
|       var rScale = d3.scale.linear() | ||||
|         .range([0, radius]) | ||||
|         .domain([0, maxValue]); | ||||
|          | ||||
|       ///////////////////////////////////////////////////////// | ||||
|       //////////// Create the container SVG and g ///////////// | ||||
|       ///////////////////////////////////////////////////////// | ||||
| 
 | ||||
|       //Remove whatever chart with the same id/class was present before | ||||
|       d3.select(id).select("svg").remove(); | ||||
|        | ||||
|       //Initiate the radar chart SVG | ||||
|       var svg = d3.select(id).append("svg") | ||||
|           .attr("width",  cfg.w + cfg.margin.left + cfg.margin.right) | ||||
|           .attr("height", cfg.h + cfg.margin.top + cfg.margin.bottom) | ||||
|           .attr("class", "radar"+id); | ||||
|       //Append a g element		 | ||||
|       var g = svg.append("g") | ||||
|           .attr("transform", "translate(" + (cfg.w/2 + cfg.margin.left) + "," + (cfg.h/2 + cfg.margin.top) + ")"); | ||||
|        | ||||
|       ///////////////////////////////////////////////////////// | ||||
|       ////////// Glow filter for some extra pizzazz /////////// | ||||
|       ///////////////////////////////////////////////////////// | ||||
|        | ||||
|       //Filter for the outside glow | ||||
|       var filter = g.append('defs').append('filter').attr('id','glow'), | ||||
|         feGaussianBlur = filter.append('feGaussianBlur').attr('stdDeviation','2.5').attr('result','coloredBlur'), | ||||
|         feMerge = filter.append('feMerge'), | ||||
|         feMergeNode_1 = feMerge.append('feMergeNode').attr('in','coloredBlur'), | ||||
|         feMergeNode_2 = feMerge.append('feMergeNode').attr('in','SourceGraphic'); | ||||
| 
 | ||||
|       ///////////////////////////////////////////////////////// | ||||
|       /////////////// Draw the Circular grid ////////////////// | ||||
|       ///////////////////////////////////////////////////////// | ||||
|        | ||||
|       //Wrapper for the grid & axes | ||||
|       var axisGrid = g.append("g").attr("class", "axisWrapper"); | ||||
|        | ||||
|       //Draw the background circles | ||||
|       axisGrid.selectAll(".levels") | ||||
|         .data(d3.range(1,(cfg.levels+1)).reverse()) | ||||
|         .enter() | ||||
|         .append("circle") | ||||
|         .attr("class", "gridCircle") | ||||
|         .attr("transform", "translate(5,5)") | ||||
|         .attr("r", function(d, i){return radius/cfg.levels*d;}) | ||||
|         .style("fill", "#CDCDCD") | ||||
|         .style("stroke", "#CDCDCD") | ||||
|         .style("fill-opacity", cfg.opacityCircles) | ||||
|         .style("filter" , "url(#glow)"); | ||||
| 
 | ||||
|       //Text indicating at what % each level is | ||||
|       axisGrid.selectAll(".axisLabel") | ||||
|         .data(d3.range(1,(cfg.levels+1)).reverse()) | ||||
|         .enter().append("text") | ||||
|         .attr("class", "axisLabel") | ||||
|         .attr("x", 10) | ||||
|         .attr("y", function(d){return -d*radius/cfg.levels;}) | ||||
|         .attr("dy", "0.4em") | ||||
|         .style("font-size", "16px") | ||||
|         .attr("fill", "#737373") | ||||
|         .text(function(d,i) { return Format(maxValue * d/cfg.levels); }); | ||||
| 
 | ||||
|       ///////////////////////////////////////////////////////// | ||||
|       //////////////////// Draw the axes ////////////////////// | ||||
|       ///////////////////////////////////////////////////////// | ||||
|        | ||||
|       //Create the straight lines radiating outward from the center | ||||
|       var axis = axisGrid.selectAll(".axis") | ||||
|         .data(allAxis) | ||||
|         .enter() | ||||
|         .append("g") | ||||
|         .attr("class", "axis"); | ||||
|       //Append the lines | ||||
|       axis.append("line") | ||||
|         .attr("x1", 0) | ||||
|         .attr("y1", 0) | ||||
|         .attr("transform", "translate(5,5)") | ||||
|         .attr("x2", function(d, i){ return rScale(maxValue*1.2) * Math.cos(angleSlice*i - Math.PI/2); }) | ||||
|         .attr("y2", function(d, i){ return rScale(maxValue*1.2) * Math.sin(angleSlice*i - Math.PI/2); }) | ||||
|         .attr("class", "line") | ||||
|         .style("stroke", "white") | ||||
|         .style("stroke-width", "2px"); | ||||
| 
 | ||||
|       axis.append("rect") | ||||
|         .attr("text-anchor", "left") | ||||
|         .attr("dy", "0.35em") | ||||
|         .attr("x", function(d, i){ return (rScale(maxValue * cfg.labelFactor) * Math.cos(angleSlice*i - Math.PI/2)) - 25; }) | ||||
|         .attr("y", function(d, i){ return rScale(maxValue * cfg.labelFactor) * Math.sin(angleSlice*i - Math.PI/2); }) | ||||
|         .text(function(d){return d}) | ||||
|         .attr("width", 15) | ||||
|         .attr("height", 15) | ||||
|         .style("fill", function(d,i) { return cfg.colorsDiff[i]; }) | ||||
| 
 | ||||
|       //Append the labels at each axis | ||||
|       axis.append("text") | ||||
|         .attr("class", "legend") | ||||
|         .style("font-size", "16px") | ||||
|         .attr("text-anchor", "middle") | ||||
|         .attr("dy", "0em") | ||||
|         .style("font-size", "16px") | ||||
|         .attr("x", function(d, i){ return (rScale(maxValue * cfg.labelFactor) * Math.cos(angleSlice*i - Math.PI/2)) + 15; }) | ||||
|         .attr("y", function(d, i){ return rScale(maxValue * cfg.labelFactor) * Math.sin(angleSlice*i - Math.PI/2); }) | ||||
|         .text(function(d){return d}) | ||||
|         .call(wrap, cfg.wrapWidth); | ||||
| 
 | ||||
|       ///////////////////////////////////////////////////////// | ||||
|       ///////////// Draw the radar chart blobs //////////////// | ||||
|       ///////////////////////////////////////////////////////// | ||||
|        | ||||
|       //The radial line function | ||||
|       var radarLine = d3.svg.line.radial() | ||||
|         .interpolate("linear-closed") | ||||
|         .radius(function(d) { return rScale(d[value]); }) | ||||
|         .angle(function(d,i) {	return i*angleSlice; }); | ||||
|          | ||||
|       if(cfg.roundStrokes) { | ||||
|         radarLine.interpolate("cardinal-closed"); | ||||
|       } | ||||
|              | ||||
|       //Create a wrapper for the blobs	 | ||||
|       var blobWrapper = g.selectAll(".radarWrapper") | ||||
|         .data(data) | ||||
|         .enter().append("g") | ||||
|         .attr("transform", "translate(5,5)") | ||||
|         .attr("class", "radarWrapper"); | ||||
|            | ||||
|       //Append the backgrounds	 | ||||
|       blobWrapper | ||||
|         .append("path") | ||||
|         .attr("class", function(d) { | ||||
|           return "radarArea" + " " + d[0][areaName].replace(/\s+/g, '') //Remove spaces from the areaName string to make one valid class name | ||||
|         }) | ||||
|         .attr("d", function(d,i) { return radarLine(d); }) | ||||
|         .style("fill", function(d,i) { return cfg.color(i); }) | ||||
|         .style("fill-opacity", cfg.opacityArea) | ||||
|         .on('mouseover', function (d,i){ | ||||
|           //Dim all blobs | ||||
|           d3.selectAll(".radarArea") | ||||
|             .transition().duration(200) | ||||
|             .style("fill-opacity", 0.1);  | ||||
|           //Bring back the hovered over blob | ||||
|           d3.select(this) | ||||
|             .transition().duration(200) | ||||
|             .style("fill-opacity", 0.7);	 | ||||
|         }) | ||||
|         .on('mouseout', function(){ | ||||
|           //Bring back all blobs | ||||
|           d3.selectAll(".radarArea") | ||||
|             .transition().duration(200) | ||||
|             .style("fill-opacity", cfg.opacityArea); | ||||
|         }); | ||||
|          | ||||
|       //Create the outlines	 | ||||
|       blobWrapper.append("path") | ||||
|         .attr("class", "radarStroke") | ||||
|         .attr("d", function(d,i) { return radarLine(d); }) | ||||
|         .style("stroke-width", cfg.strokeWidth + "px") | ||||
|         .style("stroke", function(d,i) { return cfg.color(i); }) | ||||
|         .style("fill", "none") | ||||
|         .style("filter" , "url(#glow)");		 | ||||
|        | ||||
|       //Append the circles | ||||
|       blobWrapper.selectAll(".radarCircle") | ||||
|         .data(function(d,i) { return d; }) | ||||
|         .enter().append("circle") | ||||
|         .attr("class", "radarCircle") | ||||
|         .attr("r", cfg.dotRadius) | ||||
|         .attr("cx", function(d,i){ return rScale(d[value]) * Math.cos(angleSlice*i - Math.PI/2); }) | ||||
|         .attr("cy", function(d,i){ return rScale(d[value]) * Math.sin(angleSlice*i - Math.PI/2); }) | ||||
|         .style("fill", function(d,i,j) { return cfg.color(j); }) | ||||
|         .style("fill-opacity", 0.8); | ||||
| 
 | ||||
|       ///////////////////////////////////////////////////////// | ||||
|       //////// Append invisible circles for tooltip /////////// | ||||
|       ///////////////////////////////////////////////////////// | ||||
|        | ||||
|       //Wrapper for the invisible circles on top | ||||
|       var blobCircleWrapper = g.selectAll(".radarCircleWrapper") | ||||
|         .data(data) | ||||
|         .enter().append("g") | ||||
|         .attr("class", "radarCircleWrapper"); | ||||
|          | ||||
|       //Append a set of invisible circles on top for the mouseover pop-up | ||||
|       blobCircleWrapper.selectAll(".radarInvisibleCircle") | ||||
|         .data(function(d,i) { return d; }) | ||||
|         .enter().append("circle") | ||||
|         .attr("class", "radarInvisibleCircle") | ||||
|         .attr("r", cfg.dotRadius*1.5) | ||||
|         .attr("cx", function(d,i){ return rScale(d[value]) * Math.cos(angleSlice*i - Math.PI/2); }) | ||||
|         .attr("cy", function(d,i){ return rScale(d[value]) * Math.sin(angleSlice*i - Math.PI/2); }) | ||||
|         .style("fill", "none") | ||||
|         .style("pointer-events", "all") | ||||
|         .on("mouseover", function(d,i) { | ||||
|           var newX | ||||
|           var newY | ||||
|           newX =  parseFloat(d3.select(this).attr('cx')) - 10; | ||||
|           newY =  parseFloat(d3.select(this).attr('cy')) - 10; | ||||
|                | ||||
|           tooltip | ||||
|             .attr('x', newX+5) | ||||
|             .attr('y', newY+5) | ||||
|             .text(Format(d[value])) | ||||
|             .transition().duration(200) | ||||
|             .style('opacity', 1); | ||||
|         }) | ||||
|         .on("mouseout", function(){ | ||||
|           tooltip.transition().duration(200) | ||||
|             .style("opacity", 0); | ||||
|         }); | ||||
|          | ||||
|       //Set up the small tooltip for when you hover over a circle | ||||
|       var tooltip = g.append("text") | ||||
|         .attr("class", "tooltip") | ||||
|         .style("opacity", 0); | ||||
|        | ||||
|       ///////////////////////////////////////////////////////// | ||||
|       /////////////////// Helper Functions //////////////////// | ||||
|       ///////////////////////////////////////////////////////// | ||||
| 
 | ||||
|       //Taken from http://bl.ocks.org/mbostock/7555321 | ||||
|       //Wraps SVG text	 | ||||
|       function wrap(text, width) { | ||||
|         text.each(function() { | ||||
|         var text = d3.select(this), | ||||
|           words = text.text().split(/\s+/).reverse(), | ||||
|           word, | ||||
|           line = [], | ||||
|           lineNumber = 0, | ||||
|           lineHeight = 1.4, // ems | ||||
|           y = text.attr("y"), | ||||
|           x = text.attr("x"), | ||||
|           dy = parseFloat(text.attr("dy")), | ||||
|           tspan = text.text(null).append("tspan").attr("x", x).attr("y", y).attr("dy", dy + "em"); | ||||
|            | ||||
|         while (word = words.pop()) { | ||||
|           line.push(word); | ||||
|           tspan.text(line.join(" ")); | ||||
|           if (tspan.node().getComputedTextLength() > width) { | ||||
|           line.pop(); | ||||
|           tspan.text(line.join(" ")); | ||||
|           line = [word]; | ||||
|           tspan = text.append("tspan").attr("x", x).attr("y", y).attr("dy", ++lineNumber * lineHeight + dy + "em").text(word); | ||||
|           } | ||||
|         } | ||||
|         }); | ||||
|       }//wrap	 | ||||
| 
 | ||||
|       // on mouseover for the legend symbol | ||||
|       function cellover(d) { | ||||
|           //Dim all blobs | ||||
|           d3.selectAll(".radarArea") | ||||
|             .transition().duration(200) | ||||
|             .style("fill-opacity", 0.1);  | ||||
|           //Bring back the hovered over blob | ||||
|           d3.select("." + data[d][0][areaName].replace(/\s+/g, '')) | ||||
|             .transition().duration(200) | ||||
|             .style("fill-opacity", 0.7);	 | ||||
|       } | ||||
| 
 | ||||
|       // on mouseout for the legend symbol | ||||
|       function cellout() { | ||||
|         //Bring back all blobs | ||||
|         d3.selectAll(".radarArea") | ||||
|           .transition().duration(200) | ||||
|           .style("fill-opacity", cfg.opacityArea); | ||||
|       } | ||||
| 
 | ||||
|       ///////////////////////////////////////////////////////// | ||||
|       /////////////////// Draw the Legend ///////////////////// | ||||
|       ///////////////////////////////////////////////////////// | ||||
| 
 | ||||
|       svg.append("g") | ||||
|         .attr("class", "legendOrdinal") | ||||
|         .attr("transform", "translate(" + cfg["legendPosition"]["x"] + "," + cfg["legendPosition"]["y"] + ")"); | ||||
| 
 | ||||
|       var legendOrdinal = legend.color() | ||||
|           .shape("path", d3.svg.symbol().type("circle").size(150)()) | ||||
|           .shapePadding(10) | ||||
|           .scale(cfg.color) | ||||
|           .labels(cfg.color.domain().map(function(d){ | ||||
|             return data[d][0][areaName]; | ||||
|           })) | ||||
|           .on("cellover", function(d){ cellover(d); }) | ||||
|           .on("cellout", function(d) { cellout(); }); | ||||
| 
 | ||||
|       svg.select(".legendOrdinal").call(legendOrdinal); | ||||
|        | ||||
|     }, | ||||
|     overview() { | ||||
|        /* Radar chart design created by Nadieh Bremer - VisualCinnamon.com */ | ||||
|       // Clear Heatmap first | ||||
|       var svg = d3.select("#overview"); | ||||
|       svg.selectAll("*").remove(); | ||||
|       var widthinter = this.WH[0]*2 // interactive visualization | ||||
|       var heightinter = this.WH[1]*1.23 // interactive visualization | ||||
| 
 | ||||
|       const max = 640 | ||||
|       const KNNAll = 576 | ||||
|       const SVCAll = 160 | ||||
|       const GausNBAll = 500 | ||||
|       const MLPAll = 120 | ||||
|       const LRAll = 640 | ||||
|       const LDAAll = 200 | ||||
|       const QDAAll = 250 | ||||
|       const RFAll = 160 | ||||
|       const ExtraTAll = 160 | ||||
|       const AdaBAll = 160 | ||||
|       const GradBAll = 180 | ||||
| 
 | ||||
|       var KNNSelection = 0 | ||||
|       var SVCSelection = 0 | ||||
|       var GausNBSelection = 0 | ||||
|       var MLPSelection = 0 | ||||
|       var LRSelection = 0 | ||||
|       var LDASelection = 0 | ||||
|       var QDASelection = 0 | ||||
|       var RFSelection = 0 | ||||
|       var ExtraTSelection = 0 | ||||
|       var AdaBSelection = 0 | ||||
|       var GradBSelection = 0 | ||||
| 
 | ||||
|       if (this.FlagBrushAll == 0 && this.FlagKNN == 0 && this.FlagSVC == 0 && this.FlagGausNB == 0 && this.FlagMLP == 0 && this.FlagLR == 0 && this.FlagLDA == 0 && this.FlagQDA == 0 && this.FlagRF == 0 && this.FlagExtraT == 0 && this.FlagAdaB == 0 && this.FlagGradB == 0) { | ||||
|         this.storeActiveModels = [] | ||||
|         this.allActiveKNN = [] | ||||
|         this.allActiveSVC = [] | ||||
|         this.allActiveGausNB = [] | ||||
|         this.allActiveMLP = [] | ||||
|         this.allActiveLR = [] | ||||
|         this.allActiveLDA = [] | ||||
|         this.allActiveQDA = [] | ||||
|         this.allActiveRF = [] | ||||
|         this.allActiveExtraT = [] | ||||
|         this.allActiveAdaB = [] | ||||
|         this.allActiveGradB = [] | ||||
|         this.countkNNRelated = [] | ||||
|         this.countKNN = 0 | ||||
|         this.countSVCRelated = [] | ||||
|         this.countSVC = 0 | ||||
|         this.countGausNBRelated = [] | ||||
|         this.countGausNB = 0 | ||||
|         this.countMLPRelated = [] | ||||
|         this.countMLP = 0 | ||||
|         this.countLRRelated = [] | ||||
|         this.countLR = 0 | ||||
|         this.countLDARelated = [] | ||||
|         this.countLDA = 0 | ||||
|         this.countQDARelated = [] | ||||
|         this.countQDA = 0 | ||||
|         this.countRFRelated = [] | ||||
|         this.countRF = 0 | ||||
|         this.countExtraTRelated = [] | ||||
|         this.countExtraT = 0 | ||||
|         this.countAdaBRelated = [] | ||||
|         this.countAdaB = 0 | ||||
|         this.countGradBRelated = [] | ||||
|         this.countGradB = 0 | ||||
|       } | ||||
| 
 | ||||
|       if(JSON.stringify(this.keepState)!=JSON.stringify(this.storeActiveModels)) { | ||||
|         if (this.storeActiveModels.length != 0) { | ||||
|           var intersection = this.compare(this.keepState,this.storeActiveModels) | ||||
|           for (let k = 0; k < intersection.length; k++) { | ||||
|             if (intersection[k] > this.GradBModels) { | ||||
|               this.countGradB = 0 | ||||
|             } else if (intersection[k] > this.AdaBModels) { | ||||
|               this.countAdaB = 0 | ||||
|             } else if (intersection[k] > this.ExtraTModels) { | ||||
|               this.countExtraT = 0 | ||||
|             } else if (intersection[k] > this.RFModels) { | ||||
|               this.countRF = 0 | ||||
|             } else if (intersection[k] > this.QDAModels) { | ||||
|               this.countQDA = 0 | ||||
|             } else if (intersection[k] > this.LDAModels) { | ||||
|               this.countLDA = 0 | ||||
|             } else if (intersection[k] > this.LRModels) { | ||||
|               this.countLR = 0 | ||||
|             } else if (intersection[k] > this.MLPModels) { | ||||
|               this.countMLP = 0 | ||||
|             } else if (intersection[k] > this.GausNBModels) { | ||||
|               this.countGausNB = 0 | ||||
|             } else if (intersection[k] > this.SVCModels) { | ||||
|               this.countSVC = 0 | ||||
|             } else { | ||||
|               this.countKNN = 0 | ||||
|             } | ||||
|           } | ||||
|           | ||||
|           for (let i = 0; i < this.storeActiveModels.length; i++) { | ||||
|             if (this.storeActiveModels[i] > this.GradBModels) { | ||||
|               this.countGradBRelated.push(JSON.parse(this.storeParameters[this.storeActiveModels[i]])) | ||||
|               this.countGradB++ | ||||
|             } else if (this.storeActiveModels[i] > this.AdaBModels) { | ||||
|               this.countAdaBRelated.push(JSON.parse(this.storeParameters[this.storeActiveModels[i]])) | ||||
|               this.countAdaB++ | ||||
|             } else if (this.storeActiveModels[i] > this.ExtraTModels) { | ||||
|               this.countExtraTRelated.push(JSON.parse(this.storeParameters[this.storeActiveModels[i]])) | ||||
|               this.countExtraT++ | ||||
|             } else if (this.storeActiveModels[i] > this.RFModels) { | ||||
|               this.countRFRelated.push(JSON.parse(this.storeParameters[this.storeActiveModels[i]])) | ||||
|               this.countRF++ | ||||
|             } else if (this.storeActiveModels[i] > this.QDAModels) { | ||||
|               this.countQDARelated.push(JSON.parse(this.storeParameters[this.storeActiveModels[i]])) | ||||
|               this.countQDA++ | ||||
|             } else if (this.storeActiveModels[i] > this.LDAModels) { | ||||
|               this.countLDARelated.push(JSON.parse(this.storeParameters[this.storeActiveModels[i]])) | ||||
|               this.countLDA++ | ||||
|             } else if (this.storeActiveModels[i] > this.LRModels) { | ||||
|               this.countLRRelated.push(JSON.parse(this.storeParameters[this.storeActiveModels[i]])) | ||||
|               this.countLR++ | ||||
|             } else if (this.storeActiveModels[i] > this.MLPModels) { | ||||
|               this.countMLPRelated.push(JSON.parse(this.storeParameters[this.storeActiveModels[i]])) | ||||
|               this.countMLP++ | ||||
|             } else if (this.storeActiveModels[i] > this.GausNBModels) { | ||||
|               this.countGausNBRelated.push(JSON.parse(this.storeParameters[this.storeActiveModels[i]])) | ||||
|               this.countGausNB++ | ||||
|             } else if (this.storeActiveModels[i] > this.SVCModels) { | ||||
|               this.countSVCRelated.push(JSON.parse(this.storeParameters[this.storeActiveModels[i]])) | ||||
|               this.countSVC++ | ||||
|             } else { | ||||
|               this.countkNNRelated.push(JSON.parse(this.storeParameters[this.storeActiveModels[i]])) | ||||
|               this.countKNN++ | ||||
|             } | ||||
|           } | ||||
|         } | ||||
|         if (this.storeActiveModels[0] > this.GradBModels) { | ||||
|           this.allActiveGradB = this.countGradBRelated.slice() | ||||
|         } else if (this.storeActiveModels[0] > this.AdaBModels) { | ||||
|           this.allActiveAdaB = this.countAdaBRelated.slice() | ||||
|         } else if (this.storeActiveModels[0] > this.ExtraTModels) { | ||||
|           this.allActiveExtraT = this.countExtraTRelated.slice() | ||||
|         } else if (this.storeActiveModels[0] > this.RFModels) { | ||||
|           this.allActiveRF = this.countRFRelated.slice() | ||||
|         } else if (this.storeActiveModels[0] > this.QDAModels) { | ||||
|           this.allActiveQDA = this.countQDARelated.slice() | ||||
|         } else if (this.storeActiveModels[0] > this.LDAModels) { | ||||
|           this.allActiveLDA = this.countLDARelated.slice() | ||||
|         } else if (this.storeActiveModels[0] > this.LRModels) { | ||||
|           this.allActiveLR = this.countLRRelated.slice() | ||||
|         } else if (this.storeActiveModels[0] > this.MLPModels) { | ||||
|           this.allActiveMLP = this.countMLPRelated.slice() | ||||
|         } else if (this.storeActiveModels[0] > this.GausNBModels) { | ||||
|           this.allActiveGausNB = this.countGausNBRelated.slice() | ||||
|         } else if (this.storeActiveModels[0] > this.SVCModels) { | ||||
|           this.allActiveSVC = this.countSVCRelated.slice() | ||||
|         } else { | ||||
|           this.allActiveKNN = this.countkNNRelated.slice() | ||||
|         } | ||||
|       } | ||||
| 
 | ||||
|       KNNSelection = this.countKNN | ||||
|       SVCSelection = this.countSVC | ||||
|       GausNBSelection = this.countGausNB | ||||
|       MLPSelection = this.countMLP | ||||
|       LRSelection = this.countLR | ||||
|       LDASelection = this.countLDA | ||||
|       QDASelection = this.countQDA | ||||
|       RFSelection = this.countRF | ||||
|       ExtraTSelection = this.countExtraT | ||||
|       AdaBSelection = this.countAdaB | ||||
|       GradBSelection = this.countGradB | ||||
| 
 | ||||
|       this.keepState = JSON.parse(JSON.stringify(this.storeActiveModels)) | ||||
| 
 | ||||
|       if (this.FlagKNN == 1 && this.allActiveKNN.length == 0) { | ||||
|         KNNSelection = 576 | ||||
|       } | ||||
|       if (this.FlagSVC == 1 && this.allActiveSVC.length == 0) { | ||||
|         SVCSelection = 160 | ||||
|       } | ||||
|       if (this.FlagGausNB == 1 && this.allActiveGausNB.length == 0) { | ||||
|         GausNBSelection = 500 | ||||
|       } | ||||
|       if (this.FlagMLP == 1 && this.allActiveMLP.length == 0) { | ||||
|         MLPSelection = 120 | ||||
|       } | ||||
|       if (this.FlagLR == 1 && this.allActiveLR.length == 0) { | ||||
|         LRSelection = 640 | ||||
|       } | ||||
|       if (this.FlagLDA == 1 && this.allActiveLDA.length == 0) { | ||||
|         LDASelection = 200 | ||||
|       } | ||||
|       if (this.FlagQDA == 1 && this.allActiveQDA.length == 0) { | ||||
|         QDASelection = 250 | ||||
|       } | ||||
|       if (this.FlagRF == 1 && this.allActiveRF.length == 0) { | ||||
|         RFSelection = 160 | ||||
|       } | ||||
|       if (this.FlagExtraT == 1 && this.allActiveExtraT.length == 0) { | ||||
|         ExtraTSelection = 160 | ||||
|       } | ||||
|       if (this.FlagAdaB == 1 && this.allActiveAdaB.length == 0) { | ||||
|         AdaBSelection = 160 | ||||
|       } | ||||
|       if (this.FlagGradB == 1 && this.allActiveGradB.length == 0) { | ||||
|         GradBSelection = 180 | ||||
|       } | ||||
| 
 | ||||
|     //////////////////////////////////////////////////////////////  | ||||
|     //////////////////////// Set-Up //////////////////////////////  | ||||
|     //////////////////////////////////////////////////////////////  | ||||
| 
 | ||||
|       var margin = {top: 50, right: 120, bottom: 55, left: 65}, | ||||
|         legendPosition = {x: 425, y: 25}, | ||||
| 				width = Math.min(520, window.innerWidth - 10) - margin.left - margin.right, | ||||
|         height = Math.min(width + 12, window.innerHeight + 12 - margin.top - margin.bottom); | ||||
|          | ||||
| 			//////////////////////////////////////////////////////////////  | ||||
| 			////////////////////////// Data //////////////////////////////  | ||||
| 			//////////////////////////////////////////////////////////////  | ||||
| 
 | ||||
| 			var data = [ | ||||
| 					  [ | ||||
| 						{axis:"KNN [576]",legend:"Entire",value:KNNAll/max}, | ||||
|             {axis:"SVC [160]",legend:"Entire",value:SVCAll/max}, | ||||
|             {axis:"GauNB [500]",legend:"Entire",value:GausNBAll/max}, | ||||
|             {axis:"MLP [120]",legend:"Entire",value:MLPAll/max}, | ||||
|             {axis:"LR [640]",legend:"Entire",value:LRAll/max}, | ||||
|             {axis:"LDA [200]",legend:"Entire",value:LDAAll/max}, | ||||
|             {axis:"QDA [250]",legend:"Entire",value:QDAAll/max}, | ||||
|             {axis:"RF [160]",legend:"Entire",value:RFAll/max}, | ||||
|             {axis:"ExtraT [160]",legend:"Entire",value:ExtraTAll/max}, | ||||
|             {axis:"AdaB [160]",legend:"Entire",value:AdaBAll/max}, | ||||
|             {axis:"GradB [180]",legend:"Entire",value:GradBAll/max}, | ||||
|             ],[ | ||||
| 						{axis:"KNN [576]",legend:"Selection",value:KNNSelection/max}, | ||||
|             {axis:"SVC [160]",legend:"Selection",value:SVCSelection/max}, | ||||
|             {axis:"GauNB [500]",legend:"Selection",value:GausNBSelection/max}, | ||||
|             {axis:"MLP [120]",legend:"Selection",value:MLPSelection/max}, | ||||
|             {axis:"LR [640]",legend:"Selection",value:LRSelection/max}, | ||||
|             {axis:"LDA [200]",legend:"Selection",value:LDASelection/max}, | ||||
|             {axis:"QDA [250]",legend:"Selection",value:QDASelection/max}, | ||||
|             {axis:"RF [160]",legend:"Selectionn",value:RFSelection/max}, | ||||
|             {axis:"ExtraT [160]",legend:"Selection",value:ExtraTSelection/max}, | ||||
|             {axis:"AdaB [160]",legend:"Selection",value:AdaBSelection/max}, | ||||
|             {axis:"GradB [180]",legend:"Selection",value:GradBSelection/max}, | ||||
| 					  ], | ||||
| 					]; | ||||
| 			//////////////////////////////////////////////////////////////  | ||||
| 			//////////////////// Draw the Chart //////////////////////////  | ||||
| 			//////////////////////////////////////////////////////////////  | ||||
| 
 | ||||
| 			var color = d3.scale.ordinal() | ||||
| 				.range(["#ffed6f","#000000"]); | ||||
|        | ||||
| 			var radarChartOptions = { | ||||
| 			  w: width, | ||||
| 			  h: height, | ||||
|         margin: margin, | ||||
|         legendPosition: legendPosition, | ||||
| 			  maxValue: 0.5, | ||||
| 			  levels: 5, | ||||
| 			  roundStrokes: true, | ||||
|         color: color, | ||||
|         axisName: "axis", | ||||
|         areaName: "legend", | ||||
|         value: "value" | ||||
| 			}; | ||||
| 			//Call function to draw the Radar chart | ||||
| 			this.RadarChart("#overview", data, radarChartOptions); | ||||
|     }, | ||||
|     updateFlags () { | ||||
|       this.FlagKNN = 0 | ||||
|       this.FlagSVC = 0 | ||||
|       this.FlagGausNB = 0 | ||||
|       this.FlagMLP = 0 | ||||
|       this.FlagLR = 0 | ||||
|       this.FlagLDA = 0 | ||||
|       this.FlagQDA = 0 | ||||
|       this.FlagRF = 0 | ||||
|       this.FlagExtraT = 0 | ||||
|       this.FlagAdaB = 0 | ||||
|       this.FlagGradB = 0 | ||||
|     }, | ||||
|     compare(arr1,arr2){ | ||||
|        | ||||
|     const finalarray =[]; | ||||
| 
 | ||||
|     arr1.forEach((e1) => arr2.forEach((e2) => | ||||
|       {if(e1 === e2){ | ||||
|         finalarray.push(e1) | ||||
|       } | ||||
|     } | ||||
|        | ||||
|     )) | ||||
|     return finalarray | ||||
|     } | ||||
|   }, | ||||
|   mounted () { | ||||
|     EventBus.$on('updateFlagKNN', data => { this.FlagKNN = data }) | ||||
|     EventBus.$on('updateFlagSVC', data => { this.FlagSVC = data }) | ||||
|     EventBus.$on('updateFlagGauNB', data => { this.FlagGausNB = data }) | ||||
|     EventBus.$on('updateFlagMLP', data => { this.FlagMLP = data }) | ||||
|     EventBus.$on('updateFlagLR', data => { this.FlagLR = data }) | ||||
|     EventBus.$on('updateFlagLDA', data => { this.FlagLDA = data }) | ||||
|     EventBus.$on('updateFlagQDA', data => { this.FlagQDA = data }) | ||||
|     EventBus.$on('updateFlagRF', data => { this.FlagRF = data }) | ||||
|     EventBus.$on('updateFlagExtraT', data => { this.FlagExtraT = data }) | ||||
|     EventBus.$on('updateFlagAdaB', data => { this.FlagAdaB = data }) | ||||
|     EventBus.$on('updateFlagGradB', data => { this.FlagGradB = data }) | ||||
| 
 | ||||
|     EventBus.$on('flagBrushedAll', data => { this.FlagBrushAll = data }) | ||||
| 
 | ||||
|     EventBus.$on('updateFlagKNN', this.overview) | ||||
|     EventBus.$on('updateFlagSVC', this.overview) | ||||
|     EventBus.$on('updateFlagGauNB', this.overview) | ||||
|     EventBus.$on('updateFlagMLP', this.overview) | ||||
|     EventBus.$on('updateFlagLR', this.overview) | ||||
|     EventBus.$on('updateFlagLDA', this.overview) | ||||
|     EventBus.$on('updateFlagQDA', this.overview) | ||||
|     EventBus.$on('updateFlagRF', this.overview) | ||||
|     EventBus.$on('updateFlagExtraT', this.overview) | ||||
|     EventBus.$on('updateFlagAdaB', this.overview) | ||||
|     EventBus.$on('updateFlagGradB', this.overview) | ||||
| 
 | ||||
|     EventBus.$on('sendParameters', data => { this.storeParameters = data }) | ||||
|     EventBus.$on('updateActiveModels', data => { this.storeActiveModels = data }) | ||||
|     EventBus.$on('updateActiveModels', this.overview) | ||||
| 
 | ||||
|     EventBus.$on('Responsive', data => { | ||||
|     this.WH = data}) | ||||
|     EventBus.$on('ResponsiveandChange', data => { | ||||
|     this.WH = data}) | ||||
| 
 | ||||
|     // reset the views | ||||
|     EventBus.$on('resetViews', this.reset) | ||||
| 
 | ||||
|     EventBus.$on('alternateFlagLock', this.updateFlags) | ||||
|     EventBus.$on('alternateFlagLock', this.overview) | ||||
|   } | ||||
| 
 | ||||
| } | ||||
| </script> | ||||
| 
 | ||||
| <style> | ||||
| /* Styles go here */ | ||||
| 
 | ||||
| .category-circle { | ||||
|   fill: url(#gradient-categorization); | ||||
| } | ||||
| 
 | ||||
| .question-circle { | ||||
|   fill: url(#gradient-questions); | ||||
| } | ||||
| 
 | ||||
| .chart-area-circle { | ||||
|   stroke: #fff; | ||||
|   stroke-width: 3px; | ||||
|   fill: url(#gradient-chart-area); | ||||
|   transform: translate(5px, 5px); | ||||
| } | ||||
| 
 | ||||
| .center-circle { | ||||
|   fill: #fff; | ||||
|   transform: translate(5px, 5px); | ||||
| } | ||||
| 
 | ||||
| .bars { | ||||
|   fill: url(#gradient-bars); | ||||
| } | ||||
| 
 | ||||
| .gridlines { | ||||
|   fill: none; | ||||
|   stroke: #fff; | ||||
|   transform: translate(5px, 5px); | ||||
| } | ||||
| 
 | ||||
| .minor { | ||||
|   stroke-width: 1px | ||||
| } | ||||
| 
 | ||||
| .major { | ||||
|   stroke-width: 6px | ||||
| } | ||||
| 
 | ||||
| .question-label-arc { | ||||
|   /*fill: white; | ||||
|     stroke: #AAAAAA; | ||||
|     fill: url(#gradient-questions);*/ | ||||
| } | ||||
| 
 | ||||
| .category-label-text { | ||||
|   font-weight: bold; | ||||
|   font-size: 16px; | ||||
|   fill: #fff; | ||||
| } | ||||
| 
 | ||||
| .question-label-text { | ||||
|   font-size: 16px; | ||||
|   font-weight: bold; | ||||
|   fill: gray; | ||||
| } | ||||
| 
 | ||||
| .question-labels { | ||||
|   text-anchor: middle; | ||||
|   font-weight: bold; | ||||
| } | ||||
| 
 | ||||
| .category-labels { | ||||
|   text-anchor: middle; | ||||
|   font-weight: bold; | ||||
|   font-size: 16px; | ||||
|   fill: #fff; | ||||
| } | ||||
| 
 | ||||
| .filled { | ||||
|   fill: url(#mainGradient); | ||||
| } | ||||
| 
 | ||||
| #overview { | ||||
|   min-height: 450px; | ||||
| } | ||||
| </style> | ||||
| @ -1,148 +0,0 @@ | ||||
| <template> | ||||
| <div> | ||||
| <b-row> | ||||
|     <b-col cols="12"> | ||||
|       <table class="table table-borderless table-sm"> | ||||
|         <tbody> | ||||
|           <tr> | ||||
|             <th scope="col" colspan="2">Balanced data set</th> | ||||
|             <th scope="col" colspan="2">Imbalanced data set</th> | ||||
|           </tr> | ||||
|           <tr> | ||||
|             <td>(M1) Accuracy:</td> | ||||
|             <td> | ||||
|               <b-form-checkbox | ||||
|                 id="checkboxAcc" | ||||
|                 v-model="checkedAcc" | ||||
|                 @click="clickAcc" | ||||
|               > | ||||
|               </b-form-checkbox> | ||||
|             </td> | ||||
|             <td>(M1*) G-mean:</td> | ||||
|             <td> | ||||
|               <b-form-checkbox | ||||
|                 id="checkboxGM" | ||||
|                 v-model="checkedGM" | ||||
|                 @click="clickGM" | ||||
|               > | ||||
|               </b-form-checkbox> | ||||
|             </td> | ||||
|           </tr> | ||||
|           <tr> | ||||
|             <td>(M2) Precision:</td> | ||||
|             <td> | ||||
|               <b-form-checkbox | ||||
|                 id="checkboxPrec" | ||||
|                 v-model="checkedPrec" | ||||
|                 @click="clickPrec" | ||||
|               > | ||||
|               </b-form-checkbox> | ||||
|             </td> | ||||
|             <td>(M2*) ROC AUC:</td> | ||||
|             <td> | ||||
|               <b-form-checkbox | ||||
|                 id="checkboxRA" | ||||
|                 v-model="checkedRA" | ||||
|                 @click="clickRA" | ||||
|               > | ||||
|               </b-form-checkbox> | ||||
|             </td> | ||||
|           </tr> | ||||
|           <tr> | ||||
|             <td>(M3) Recall:</td> | ||||
|             <td> | ||||
|               <b-form-checkbox | ||||
|                 id="checkboxRec" | ||||
|                 v-model="checkedRec" | ||||
|                 @click="clickRec" | ||||
|               > | ||||
|               </b-form-checkbox> | ||||
|             </td> | ||||
|             <td>(M3*) Log loss:</td> | ||||
|             <td> | ||||
|               <b-form-checkbox | ||||
|                 id="checkboxLog" | ||||
|                 v-model="checkedLog" | ||||
|                 @click="clickLog" | ||||
|               > | ||||
|               </b-form-checkbox> | ||||
|             </td> | ||||
|           </tr> | ||||
|           <tr> | ||||
|             <td>(M4) F1-score:</td> | ||||
|             <td> | ||||
|               <b-form-checkbox | ||||
|                 id="checkboxF1" | ||||
|                 v-model="checkedF1" | ||||
|                 @click="clickF1" | ||||
|               > | ||||
|               </b-form-checkbox> | ||||
|             </td> | ||||
|             <td>(M4*) MCC:</td> | ||||
|             <td> | ||||
|               <b-form-checkbox | ||||
|                 id="checkboxMCC" | ||||
|                 v-model="checkedMCC" | ||||
|                 @click="clickMCC" | ||||
|               > | ||||
|               </b-form-checkbox> | ||||
|             </td> | ||||
|           </tr> | ||||
|         </tbody> | ||||
|       </table> | ||||
|     </b-col> | ||||
| </b-row> | ||||
| </div> | ||||
| </template> | ||||
| 
 | ||||
| <script> | ||||
|     import { EventBus } from '../main.js' | ||||
| 
 | ||||
|     export default { | ||||
|         name: 'PerformanceMetrics', | ||||
|         data () { | ||||
|           return { | ||||
|               checkedAcc: true, | ||||
|               checkedPrec: true, | ||||
|               checkedRec: true, | ||||
|               checkedF1: true, | ||||
|               checkedGM: false, | ||||
|               checkedRA: false, | ||||
|               checkedLog: false, | ||||
|               checkedMCC: false, | ||||
|           } | ||||
|         }, | ||||
|         methods: { | ||||
|           clickAcc () { | ||||
|             this.checkedAcc = !this.checkedAcc | ||||
|           }, | ||||
|           clickPrec () { | ||||
|             this.checkedPrec = !this.checkedPrec | ||||
|           }, | ||||
|           clickRec () { | ||||
|             this.checkedRec = !this.checkedRec   | ||||
|           }, | ||||
|           clickF1 () { | ||||
|             this.checkedF1 = !this.checkedF1  | ||||
|           }, | ||||
|           clickGM () { | ||||
|             this.checkedGM = !this.checkedGM | ||||
|           }, | ||||
|           clickRA () { | ||||
|             this.checkedRA = !this.checkedRA | ||||
|           }, | ||||
|           clickLog () { | ||||
|             this.checkedLog = !this.checkedLog | ||||
|           }, | ||||
|           clickMCC () { | ||||
|             this.checkedMCC = !this.checkedMCC | ||||
|           }, | ||||
|         }, | ||||
|         mounted () { | ||||
| 
 | ||||
|         } | ||||
|     } | ||||
| </script> | ||||
| 
 | ||||
| <style> | ||||
| </style> | ||||
| @ -1,454 +0,0 @@ | ||||
| <template> | ||||
|   <div> | ||||
|     <div id="containerAll"></div> | ||||
|     <div id="containerSelection"></div> | ||||
|   </div> | ||||
| </template> | ||||
| 
 | ||||
| <script> | ||||
| import * as d3Base from 'd3' | ||||
| import { EventBus } from '../main.js' | ||||
| import $ from 'jquery' | ||||
| import * as colorbr from 'colorbrewer' | ||||
| 
 | ||||
| // attach all d3 plugins to the d3 library | ||||
| const d3 = Object.assign(d3Base) | ||||
| const colorbrewer = Object.assign(colorbr) | ||||
| 
 | ||||
| export default { | ||||
|   name: "Predictions", | ||||
|   data () { | ||||
|     return { | ||||
|       GetResultsAll: [], | ||||
|       GetResultsSelection: [], | ||||
|       responsiveWidthHeight: [], | ||||
|       predictSelection: [], | ||||
|       StoreIndices: [], | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     reset () { | ||||
|       var svg = d3.select("#containerAll"); | ||||
|       svg.selectAll("*").remove(); | ||||
|       var svg = d3.select("#containerSelection"); | ||||
|       svg.selectAll("*").remove(); | ||||
|     }, | ||||
|     Grid () { | ||||
| 
 | ||||
|       Array.prototype.multiIndexOf = function (el) {  | ||||
|           var idxs = []; | ||||
|           for (var i = this.length - 1; i >= 0; i--) { | ||||
|               if (this[i] === el) { | ||||
|                   idxs.unshift(i); | ||||
|               } | ||||
|           } | ||||
|           return idxs; | ||||
|       }; | ||||
| 
 | ||||
|       var svg = d3.select("#containerAll"); | ||||
|       svg.selectAll("*").remove(); | ||||
| 
 | ||||
|       var yValues = JSON.parse(this.GetResultsAll[6]) | ||||
|       var targetNames = JSON.parse(this.GetResultsAll[7]) | ||||
| 
 | ||||
|       var getIndices = [] | ||||
|       for (let i = 0; i < targetNames.length; i++) { | ||||
|         getIndices.push(yValues.multiIndexOf(targetNames[i])) | ||||
|       } | ||||
|       getIndices.reverse() | ||||
| 
 | ||||
|       var predictions = JSON.parse(this.GetResultsAll[12]) | ||||
|       var KNNPred = predictions[0] | ||||
|       var LRPred = predictions[1] | ||||
|       var PredAver = predictions[2] | ||||
| 
 | ||||
|       var dataAver = [] | ||||
|       var dataAverGetResults = [] | ||||
|       var dataKNN = [] | ||||
|       var dataKNNResults = [] | ||||
|       var dataLR = [] | ||||
|       var dataLRResults = [] | ||||
| 
 | ||||
|       var max = 0 | ||||
|       for (let i = 0; i < targetNames.length; i++) { | ||||
|         if (getIndices[targetNames[i]].length > max) { | ||||
|           max = getIndices[targetNames[i]].length | ||||
|         }  | ||||
|       } | ||||
| 
 | ||||
|       var sqrtSize = Math.ceil(Math.sqrt(max)) | ||||
|       var size = sqrtSize * sqrtSize | ||||
| 
 | ||||
|       for (let i = 0; i < targetNames.length; i++) { | ||||
|         dataAver = []; | ||||
|         dataKNN = [] | ||||
|         dataLR = [] | ||||
|         getIndices[targetNames[i]].forEach(element => { | ||||
|           dataAver.push({ id: element, value: PredAver[element][targetNames[i]] }) | ||||
|           dataKNN.push({ id: element, value: KNNPred[element][targetNames[i]] }) | ||||
|           dataLR.push({ id: element, value: LRPred[element][targetNames[i]] }) | ||||
|         }); | ||||
|         for (let j = 0; j < size - getIndices[targetNames[i]].length; j++) { | ||||
|           dataAver.push({ id: null, value: 1.0 }) | ||||
|           dataKNN.push({ id: null, value: 1.0 }) | ||||
|           dataLR.push({ id: null, value: 1.0 }) | ||||
|         } | ||||
|         dataAverGetResults.push(dataAver) | ||||
|         dataKNNResults.push(dataKNN) | ||||
|         dataLRResults.push(dataLR) | ||||
|       } | ||||
|     dataAverGetResults.reverse() | ||||
|     dataKNNResults.reverse() | ||||
|     dataLRResults.reverse() | ||||
|      | ||||
|     var classArray = [] | ||||
|     this.StoreIndices = [] | ||||
|     for (let i = 0; i < dataAverGetResults.length; i++) { | ||||
|       dataAverGetResults[i].sort((a, b) => (a.value > b.value) ? 1 : -1) | ||||
|       var len = dataAverGetResults[i].length | ||||
|       var indices = new Array(len) | ||||
|       for (let j = 0; j < len; j++) { | ||||
|         indices[j] = dataAverGetResults[i][j].id; | ||||
|       } | ||||
|       this.StoreIndices.push(indices) | ||||
|        | ||||
|       dataKNNResults[i].sort(function(a, b){ | ||||
|         return indices.indexOf(a.id) - indices.indexOf(b.id) | ||||
|       }); | ||||
| 
 | ||||
|       dataLRResults[i].sort(function(a, b){ | ||||
|         return indices.indexOf(a.id) - indices.indexOf(b.id) | ||||
|       }); | ||||
| 
 | ||||
|       classArray.push(dataAverGetResults[i].concat(dataKNNResults[i], dataLRResults[i])); | ||||
|     } | ||||
|      | ||||
|     var classStore = [].concat.apply([], classArray); | ||||
| 
 | ||||
| 		// === Set up canvas === // | ||||
| 
 | ||||
| 		var width = 2500, | ||||
| 				height = 125; | ||||
| 		var colourScale; | ||||
| 
 | ||||
| 
 | ||||
| 		var canvas = d3.select('#containerAll') | ||||
| 			.append('canvas') | ||||
| 			.attr('width', width) | ||||
| 			.attr('height', height); | ||||
| 
 | ||||
| 		var context = canvas.node().getContext('2d'); | ||||
| 
 | ||||
| 		// === Bind data to custom elements === // | ||||
| 
 | ||||
| 		var customBase = document.createElement('custom'); | ||||
| 		var custom = d3.select(customBase); // this is our svg replacement | ||||
| 
 | ||||
|     // settings for a grid with 40 cells in a row and 2x5 cells in a group | ||||
| 		var groupSpacing = 60; | ||||
| 		var cellSpacing = 2; | ||||
|     var cellSize = Math.floor((width - 11 * groupSpacing) / (15.2*sqrtSize)) - cellSpacing; | ||||
| 
 | ||||
| 		// === First call === // | ||||
| 		databind(classStore, size, sqrtSize); // ...then update the databind function | ||||
| 		 | ||||
| 		var t = d3.timer(function(elapsed) { | ||||
| 			draw(); | ||||
| 			if (elapsed > 300) t.stop(); | ||||
| 		}); // start a timer that runs the draw function for 500 ms (this needs to be higher than the transition in the databind function) | ||||
| 
 | ||||
| 
 | ||||
| 		// === Bind and draw functions === // | ||||
| 
 | ||||
| 		function databind(data, size, sqrtSize) { | ||||
| 
 | ||||
|        | ||||
| 			colourScale = d3.scaleSequential(d3.interpolateReds).domain([1, 0]) | ||||
| 
 | ||||
| 			var join = custom.selectAll('custom.rect') | ||||
|         .data(data); | ||||
|          | ||||
| 			var enterSel = join.enter() | ||||
| 				.append('custom') | ||||
| 				.attr('class', 'rect') | ||||
| 	      .attr('x', function(d, i) { | ||||
| 	        var x0 = Math.floor(i / size) % sqrtSize, x1 = Math.floor(i % sqrtSize); | ||||
| 	        return groupSpacing * x0 + (cellSpacing + cellSize) * (x1 + x0 * 10); | ||||
| 	      }) | ||||
| 	      .attr('y', function(d, i) { | ||||
| 	        var y0 = Math.floor(i / data.length), y1 = Math.floor(i % size / sqrtSize); | ||||
| 	        return groupSpacing * y0 + (cellSpacing + cellSize) * (y1 + y0 * 10); | ||||
| 	      }) | ||||
| 				.attr('width', 0) | ||||
| 				.attr('height', 0); | ||||
| 
 | ||||
| 			join | ||||
| 				.merge(enterSel) | ||||
| 				.transition() | ||||
| 				.attr('width', cellSize) | ||||
| 				.attr('height', cellSize) | ||||
|         .attr('fillStyle', function(d) { return colourScale(d.value); }) | ||||
| 
 | ||||
| 			var exitSel = join.exit() | ||||
| 				.transition() | ||||
| 				.attr('width', 0) | ||||
| 				.attr('height', 0) | ||||
| 				.remove(); | ||||
| 
 | ||||
| 		} // databind() | ||||
| 
 | ||||
| 
 | ||||
| 		// === Draw canvas === // | ||||
| 
 | ||||
| 		function draw() { | ||||
| 
 | ||||
| 			// clear canvas | ||||
| 			 | ||||
| 			context.fillStyle = '#fff'; | ||||
| 			context.fillRect(0, 0, width, height); | ||||
| 
 | ||||
| 			 | ||||
| 			// draw each individual custom element with their properties | ||||
| 			 | ||||
| 			var elements = custom.selectAll('custom.rect') // this is the same as the join variable, but used here to draw | ||||
| 			 | ||||
| 			elements.each(function(d,i) { | ||||
| 
 | ||||
| 				// for each virtual/custom element... | ||||
| 
 | ||||
| 				var node = d3.select(this); | ||||
| 				context.fillStyle = node.attr('fillStyle'); | ||||
| 				context.fillRect(node.attr('x'), node.attr('y'), node.attr('width'), node.attr('height')) | ||||
| 
 | ||||
| 			}); | ||||
| 
 | ||||
| 		} // draw() | ||||
| 
 | ||||
|   }, | ||||
|   GridSelection () { | ||||
| 
 | ||||
|       Array.prototype.multiIndexOf = function (el) {  | ||||
|           var idxs = []; | ||||
|           for (var i = this.length - 1; i >= 0; i--) { | ||||
|               if (this[i] === el) { | ||||
|                   idxs.unshift(i); | ||||
|               } | ||||
|           } | ||||
|           return idxs; | ||||
|       }; | ||||
| 
 | ||||
|       var svg = d3.select("#containerSelection"); | ||||
|       svg.selectAll("*").remove(); | ||||
| 
 | ||||
|       var predictionsAll = JSON.parse(this.GetResultsSelection[12]) | ||||
| 
 | ||||
|       if (this.predictSelection.length != 0) { | ||||
|         var predictions = this.predictSelection | ||||
|         var KNNPred = predictions[0] | ||||
|         var LRPred = predictions[1] | ||||
|         var PredAver = predictions[2] | ||||
|       } else { | ||||
|         var KNNPred = predictionsAll[0] | ||||
|         var LRPred = predictionsAll[1] | ||||
|         var PredAver = predictionsAll[2] | ||||
|       } | ||||
|       var KNNPredAll = predictionsAll[0] | ||||
|       var LRPredAll = predictionsAll[1] | ||||
|       var PredAverAll = predictionsAll[2] | ||||
| 
 | ||||
|       var yValues = JSON.parse(this.GetResultsSelection[6]) | ||||
|       var targetNames = JSON.parse(this.GetResultsSelection[7]) | ||||
| 
 | ||||
|       var getIndices = [] | ||||
|       for (let i = 0; i < targetNames.length; i++) { | ||||
|         getIndices.push(yValues.multiIndexOf(targetNames[i])) | ||||
|       } | ||||
|       getIndices.reverse() | ||||
| 
 | ||||
|       var dataAver = [] | ||||
|       var dataAverGetResults = [] | ||||
|       var dataKNN = [] | ||||
|       var dataKNNResults = [] | ||||
|       var dataLR = [] | ||||
|       var dataLRResults = [] | ||||
| 
 | ||||
|       var max = 0 | ||||
|       for (let i = 0; i < targetNames.length; i++) { | ||||
|         if (getIndices[targetNames[i]].length > max) { | ||||
|           max = getIndices[targetNames[i]].length | ||||
|         }  | ||||
|       } | ||||
| 
 | ||||
|       var sqrtSize = Math.ceil(Math.sqrt(max)) | ||||
|       var size = sqrtSize * sqrtSize | ||||
| 
 | ||||
|       for (let i = 0; i < targetNames.length; i++) { | ||||
|         dataAver = []; | ||||
|         dataKNN = [] | ||||
|         dataLR = [] | ||||
|         getIndices[targetNames[i]].forEach(element => { | ||||
|           dataAver.push({ id: element, value: PredAver[element][targetNames[i]] - PredAverAll[element][targetNames[i]] }) | ||||
|           dataKNN.push({ id: element, value: KNNPred[element][targetNames[i]] - KNNPredAll[element][targetNames[i]] }) | ||||
|           dataLR.push({ id: element, value: LRPred[element][targetNames[i]] - LRPredAll[element][targetNames[i]] }) | ||||
|         }); | ||||
|         for (let j = 0; j < size - getIndices[targetNames[i]].length; j++) { | ||||
|           dataAver.push({ id: null, value: 0 }) | ||||
|           dataKNN.push({ id: null, value: 0 }) | ||||
|           dataLR.push({ id: null, value: 0 }) | ||||
|         } | ||||
|         dataAverGetResults.push(dataAver) | ||||
|         dataKNNResults.push(dataKNN) | ||||
|         dataLRResults.push(dataLR) | ||||
|       } | ||||
|     dataAverGetResults.reverse() | ||||
|     dataKNNResults.reverse() | ||||
|     dataLRResults.reverse() | ||||
|      | ||||
|     var classArray = [] | ||||
| 
 | ||||
|     for (let i = 0; i < dataAverGetResults.length; i++) { | ||||
|        | ||||
|       var indices = this.StoreIndices[i] | ||||
|       dataAverGetResults[i].sort(function(a, b){ | ||||
|         return indices.indexOf(a.id) - indices.indexOf(b.id) | ||||
|       }); | ||||
| 
 | ||||
|       dataKNNResults[i].sort(function(a, b){ | ||||
|         return indices.indexOf(a.id) - indices.indexOf(b.id) | ||||
|       }); | ||||
| 
 | ||||
|       dataLRResults[i].sort(function(a, b){ | ||||
|         return indices.indexOf(a.id) - indices.indexOf(b.id) | ||||
|       }); | ||||
| 
 | ||||
|       classArray.push(dataAverGetResults[i].concat(dataKNNResults[i], dataLRResults[i])); | ||||
|     } | ||||
|      | ||||
|     var classStore = [].concat.apply([], classArray); | ||||
| 		// === Set up canvas === // | ||||
| 
 | ||||
| 		var width = 2500, | ||||
| 				height = 125; | ||||
| 		var colourScale; | ||||
| 
 | ||||
| 
 | ||||
| 		var canvas = d3.select('#containerSelection') | ||||
| 			.append('canvas') | ||||
| 			.attr('width', width) | ||||
| 			.attr('height', height); | ||||
| 
 | ||||
| 		var context = canvas.node().getContext('2d'); | ||||
| 
 | ||||
| 		// === Bind data to custom elements === // | ||||
| 
 | ||||
| 		var customBase = document.createElement('custom'); | ||||
| 		var custom = d3.select(customBase); // this is our svg replacement | ||||
| 
 | ||||
|     // settings for a grid with 40 cells in a row and 2x5 cells in a group | ||||
| 		var groupSpacing = 60; | ||||
| 		var cellSpacing = 2; | ||||
|     var cellSize = Math.floor((width - 11 * groupSpacing) / (15.2*sqrtSize)) - cellSpacing; | ||||
| 
 | ||||
| 		// === First call === // | ||||
| 		databind(classStore, size, sqrtSize); // ...then update the databind function | ||||
| 		 | ||||
| 		var t = d3.timer(function(elapsed) { | ||||
| 			draw(); | ||||
| 			if (elapsed > 300) t.stop(); | ||||
| 		}); // start a timer that runs the draw function for 500 ms (this needs to be higher than the transition in the databind function) | ||||
| 
 | ||||
| 
 | ||||
| 		// === Bind and draw functions === // | ||||
| 
 | ||||
| 		function databind(data, size, sqrtSize) { | ||||
| 
 | ||||
|        | ||||
| 			colourScale = d3.scaleSequential(d3.interpolatePRGn).domain([-1, 1]) | ||||
| 
 | ||||
| 			var join = custom.selectAll('custom.rect') | ||||
|         .data(data); | ||||
|          | ||||
| 			var enterSel = join.enter() | ||||
| 				.append('custom') | ||||
| 				.attr('class', 'rect') | ||||
| 	      .attr('x', function(d, i) { | ||||
| 	        var x0 = Math.floor(i / size) % sqrtSize, x1 = Math.floor(i % sqrtSize); | ||||
| 	        return groupSpacing * x0 + (cellSpacing + cellSize) * (x1 + x0 * 10); | ||||
| 	      }) | ||||
| 	      .attr('y', function(d, i) { | ||||
| 	        var y0 = Math.floor(i / data.length), y1 = Math.floor(i % size / sqrtSize); | ||||
| 	        return groupSpacing * y0 + (cellSpacing + cellSize) * (y1 + y0 * 10); | ||||
| 	      }) | ||||
| 				.attr('width', 0) | ||||
| 				.attr('height', 0); | ||||
| 
 | ||||
| 			join | ||||
| 				.merge(enterSel) | ||||
| 				.transition() | ||||
| 				.attr('width', cellSize) | ||||
| 				.attr('height', cellSize) | ||||
|         .attr('fillStyle', function(d) { return colourScale(d.value); }) | ||||
| 
 | ||||
| 			var exitSel = join.exit() | ||||
| 				.transition() | ||||
| 				.attr('width', 0) | ||||
| 				.attr('height', 0) | ||||
| 				.remove(); | ||||
| 
 | ||||
| 		} // databind() | ||||
| 
 | ||||
| 
 | ||||
| 		// === Draw canvas === // | ||||
| 
 | ||||
| 		function draw() { | ||||
| 
 | ||||
| 			// clear canvas | ||||
| 			 | ||||
| 			context.fillStyle = '#fff'; | ||||
| 			context.fillRect(0, 0, width, height); | ||||
| 
 | ||||
| 			 | ||||
| 			// draw each individual custom element with their properties | ||||
| 			 | ||||
| 			var elements = custom.selectAll('custom.rect') // this is the same as the join variable, but used here to draw | ||||
| 			 | ||||
| 			elements.each(function(d,i) { | ||||
| 
 | ||||
| 				// for each virtual/custom element... | ||||
| 
 | ||||
| 				var node = d3.select(this); | ||||
| 				context.fillStyle = node.attr('fillStyle'); | ||||
| 				context.fillRect(node.attr('x'), node.attr('y'), node.attr('width'), node.attr('height')) | ||||
| 
 | ||||
| 			}); | ||||
| 
 | ||||
| 		} // draw() | ||||
| 
 | ||||
|   }, | ||||
|   }, | ||||
|   mounted () { | ||||
|       EventBus.$on('emittedEventCallingGrid', data => { this.GetResultsAll = data; }) | ||||
|       EventBus.$on('emittedEventCallingGrid', this.Grid) | ||||
| 
 | ||||
|       EventBus.$on('emittedEventCallingGridSelection', data => { this.GetResultsSelection = data; }) | ||||
|       EventBus.$on('emittedEventCallingGridSelection', this.GridSelection) | ||||
| 
 | ||||
|       EventBus.$on('SendSelectedPointsToServerEvent', data => { this.predictSelection = data; }) | ||||
|       EventBus.$on('SendSelectedPointsToServerEvent', this.GridSelection) | ||||
| 
 | ||||
|       EventBus.$on('Responsive', data => { | ||||
|       this.responsiveWidthHeight = data}) | ||||
|       EventBus.$on('ResponsiveandChange', data => { | ||||
|       this.responsiveWidthHeight = data}) | ||||
| 
 | ||||
|       // reset the views | ||||
|       EventBus.$on('resetViews', this.reset) | ||||
|     } | ||||
| } | ||||
| </script> | ||||
| 
 | ||||
| <style type="text/css"> | ||||
| 		canvas { | ||||
| 			border:  1px dotted #ccc; | ||||
| 		} | ||||
| </style> | ||||
| @ -1,408 +0,0 @@ | ||||
| <template> | ||||
|   <div id="LinePlot" style="min-height: 363px;"></div> | ||||
| </template> | ||||
| 
 | ||||
| <script> | ||||
| import * as Plotly from 'plotly.js' | ||||
| import { EventBus } from '../main.js' | ||||
| 
 | ||||
| export default { | ||||
|   name: 'VotingResults', | ||||
|   data () { | ||||
|     return { | ||||
|       FinalResultsforLinePlot: 0, | ||||
|       NumberofExecutions: 0, | ||||
|       scoresMean: [], | ||||
|       scoresSTD: [], | ||||
|       scoresPositive: [],  | ||||
|       scoresNegative: [], | ||||
|       scoresMean2: [], | ||||
|       scoresSTD2: [], | ||||
|       scoresPositive2: [],  | ||||
|       scoresNegative2: [], | ||||
|       scoresMean3: [], | ||||
|       scoresSTD3: [], | ||||
|       scoresPositive3: [],  | ||||
|       scoresNegative3: [], | ||||
|       scoresMean4: [], | ||||
|       scoresSTD4: [], | ||||
|       scoresPositive4: [],  | ||||
|       scoresNegative4: [], | ||||
|       Stack_scoresMean: [], | ||||
|       Stack_scoresSTD: [], | ||||
|       Stack_scoresPositive: [],  | ||||
|       Stack_scoresNegative: [], | ||||
|       Stack_scoresMean2: [], | ||||
|       Stack_scoresSTD2: [], | ||||
|       Stack_scoresPositive2: [],  | ||||
|       Stack_scoresNegative2: [], | ||||
|       Stack_scoresMean3: [], | ||||
|       Stack_scoresSTD3: [], | ||||
|       Stack_scoresPositive3: [],  | ||||
|       Stack_scoresNegative3: [], | ||||
|       Stack_scoresMean4: [], | ||||
|       Stack_scoresSTD4: [], | ||||
|       Stack_scoresPositive4: [],  | ||||
|       Stack_scoresNegative4: [], | ||||
|       xaxis: [], | ||||
|       WH: [], | ||||
|       firstTime: 0 | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     reset () { | ||||
|       Plotly.purge('LinePlot') | ||||
|     }, | ||||
|     LinePlotView () { | ||||
|       this.NumberofExecutions ++  | ||||
|       this.xaxis.push(this.NumberofExecutions) | ||||
| 
 | ||||
|       // Under Exploration = Current | ||||
|       this.scoresMean.push((JSON.parse(this.FinalResultsforLinePlot[0])*100).toFixed(2)) | ||||
|       this.scoresSTD.push((JSON.parse(this.FinalResultsforLinePlot[1])*100).toFixed(2)) | ||||
| 
 | ||||
|       this.scoresPositive.push(parseFloat(this.scoresMean[this.scoresMean.length - 1]) + parseFloat(this.scoresSTD[this.scoresSTD.length - 1])) | ||||
|       this.scoresNegative.push(parseFloat(this.scoresMean[this.scoresMean.length - 1]) - parseFloat(this.scoresSTD[this.scoresSTD.length - 1])) | ||||
| 
 | ||||
|       this.scoresMean2.push((JSON.parse(this.FinalResultsforLinePlot[4])*100).toFixed(2)) | ||||
|       this.scoresSTD2.push((JSON.parse(this.FinalResultsforLinePlot[5])*100).toFixed(2)) | ||||
| 
 | ||||
|       this.scoresPositive2.push(parseFloat(this.scoresMean2[this.scoresMean2.length - 1]) + parseFloat(this.scoresSTD2[this.scoresSTD2.length - 1])) | ||||
|       this.scoresNegative2.push(parseFloat(this.scoresMean2[this.scoresMean2.length - 1]) - parseFloat(this.scoresSTD2[this.scoresSTD2.length - 1])) | ||||
| 
 | ||||
|       this.scoresMean3.push((JSON.parse(this.FinalResultsforLinePlot[8])*100).toFixed(2)) | ||||
|       this.scoresSTD3.push((JSON.parse(this.FinalResultsforLinePlot[9])*100).toFixed(2)) | ||||
| 
 | ||||
|       this.scoresPositive3.push(parseFloat(this.scoresMean3[this.scoresMean3.length - 1]) + parseFloat(this.scoresSTD3[this.scoresSTD3.length - 1])) | ||||
|       this.scoresNegative3.push(parseFloat(this.scoresMean3[this.scoresMean3.length - 1]) - parseFloat(this.scoresSTD3[this.scoresSTD3.length - 1])) | ||||
| 
 | ||||
|       this.scoresMean4.push((JSON.parse(this.FinalResultsforLinePlot[12])*100).toFixed(2)) | ||||
|       this.scoresSTD4.push((JSON.parse(this.FinalResultsforLinePlot[13])*100).toFixed(2)) | ||||
| 
 | ||||
|       this.scoresPositive4.push(parseFloat(this.scoresMean4[this.scoresMean4.length - 1]) + parseFloat(this.scoresSTD4[this.scoresSTD4.length - 1])) | ||||
|       this.scoresNegative4.push(parseFloat(this.scoresMean4[this.scoresMean4.length - 1]) - parseFloat(this.scoresSTD4[this.scoresSTD4.length - 1])) | ||||
| 
 | ||||
|       // Stack | ||||
| 
 | ||||
|       this.Stack_scoresMean.push((JSON.parse(this.FinalResultsforLinePlot[2])*100).toFixed(2)) | ||||
|       this.Stack_scoresSTD.push((JSON.parse(this.FinalResultsforLinePlot[3])*100).toFixed(2)) | ||||
| 
 | ||||
|       this.Stack_scoresPositive.push(parseFloat(this.Stack_scoresMean[this.Stack_scoresMean.length - 1]) + parseFloat(this.Stack_scoresSTD[this.Stack_scoresSTD.length - 1])) | ||||
|       this.Stack_scoresNegative.push(parseFloat(this.Stack_scoresMean[this.Stack_scoresMean.length - 1]) - parseFloat(this.Stack_scoresSTD[this.Stack_scoresSTD.length - 1])) | ||||
| 
 | ||||
|       this.Stack_scoresMean2.push((JSON.parse(this.FinalResultsforLinePlot[6])*100).toFixed(2)) | ||||
|       this.Stack_scoresSTD2.push((JSON.parse(this.FinalResultsforLinePlot[7])*100).toFixed(2)) | ||||
| 
 | ||||
|       this.Stack_scoresPositive2.push(parseFloat(this.Stack_scoresMean2[this.Stack_scoresMean2.length - 1]) + parseFloat(this.Stack_scoresSTD2[this.Stack_scoresSTD2.length - 1])) | ||||
|       this.Stack_scoresNegative2.push(parseFloat(this.Stack_scoresMean2[this.Stack_scoresMean2.length - 1]) - parseFloat(this.Stack_scoresSTD2[this.Stack_scoresSTD2.length - 1])) | ||||
| 
 | ||||
| 
 | ||||
|       this.Stack_scoresMean3.push((JSON.parse(this.FinalResultsforLinePlot[10])*100).toFixed(2)) | ||||
|       this.Stack_scoresSTD3.push((JSON.parse(this.FinalResultsforLinePlot[11])*100).toFixed(2)) | ||||
| 
 | ||||
|       this.Stack_scoresPositive3.push(parseFloat(this.Stack_scoresMean3[this.Stack_scoresMean3.length - 1]) + parseFloat(this.Stack_scoresSTD3[this.Stack_scoresSTD3.length - 1])) | ||||
|       this.Stack_scoresNegative3.push(parseFloat(this.Stack_scoresMean3[this.Stack_scoresMean3.length - 1]) - parseFloat(this.Stack_scoresSTD3[this.Stack_scoresSTD3.length - 1])) | ||||
| 
 | ||||
|       this.Stack_scoresMean4.push((JSON.parse(this.FinalResultsforLinePlot[14])*100).toFixed(2)) | ||||
|       this.Stack_scoresSTD4.push((JSON.parse(this.FinalResultsforLinePlot[15])*100).toFixed(2)) | ||||
| 
 | ||||
|       this.Stack_scoresPositive4.push(parseFloat(this.Stack_scoresMean4[this.Stack_scoresMean4.length - 1]) + parseFloat(this.Stack_scoresSTD4[this.Stack_scoresSTD4.length - 1])) | ||||
|       this.Stack_scoresNegative4.push(parseFloat(this.Stack_scoresMean4[this.Stack_scoresMean4.length - 1]) - parseFloat(this.Stack_scoresSTD4[this.Stack_scoresSTD4.length - 1])) | ||||
|        | ||||
|       var xaxisReversed = [] | ||||
|       xaxisReversed = this.xaxis.slice().reverse() | ||||
|       xaxisReversed = this.xaxis.concat(xaxisReversed) | ||||
| 
 | ||||
|       // fill in 'text' array for hover | ||||
|       var text = this.scoresSTD.map (function(value, i) { | ||||
|           return `STD: +/-${value}` | ||||
|         }) | ||||
| 
 | ||||
|       // Current | ||||
| 
 | ||||
|       var trace1 = { | ||||
|         x: this.xaxis,  | ||||
|         y: this.scoresMean,  | ||||
|         text: text, | ||||
|         line: {color: "rgb(55,126,184)"},  | ||||
|         mode: "lines+markers",  | ||||
|         marker : { | ||||
|           symbol: 'circle' }, | ||||
|         name: "Active Accuracy", | ||||
|         type: "scatter" | ||||
|       } | ||||
| 
 | ||||
|       var trace2 = { | ||||
|         x: xaxisReversed,  | ||||
|         y: this.scoresPositive.concat(this.scoresNegative),  | ||||
|         text: '', | ||||
|         hoverinfo: 'text', | ||||
|         fill: "tozerox",  | ||||
|         fillcolor: "rgba(55,126,184,0)",  | ||||
|         line: {color: "transparent"},  | ||||
|         name: "Active Accuracy",  | ||||
|         showlegend: false,  | ||||
|         type: "scatter" | ||||
|       } | ||||
| 
 | ||||
|       var text = this.scoresSTD2.map (function(value, i) { | ||||
|           return `STD: +/-${value}` | ||||
|       }) | ||||
| 
 | ||||
|       var trace3 = { | ||||
|         x: this.xaxis,  | ||||
|         y: this.scoresMean2,  | ||||
|         text: text, | ||||
|         line: {color: "rgb(55,126,184)"},  | ||||
|         mode: "lines+markers",  | ||||
|         marker : { | ||||
|             symbol: 'square' }, | ||||
|         name: "Active Precision",  | ||||
|         type: "scatter" | ||||
|       } | ||||
| 
 | ||||
|       var trace4 = { | ||||
|         x: xaxisReversed,  | ||||
|         y: this.scoresPositive2.concat(this.scoresNegative2),  | ||||
|         text: '', | ||||
|         hoverinfo: 'text', | ||||
|         fill: "tozerox",  | ||||
|         fillcolor: "rgba(55,126,184,0)",  | ||||
|         line: {color: "transparent"},  | ||||
|         name: "Active Precision",  | ||||
|         showlegend: false,  | ||||
|         type: "scatter" | ||||
|       } | ||||
|       var text = this.scoresSTD3.map (function(value, i) { | ||||
|           return `STD: +/-${value}` | ||||
|       }) | ||||
|       var trace5 = { | ||||
|         x: this.xaxis,  | ||||
|         y: this.scoresMean3,  | ||||
|         text: text, | ||||
|         line: {color: "rgb(55,126,184)"},  | ||||
|         mode: "lines+markers",  | ||||
|         marker : { | ||||
|             symbol: 'triangle-up' }, | ||||
|         name: "Active Recall",  | ||||
|         type: "scatter" | ||||
|       } | ||||
| 
 | ||||
|       var trace6 = { | ||||
|         x: xaxisReversed,  | ||||
|         y: this.scoresPositive3.concat(this.scoresNegative3),  | ||||
|         text: '', | ||||
|         hoverinfo: 'text', | ||||
|         fill: "tozerox",  | ||||
|         fillcolor: "rgba(55,126,184,0)",  | ||||
|         line: {color: "transparent"},  | ||||
|         name: "Active Recall",  | ||||
|         showlegend: false,  | ||||
|         type: "scatter" | ||||
|       } | ||||
|       var text = this.scoresSTD4.map (function(value, i) { | ||||
|           return `STD: +/-${value}` | ||||
|       }) | ||||
|       var trace7 = { | ||||
|         x: this.xaxis,  | ||||
|         y: this.scoresMean4,  | ||||
|         text: text, | ||||
|         line: {color: "rgb(55,126,184)"},  | ||||
|         mode: "lines+markers",  | ||||
|         marker : { | ||||
|             symbol: 'diamond' }, | ||||
|         name: "Active F1 Score",  | ||||
|         type: "scatter" | ||||
|       } | ||||
| 
 | ||||
|       var trace8 = { | ||||
|         x: xaxisReversed,  | ||||
|         y: this.scoresPositive4.concat(this.scoresNegative4),  | ||||
|         text: '', | ||||
|         hoverinfo: 'text', | ||||
|         fill: "tozerox",  | ||||
|         fillcolor: "rgba(55,126,184,0)",  | ||||
|         line: {color: "transparent"},  | ||||
|         name: "Active F1 Score",  | ||||
|         showlegend: false,  | ||||
|         type: "scatter" | ||||
|       } | ||||
| 
 | ||||
|       // Stack | ||||
|       var text = this.Stack_scoresSTD.map (function(value, i) { | ||||
|           return `STD: +/-${value}` | ||||
|       }) | ||||
|         var trace9 = { | ||||
|         x: this.xaxis,  | ||||
|         y: this.Stack_scoresMean,  | ||||
|         text: text, | ||||
|         line: {color: "rgb(228,26,28)"},  | ||||
|         mode: "lines+markers",  | ||||
|         marker : { | ||||
|           symbol: 'x' }, | ||||
|         name: "Stack Accuracy",  | ||||
|         type: "scatter" | ||||
|       } | ||||
| 
 | ||||
|       var trace10 = { | ||||
|         x: xaxisReversed,  | ||||
|         y: this.Stack_scoresPositive.concat(this.Stack_scoresNegative),  | ||||
|         text: '', | ||||
|         hoverinfo: 'text', | ||||
|         fill: "tozerox",  | ||||
|         fillcolor: "rgba(228,26,28,0)",  | ||||
|         line: {color: "transparent"},  | ||||
|         name: "Stack Accuracy",  | ||||
|         showlegend: false,  | ||||
|         type: "scatter" | ||||
|       } | ||||
|       var text = this.Stack_scoresSTD2.map (function(value, i) { | ||||
|           return `STD: +/-${value}` | ||||
|       }) | ||||
|       var trace11 = { | ||||
|         x: this.xaxis,  | ||||
|         y: this.Stack_scoresMean2,  | ||||
|         text: text, | ||||
|         line: {color: "rgb(228,26,28)"},  | ||||
|         mode: "lines+markers",  | ||||
|         marker : { | ||||
|           symbol: 'cross' }, | ||||
|         name: "Stack Precision",  | ||||
|         type: "scatter" | ||||
|       } | ||||
| 
 | ||||
|       var trace12 = { | ||||
|         x: xaxisReversed,  | ||||
|         y: this.Stack_scoresPositive2.concat(this.Stack_scoresNegative2),  | ||||
|         text: '', | ||||
|         hoverinfo: 'text', | ||||
|         fill: "tozerox",  | ||||
|         fillcolor: "rgba(228,26,28,0)",  | ||||
|         line: {color: "transparent"},  | ||||
|         name: "Stack Precision",  | ||||
|         showlegend: false,  | ||||
|         type: "scatter" | ||||
|       } | ||||
|       var text = this.Stack_scoresSTD3.map (function(value, i) { | ||||
|           return `STD: +/-${value}` | ||||
|       }) | ||||
|       var trace13 = { | ||||
|         x: this.xaxis,  | ||||
|         y: this.Stack_scoresMean3,  | ||||
|         text: text, | ||||
|         line: {color: "rgb(228,26,28)"},  | ||||
|         mode: "lines+markers", | ||||
|         marker : { | ||||
|           symbol: 'triangle-down' }, | ||||
|         name: "Stack Recall",  | ||||
|         type: "scatter" | ||||
|       } | ||||
| 
 | ||||
|       var trace14 = { | ||||
|         x: xaxisReversed,  | ||||
|         y: this.Stack_scoresPositive3.concat(this.Stack_scoresNegative3),  | ||||
|         text: '', | ||||
|         hoverinfo: 'text', | ||||
|         fill: "tozerox",  | ||||
|         fillcolor: "rgba(228,26,28,0)",  | ||||
|         line: {color: "transparent"},  | ||||
|         name: "Stack Recall",  | ||||
|         showlegend: false,  | ||||
|         type: "scatter" | ||||
|       } | ||||
|       var text = this.Stack_scoresSTD4.map (function(value, i) { | ||||
|           return `STD: +/-${value}` | ||||
|       }) | ||||
|       var trace15 = { | ||||
|         x: this.xaxis,  | ||||
|         y: this.Stack_scoresMean4,  | ||||
|         text: text, | ||||
|         line: {color: "rgb(228,26,28)"},  | ||||
|         mode: "lines+markers", | ||||
|         marker : { | ||||
|           symbol: 'hexagram' }, | ||||
|         name: "Stack F1 Score",  | ||||
|         type: "scatter" | ||||
|       } | ||||
| 
 | ||||
|       var trace16 = { | ||||
|         x: xaxisReversed,  | ||||
|         y: this.Stack_scoresPositive4.concat(this.Stack_scoresNegative4),  | ||||
|         text: '', | ||||
|         hoverinfo: 'text', | ||||
|         fill: "tozerox",  | ||||
|         fillcolor: "rgba(228,26,28,0)",  | ||||
|         line: {color: "transparent"},  | ||||
|         name: "Stack F1 Score",  | ||||
|         showlegend: false,  | ||||
|         type: "scatter" | ||||
|       } | ||||
| 
 | ||||
|       const DataforLinePlot = [trace1, trace2, trace3, trace4, trace5, trace6, trace7, trace8, trace9, trace10, trace11, trace12, trace13, trace14, trace15, trace16] | ||||
| 
 | ||||
|       var width = this.WH[0]*3.18 // interactive visualization | ||||
|       var height = this.WH[1]*0.765 // interactive visualization | ||||
| 
 | ||||
|       var layout = { | ||||
|         font: { family: 'Helvetica', size: 14, color: '#000000' }, | ||||
|         paper_bgcolor: "rgb(255,255,255)",  | ||||
|         plot_bgcolor: "rgb(229,229,229)",  | ||||
|         xaxis: { | ||||
|             gridcolor: "rgb(255,255,255)", | ||||
|             title: 'Step of the Execution', | ||||
|             tickformat: '.0f', | ||||
|             range: [0, this.scoresMean.length + 2],  | ||||
|             showgrid: true,  | ||||
|             showline: false,  | ||||
|             showticklabels: true,  | ||||
|             tickcolor: "rgb(127,127,127)",  | ||||
|             ticks: "outside",  | ||||
|             zeroline: false | ||||
|         },  | ||||
|         yaxis: { | ||||
|             gridcolor: "rgb(255,255,255)",  | ||||
|             title: '# Performance (%) #', | ||||
|             showgrid: true,  | ||||
|             showline: false,  | ||||
|             showticklabels: true,  | ||||
|             tickcolor: "rgb(127,127,127)",  | ||||
|             ticks: "outside",  | ||||
|             zeroline: false | ||||
|         }, | ||||
|         autosize: false, | ||||
|         width: width, | ||||
|         height: height, | ||||
|         margin: { | ||||
|           l: 50, | ||||
|           r: 0, | ||||
|           b: 50, | ||||
|           t: 5, | ||||
|           pad: 0 | ||||
|         }, | ||||
|       } | ||||
|       var config = {displayModeBar: false, scrollZoom: true, displaylogo: false, showLink: false, showSendToCloud: false, modeBarButtonsToRemove: ['toImage'], responsive: true} | ||||
|       Plotly.newPlot('LinePlot', DataforLinePlot, layout, config) | ||||
| 
 | ||||
|       if (this.firstTime == 0) { | ||||
|         EventBus.$emit('emittedEventCallingReally') | ||||
|         this.firstTime = 1 | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   mounted() { | ||||
|     EventBus.$on('updateFlagForFinalResults', data => { this.firstTime = data}) | ||||
| 
 | ||||
|     EventBus.$on('emittedEventCallingLinePlot', data => { | ||||
|       this.FinalResultsforLinePlot = data}) | ||||
|     EventBus.$on('emittedEventCallingLinePlot', this.LinePlotView) | ||||
| 
 | ||||
|     EventBus.$on('Responsive', data => { | ||||
|     this.WH = data}) | ||||
|     EventBus.$on('ResponsiveandChange', data => { | ||||
|     this.WH = data}) | ||||
| 
 | ||||
|     // reset the views | ||||
|     EventBus.$on('resetViews', this.reset) | ||||
|   } | ||||
| } | ||||
| </script> | ||||
					Loading…
					
					
				
		Reference in new issue