separeted the two spaces

master
parent 272ef37dfe
commit 3c669717e2
  1. BIN
      __pycache__/run.cpython-37.pyc
  2. BIN
      cachedir/joblib/run/randomSearch/15c1a1c6505bfd383b2231a984466199/output.pkl
  3. 1
      cachedir/joblib/run/randomSearch/9d85ea1f37edb91533a828737a6caa01/metadata.json
  4. BIN
      cachedir/joblib/run/randomSearch/b05bc4dd718bb370a35dbc60bdff86aa/output.pkl
  5. 1
      cachedir/joblib/run/randomSearch/eb45ad56de8e367dade6cb77617a3d36/metadata.json
  6. 24
      frontend/src/components/Ensemble.vue
  7. 8
      frontend/src/components/HyperParameterSpace.vue
  8. 80
      frontend/src/components/Main.vue
  9. 8
      frontend/src/components/Predictions.vue
  10. 455
      frontend/src/components/PredictionsCM.vue
  11. 4
      frontend/src/main.js
  12. 62
      run.py

Binary file not shown.

@ -0,0 +1 @@
{"duration": 12.543240070343018, "input_args": {"XData": " sepal_l sepal_w petal_l petal_w\n0 6.3 3.3 6.0 2.5\n1 7.1 3.0 5.9 2.1\n2 5.8 2.7 5.1 1.9\n3 6.3 2.9 5.6 1.8\n4 7.6 3.0 6.6 2.1\n.. ... ... ... ...\n145 5.1 3.8 1.6 0.2\n146 5.0 3.5 1.6 0.6\n147 5.1 3.4 1.5 0.2\n148 4.6 3.2 1.4 0.2\n149 4.8 3.0 1.4 0.3\n\n[150 rows x 4 columns]", "yData": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]", "clf": "KNeighborsClassifier(algorithm='ball_tree', leaf_size=30, metric='minkowski',\n metric_params=None, n_jobs=None, n_neighbors=82, p=2,\n weights='uniform')", "params": "{'n_neighbors': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99], 'metric': ['chebyshev', 'manhattan', 'euclidean', 'minkowski'], 'algorithm': ['brute', 'kd_tree', 'ball_tree'], 'weights': ['uniform', 'distance']}", "eachAlgor": "'KNN'", "AlgorithmsIDsEnd": "0"}}

@ -0,0 +1 @@
{"duration": 19.771310806274414, "input_args": {"XData": " sepal_l sepal_w petal_l petal_w\n0 6.3 3.3 6.0 2.5\n1 7.1 3.0 5.9 2.1\n2 5.8 2.7 5.1 1.9\n3 6.3 2.9 5.6 1.8\n4 7.6 3.0 6.6 2.1\n.. ... ... ... ...\n145 5.1 3.8 1.6 0.2\n146 5.0 3.5 1.6 0.6\n147 5.1 3.4 1.5 0.2\n148 4.6 3.2 1.4 0.2\n149 4.8 3.0 1.4 0.3\n\n[150 rows x 4 columns]", "yData": "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]", "clf": "LogisticRegression(C=64, class_weight=None, dual=False, fit_intercept=True,\n intercept_scaling=1, l1_ratio=None, max_iter=300,\n multi_class='auto', n_jobs=None, penalty='none',\n random_state=42, solver='newton-cg', tol=0.0001, verbose=0,\n warm_start=False)", "params": "{'C': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99], 'max_iter': [50, 100, 150, 200, 250, 300, 350, 400, 450], 'solver': ['lbfgs', 'newton-cg', 'sag', 'saga'], 'penalty': ['l2', 'none']}", "eachAlgor": "'LR'", "AlgorithmsIDsEnd": "100"}}

@ -10,7 +10,7 @@
Action: <button
id="Remove"
v-on:click="Remove">
<font-awesome-icon icon="dna" />
<font-awesome-icon icon="eraser" />
{{ CrossoverMutateText }}
</button>
</div>
@ -28,13 +28,14 @@ import { EventBus } from '../main.js'
const d3 = Object.assign(d3Base)
export default {
name: 'CrossoverMutationSpace',
name: 'Ensemble',
data () {
return {
CrossoverMutateText: 'Unselected points\' crossover & mutation',
CrossoverMutateText: 'Remove unselected points from ensemble',
WH: [],
ScatterPlotResults: '',
representationDef: 'mdsCM',
storeEnsembleLoc: [],
}
},
methods: {
@ -66,6 +67,21 @@ export default {
var TSNEData = JSON.parse(this.ScatterPlotResults[10])
var UMAPData = JSON.parse(this.ScatterPlotResults[11])
var mergedStoreEnsembleLoc = [].concat.apply([], this.storeEnsembleLoc)
var mergedStoreEnsembleLocFormatted = []
for (let i = 0; i < mergedStoreEnsembleLoc.length; i++) {
mergedStoreEnsembleLocFormatted.push(parseInt(mergedStoreEnsembleLoc[i].replace(/\D/g,'')))
}
modelId = mergedStoreEnsembleLocFormatted.map((item) => modelId[item])
colorsforScatterPlot = mergedStoreEnsembleLocFormatted.map((item) => colorsforScatterPlot[item])
parameters = mergedStoreEnsembleLocFormatted.map((item) => parameters[item])
MDSData[0] = mergedStoreEnsembleLocFormatted.map((item) => MDSData[0][item])
MDSData[1] = mergedStoreEnsembleLocFormatted.map((item) => MDSData[1][item])
TSNEData = mergedStoreEnsembleLocFormatted.map((item) => TSNEData[item])
UMAPData[0] = mergedStoreEnsembleLocFormatted.map((item) => UMAPData[0][item])
UMAPData[1] = mergedStoreEnsembleLocFormatted.map((item) => UMAPData[1][item])
EventBus.$emit('sendPointsNumberCM', modelId.length)
var stringParameters = []
@ -295,6 +311,8 @@ export default {
},
},
mounted() {
EventBus.$on('SendStoredEnsemble', data => { this.storeEnsembleLoc = data })
EventBus.$on('emittedEventCallingCrossoverMutation', data => {
this.ScatterPlotResults = data})
EventBus.$on('emittedEventCallingCrossoverMutation', this.ScatterPlotView)

@ -31,7 +31,7 @@ export default {
name: 'HyperParameterSpace',
data () {
return {
CrossoverMutateText: 'Unselected points\' crossover & mutation',
CrossoverMutateText: 'Crossover and mutate unselected points',
WH: [],
ScatterPlotResults: '',
representationDef: 'mds',
@ -287,9 +287,9 @@ export default {
pushModelsRemainingTemp.push(allModels[i])
}
}
EventBus.$emit('RemainingPoints', pushModelsRemainingTemp)
EventBus.$emit('SendSelectedPointsUpdateIndicator', ClassifierIDsList)
EventBus.$emit('SendSelectedPointsToServerEvent', ClassifierIDsList)
EventBus.$emit('RemainingPoints', pushModelsRemainingTemp)
EventBus.$emit('SendSelectedPointsUpdateIndicator', ClassifierIDsList)
EventBus.$emit('SendSelectedPointsToServerEvent', ClassifierIDsList)
}
})
},

@ -26,7 +26,7 @@
</b-col>
<b-col cols="3">
<mdb-card >
<mdb-card-header color="primary-color" tag="h5" class="text-center">Majority Voting Results</mdb-card-header>
<mdb-card-header color="primary-color" tag="h5" class="text-center">Majority-Voting Results</mdb-card-header>
<mdb-card-body>
<mdb-card-text class="text-left" style="font-size: 18.5px; min-height: 230px">
</mdb-card-text>
@ -118,33 +118,33 @@
<b-row class="md-3">
<b-col cols="6">
<mdb-card style="margin-top: 15px;">
<mdb-card-header color="primary-color" tag="h5" class="text-center">Hyper-parameters' Space
<mdb-card-header color="primary-color" tag="h5" class="text-center">Hyper-Parameters' Space
[Sel: {{OverSelLength}} / All: {{OverAllLength}}]<small class="float-right"><active-scatter/></small>
</mdb-card-header>
<mdb-card-body>
<mdb-card-text class="text-center" style="min-height: 600px">
<HyperParameterSpace/>
</mdb-card-text>
</mdb-card-body>
</mdb-card>
</b-col>
<b-col cols="6">
<mdb-card style="margin-top: 15px;">
<mdb-card-header color="primary-color" tag="h5" class="text-center">Crossover and Mutation
[Sel: {{OverSelLengthCM}} / All: {{OverAllLengthCM}}]<small class="float-right"><active-scatter/></small>
</mdb-card-header>
<mdb-card-body>
<mdb-card-text class="text-center" style="min-height: 600px">
<CrossoverMutationSpace/>
<HyperParameterSpace/>
</mdb-card-text>
</mdb-card-body>
</mdb-card>
</b-col>
<b-col cols="6">
<mdb-card style="margin-top: 15px;">
<mdb-card-header color="primary-color" tag="h5" class="text-center">Majority-Voting Ensemble
[Sel: {{OverSelLengthCM}} / All: {{OverAllLengthCM}}]<small class="float-right"><active-scatter/></small>
</mdb-card-header>
<mdb-card-body>
<mdb-card-text class="text-center" style="min-height: 600px">
<Ensemble/>
</mdb-card-text>
</mdb-card-body>
</mdb-card>
</b-col>
</b-row>
<b-row class="md-3">
<b-col cols="12">
<b-col cols="6">
<mdb-card style="margin-top: 15px;">
<mdb-card-header color="primary-color" tag="h5" class="text-center">Predictions' Space
<mdb-card-header color="primary-color" tag="h5" class="text-center">Hyper-Parameters Predictions
</mdb-card-header>
<mdb-card-body>
<mdb-card-text class="text-center" style="min-height: 270px">
@ -153,9 +153,18 @@
</mdb-card-body>
</mdb-card>
</b-col>
<b-col cols="6">
<mdb-card style="margin-top: 15px;">
<mdb-card-header color="primary-color" tag="h5" class="text-center">Majority-Voting Ensemble Predictions
</mdb-card-header>
<mdb-card-body>
<mdb-card-text class="text-center" style="min-height: 270px">
<PredictionsCM/>
</mdb-card-text>
</mdb-card-body>
</mdb-card>
</b-col>
</b-row>
</div>
</div>
</b-container>
</body>
</template>
@ -168,10 +177,11 @@ import PerformanceMetrics from './PerformanceMetrics.vue'
import Algorithms from './Algorithms.vue'
import AlgorithmHyperParam from './AlgorithmHyperParam.vue'
import HyperParameterSpace from './HyperParameterSpace.vue'
import CrossoverMutationSpace from './CrossoverMutationSpace.vue'
import Ensemble from './Ensemble.vue'
import VotingResults from './VotingResults.vue'
import Parameters from './Parameters.vue'
import Predictions from './Predictions.vue'
import PredictionsCM from './PredictionsCM.vue'
import axios from 'axios'
import { loadProgressBar } from 'axios-progress-bar'
import 'axios-progress-bar/dist/nprogress.css'
@ -194,9 +204,10 @@ export default Vue.extend({
Algorithms,
AlgorithmHyperParam,
HyperParameterSpace,
CrossoverMutationSpace,
Ensemble,
Parameters,
Predictions,
PredictionsCM,
VotingResults,
mdbCard,
mdbCardBody,
@ -205,6 +216,8 @@ export default Vue.extend({
},
data () {
return {
storeEnsemble: [],
firstTimeExec: true,
unselectedRemainingPoints: [],
Collection: 0,
OverviewResults: 0,
@ -302,10 +315,17 @@ export default Vue.extend({
.then(response => {
this.OverviewResults = response.data.OverviewResults
console.log('Server successfully sent all the data related to visualizations!')
EventBus.$emit('emittedEventCallingScatterPlot', this.OverviewResults)
EventBus.$emit('emittedEventCallingGrid', this.OverviewResults)
EventBus.$emit('emittedEventCallingGridSelection', this.OverviewResults)
//this.getFinalResults()
if (this.firstTimeExec) {
EventBus.$emit('emittedEventCallingScatterPlot', this.OverviewResults)
EventBus.$emit('emittedEventCallingGrid', this.OverviewResults)
EventBus.$emit('emittedEventCallingGridSelection', this.OverviewResults)
this.firstTimeExec = false
} else {
EventBus.$emit('emittedEventCallingCrossoverMutation', this.OverviewResults)
EventBus.$emit('emittedEventCallingGridCrossoverMutation', this.OverviewResults)
EventBus.$emit('emittedEventCallingGridSelectionGridCrossoverMutation', this.OverviewResults)
//this.getFinalResults()
}
})
.catch(error => {
console.log(error)
@ -326,7 +346,9 @@ export default Vue.extend({
.then(response => {
this.OverviewResultsCM = response.data.OverviewResultsCM
console.log('Server successfully sent all the data related to visualizations!')
EventBus.$emit('emittedEventCallingCrossoverMutation', this.OverviewResultsCM)
EventBus.$emit('emittedEventCallingScatterPlot', this.OverviewResultsCM)
EventBus.$emit('emittedEventCallingGrid', this.OverviewResultsCM)
EventBus.$emit('emittedEventCallingGridSelection', this.OverviewResultsCM)
//this.getFinalResults()
})
.catch(error => {
@ -795,7 +817,9 @@ export default Vue.extend({
},
sendPointsCrossMutat () {
const path = `http://127.0.0.1:5000/data/CrossoverMutation`
EventBus.$emit('SendStoredEnsemble', this.storeEnsemble)
const postData = {
RemainingPoints: this.unselectedRemainingPoints
}
@ -863,7 +887,7 @@ export default Vue.extend({
EventBus.$on('InitializeCrossoverMutation', this.sendPointsCrossMutat)
EventBus.$on('ChangeKey', data => { this.keyNow = data })
EventBus.$on('SendSelectedPointsUpdateIndicator', data => { this.ClassifierIDsList = data })
EventBus.$on('SendSelectedPointsUpdateIndicator', data => { this.ClassifierIDsList = data; this.storeEnsemble.push(this.ClassifierIDsList)})
EventBus.$on('SendSelectedPointsUpdateIndicator', this.SelectedPoints)
EventBus.$on('sendToServerSelectedScatter', this.SendSelectedPointsToServer)

@ -127,7 +127,7 @@ export default {
// === Set up canvas === //
var width = 2500,
var width = 1200,
height = 125;
var colourScale;
@ -147,7 +147,7 @@ export default {
// 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;
var cellSize = Math.floor((width - 1 * groupSpacing) / (10 * sqrtSize)) - cellSpacing;
// === First call === //
databind(classStore, size, sqrtSize); // ...then update the databind function
@ -327,7 +327,7 @@ export default {
var classStore = [].concat.apply([], classArray);
// === Set up canvas === //
var width = 2500,
var width = 1200,
height = 125;
var colourScale;
@ -347,7 +347,7 @@ export default {
// 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;
var cellSize = Math.floor((width - 1 * groupSpacing) / (10 * sqrtSize)) - cellSpacing;
// === First call === //
databind(classStore, size, sqrtSize); // ...then update the databind function

@ -0,0 +1,455 @@
<template>
<div>
<div id="containerAllCM"></div>
<div id="containerSelectionCM"></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: "PredictionsCM",
data () {
return {
GetResultsAll: [],
GetResultsSelectionCM: [],
responsiveWidthHeight: [],
predictSelectionCM: [],
StoreIndices: [],
}
},
methods: {
reset () {
var svg = d3.select("#containerAllCM");
svg.selectAll("*").remove();
var svg = d3.select("#containerSelectionCM");
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("#containerAllCM");
svg.selectAll("*").remove();
var yValues = JSON.parse(this.GetResultsAllCM[6])
var targetNames = JSON.parse(this.GetResultsAllCM[7])
var getIndices = []
for (let i = 0; i < targetNames.length; i++) {
getIndices.push(yValues.multiIndexOf(targetNames[i]))
}
getIndices.reverse()
var predictions = JSON.parse(this.GetResultsAllCM[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 = 1200,
height = 125;
var colourScale;
var canvas = d3.select('#containerAllCM')
.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 - 1 * groupSpacing) / (10 * 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("#containerSelectionCM");
svg.selectAll("*").remove();
var predictionsAll = JSON.parse(this.GetResultsSelectionCM[12])
if (this.predictSelectionCM.length != 0) {
var predictions = this.predictSelectionCM
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.GetResultsSelectionCM[6])
var targetNames = JSON.parse(this.GetResultsSelectionCM[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 = 1200,
height = 125;
var colourScale;
var canvas = d3.select('#containerSelectionCM')
.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 - 1 * groupSpacing) / (10 * 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('emittedEventCallingGridCrossoverMutation', data => { this.GetResultsAllCM = data; })
EventBus.$on('emittedEventCallingGridCrossoverMutation', this.Grid)
EventBus.$on('emittedEventCallingGridSelectionGridCrossoverMutation', data => { this.GetResultsSelectionCM = data; })
EventBus.$on('emittedEventCallingGridSelectionGridCrossoverMutation', this.GridSelection)
EventBus.$on('SendSelectedPointsToServerEventCM', data => { this.predictSelectionCM = data; })
EventBus.$on('SendSelectedPointsToServerEventCM', 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>

@ -6,10 +6,10 @@ import 'bootstrap-vue/dist/bootstrap-vue.css'
import router from './router'
import { library } from '@fortawesome/fontawesome-svg-core'
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
import { faDna, faSearch, faTrash} from '@fortawesome/free-solid-svg-icons'
import { faDna, faEraser, faSearch, faTrash} from '@fortawesome/free-solid-svg-icons'
import bFormSlider from 'vue-bootstrap-slider'
library.add(faDna, faSearch, faTrash)
library.add(faDna, faEraser, faSearch, faTrash)
Vue.component('font-awesome-icon', FontAwesomeIcon)

@ -788,6 +788,7 @@ def returnResults(ModelSpaceMDS,ModelSpaceTSNE,ModelSpaceUMAP,PredictionProbSel)
Results.append(json.dumps(ModelSpaceTSNE))
Results.append(json.dumps(ModelSpaceUMAP))
Results.append(json.dumps(PredictionProbSel))
print('mpike')
return Results
@ -816,7 +817,7 @@ def CrossoverMutateFun():
countKNN = 0
countLR = 0
setMaxLoopValue = 50
setMaxLoopValue = 5
paramAllAlgs = PreprocessingParam()
KNNIntIndex = []
LRIntIndex = []
@ -887,7 +888,7 @@ def CrossoverMutateFun():
else:
clf = KNeighborsClassifier()
params = {'n_neighbors': [crossoverDF['n_neighbors'].iloc[0]], 'metric': [crossoverDF['metric'].iloc[0]], 'algorithm': [crossoverDF['algorithm'].iloc[0]], 'weights': [crossoverDF['weights'].iloc[0]]}
AlgorithmsIDsEnd = 250 + countKNN
AlgorithmsIDsEnd = 205 + countKNN
localCrossMutr = crossoverMutation(XData, yData, clf, params, 'KNN', AlgorithmsIDsEnd)
countKNN += 1
crossoverDF = pd.DataFrame()
@ -926,7 +927,7 @@ def CrossoverMutateFun():
else:
clf = LogisticRegression(random_state=RANDOM_SEED)
params = {'C': [crossoverDF['C'].iloc[0]], 'max_iter': [crossoverDF['max_iter'].iloc[0]], 'solver': [crossoverDF['solver'].iloc[0]], 'penalty': [crossoverDF['penalty'].iloc[0]]}
AlgorithmsIDsEnd = 300 + countLR
AlgorithmsIDsEnd = 210 + countLR
localCrossMutr = crossoverMutation(XData, yData, clf, params, 'LR', AlgorithmsIDsEnd)
countLR += 1
crossoverDF = pd.DataFrame()
@ -971,7 +972,7 @@ def CrossoverMutateFun():
else:
clf = LogisticRegression(random_state=RANDOM_SEED)
params = {'C': [crossoverDF['C'].iloc[0]], 'max_iter': [crossoverDF['max_iter'].iloc[0]], 'solver': [crossoverDF['solver'].iloc[0]], 'penalty': [crossoverDF['penalty'].iloc[0]]}
AlgorithmsIDsEnd = 350 + countLR
AlgorithmsIDsEnd = 215 + countLR
localCrossMutr = crossoverMutation(XData, yData, clf, params, 'LR', AlgorithmsIDsEnd)
countLR += 1
crossoverDF = pd.DataFrame()
@ -991,23 +992,48 @@ def CrossoverMutateFun():
allParametersPerfCrossMutr = allParametersPerfCrossMutrKNNC + allParametersPerfCrossMutrKNNM + allParametersPerfCrossMutrLRC + allParametersPerfCrossMutrLRM
KNNIntIndex = []
for dr in KNNIDs:
KNNIntIndex.append(int(re.findall('\d+', dr)[0]))
allParametersPerformancePerModel[0] = allParametersPerformancePerModel[0] + allParametersPerfCrossMutrKNNC[0] + allParametersPerfCrossMutrKNNM[0]
allParametersPerformancePerModel[1] = pd.concat([allParametersPerformancePerModel[1], allParametersPerfCrossMutrKNNC[1]], ignore_index=True)
allParametersPerformancePerModel[1] = pd.concat([allParametersPerformancePerModel[1], allParametersPerfCrossMutrKNNM[1]], ignore_index=True)
allParametersPerformancePerModel[2] = pd.concat([allParametersPerformancePerModel[2], allParametersPerfCrossMutrKNNC[2]], ignore_index=True)
allParametersPerformancePerModel[2] = pd.concat([allParametersPerformancePerModel[2], allParametersPerfCrossMutrKNNM[2]], ignore_index=True)
allParametersPerformancePerModel[3] = pd.concat([allParametersPerformancePerModel[3], allParametersPerfCrossMutrKNNC[3]], ignore_index=True)
allParametersPerformancePerModel[3] = pd.concat([allParametersPerformancePerModel[3], allParametersPerfCrossMutrKNNM[3]], ignore_index=True)
allParametersPerformancePerModel[4] = allParametersPerformancePerModel[4] + allParametersPerfCrossMutrLRC[0] + allParametersPerfCrossMutrLRM[0]
allParametersPerformancePerModel[5] = pd.concat([allParametersPerformancePerModel[5], allParametersPerfCrossMutrLRC[1]], ignore_index=True)
allParametersPerformancePerModel[5] = pd.concat([allParametersPerformancePerModel[5], allParametersPerfCrossMutrLRM[1]], ignore_index=True)
allParametersPerformancePerModel[6] = pd.concat([allParametersPerformancePerModel[6], allParametersPerfCrossMutrLRC[2]], ignore_index=True)
allParametersPerformancePerModel[6] = pd.concat([allParametersPerformancePerModel[6], allParametersPerfCrossMutrLRM[2]], ignore_index=True)
allParametersPerformancePerModel[7] = pd.concat([allParametersPerformancePerModel[7], allParametersPerfCrossMutrLRC[3]], ignore_index=True)
allParametersPerformancePerModel[7] = pd.concat([allParametersPerformancePerModel[7], allParametersPerfCrossMutrLRM[3]], ignore_index=True)
allParametersPerformancePerModel[0] = [j for i, j in enumerate(allParametersPerformancePerModel[0]) if i not in KNNIntIndex]
allParametersPerformancePerModel[1].drop(allParametersPerformancePerModel[1].index[KNNIntIndex], inplace=True)
allParametersPerformancePerModel[2].drop(allParametersPerformancePerModel[2].index[KNNIntIndex], inplace=True)
allParametersPerformancePerModel[3].drop(allParametersPerformancePerModel[3].index[KNNIntIndex], inplace=True)
print(allParametersPerformancePerModel[7])
LRIntIndex = []
for dr in LRIDs:
LRIntIndex.append(int(re.findall('\d+', dr)[0]) - 100)
# KNNIntIndex = []
# for dr in KNNIDs:
# KNNIntIndex.append(int(re.findall('\d+', dr)[0]))
# allParametersPerformancePerModel[0] = [j for i, j in enumerate(allParametersPerformancePerModel[0]) if i not in KNNIntIndex]
# allParametersPerformancePerModel[1].drop(allParametersPerformancePerModel[1].index[KNNIntIndex], inplace=True)
# allParametersPerformancePerModel[2].drop(allParametersPerformancePerModel[2].index[KNNIntIndex], inplace=True)
# allParametersPerformancePerModel[3].drop(allParametersPerformancePerModel[3].index[KNNIntIndex], inplace=True)
# LRIntIndex = []
# for dr in LRIDs:
# LRIntIndex.append(int(re.findall('\d+', dr)[0]) - 100)
allParametersPerformancePerModel[4] = [j for i, j in enumerate(allParametersPerformancePerModel[4]) if i not in LRIntIndex]
allParametersPerformancePerModel[5].drop(allParametersPerformancePerModel[5].index[LRIntIndex], inplace=True)
allParametersPerformancePerModel[6].drop(allParametersPerformancePerModel[6].index[LRIntIndex], inplace=True)
allParametersPerformancePerModel[7].drop(allParametersPerformancePerModel[7].index[LRIntIndex], inplace=True)
# allParametersPerformancePerModel[4] = [j for i, j in enumerate(allParametersPerformancePerModel[4]) if i not in LRIntIndex]
# allParametersPerformancePerModel[5].drop(allParametersPerformancePerModel[5].index[LRIntIndex], inplace=True)
# allParametersPerformancePerModel[6].drop(allParametersPerformancePerModel[6].index[LRIntIndex], inplace=True)
# allParametersPerformancePerModel[7].drop(allParametersPerformancePerModel[7].index[LRIntIndex], inplace=True)
return 'Everything Okay'

Loading…
Cancel
Save