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