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 Action: <button
id="Remove" id="Remove"
v-on:click="Remove"> v-on:click="Remove">
<font-awesome-icon icon="dna" /> <font-awesome-icon icon="eraser" />
{{ CrossoverMutateText }} {{ CrossoverMutateText }}
</button> </button>
</div> </div>
@ -28,13 +28,14 @@ import { EventBus } from '../main.js'
const d3 = Object.assign(d3Base) const d3 = Object.assign(d3Base)
export default { export default {
name: 'CrossoverMutationSpace', name: 'Ensemble',
data () { data () {
return { return {
CrossoverMutateText: 'Unselected points\' crossover & mutation', CrossoverMutateText: 'Remove unselected points from ensemble',
WH: [], WH: [],
ScatterPlotResults: '', ScatterPlotResults: '',
representationDef: 'mdsCM', representationDef: 'mdsCM',
storeEnsembleLoc: [],
} }
}, },
methods: { methods: {
@ -66,6 +67,21 @@ export default {
var TSNEData = JSON.parse(this.ScatterPlotResults[10]) var TSNEData = JSON.parse(this.ScatterPlotResults[10])
var UMAPData = JSON.parse(this.ScatterPlotResults[11]) 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) EventBus.$emit('sendPointsNumberCM', modelId.length)
var stringParameters = [] var stringParameters = []
@ -295,6 +311,8 @@ export default {
}, },
}, },
mounted() { mounted() {
EventBus.$on('SendStoredEnsemble', data => { this.storeEnsembleLoc = data })
EventBus.$on('emittedEventCallingCrossoverMutation', data => { EventBus.$on('emittedEventCallingCrossoverMutation', data => {
this.ScatterPlotResults = data}) this.ScatterPlotResults = data})
EventBus.$on('emittedEventCallingCrossoverMutation', this.ScatterPlotView) EventBus.$on('emittedEventCallingCrossoverMutation', this.ScatterPlotView)

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

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

@ -127,7 +127,7 @@ export default {
// === Set up canvas === // // === Set up canvas === //
var width = 2500, var width = 1200,
height = 125; height = 125;
var colourScale; var colourScale;
@ -147,7 +147,7 @@ export default {
// settings for a grid with 40 cells in a row and 2x5 cells in a group // settings for a grid with 40 cells in a row and 2x5 cells in a group
var groupSpacing = 60; var groupSpacing = 60;
var cellSpacing = 2; 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 === // // === First call === //
databind(classStore, size, sqrtSize); // ...then update the databind function databind(classStore, size, sqrtSize); // ...then update the databind function
@ -327,7 +327,7 @@ export default {
var classStore = [].concat.apply([], classArray); var classStore = [].concat.apply([], classArray);
// === Set up canvas === // // === Set up canvas === //
var width = 2500, var width = 1200,
height = 125; height = 125;
var colourScale; var colourScale;
@ -347,7 +347,7 @@ export default {
// settings for a grid with 40 cells in a row and 2x5 cells in a group // settings for a grid with 40 cells in a row and 2x5 cells in a group
var groupSpacing = 60; var groupSpacing = 60;
var cellSpacing = 2; 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 === // // === First call === //
databind(classStore, size, sqrtSize); // ...then update the databind function 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 router from './router'
import { library } from '@fortawesome/fontawesome-svg-core' import { library } from '@fortawesome/fontawesome-svg-core'
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome' 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' import bFormSlider from 'vue-bootstrap-slider'
library.add(faDna, faSearch, faTrash) library.add(faDna, faEraser, faSearch, faTrash)
Vue.component('font-awesome-icon', FontAwesomeIcon) 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(ModelSpaceTSNE))
Results.append(json.dumps(ModelSpaceUMAP)) Results.append(json.dumps(ModelSpaceUMAP))
Results.append(json.dumps(PredictionProbSel)) Results.append(json.dumps(PredictionProbSel))
print('mpike')
return Results return Results
@ -816,7 +817,7 @@ def CrossoverMutateFun():
countKNN = 0 countKNN = 0
countLR = 0 countLR = 0
setMaxLoopValue = 50 setMaxLoopValue = 5
paramAllAlgs = PreprocessingParam() paramAllAlgs = PreprocessingParam()
KNNIntIndex = [] KNNIntIndex = []
LRIntIndex = [] LRIntIndex = []
@ -887,7 +888,7 @@ def CrossoverMutateFun():
else: else:
clf = KNeighborsClassifier() 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]]} 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) localCrossMutr = crossoverMutation(XData, yData, clf, params, 'KNN', AlgorithmsIDsEnd)
countKNN += 1 countKNN += 1
crossoverDF = pd.DataFrame() crossoverDF = pd.DataFrame()
@ -926,7 +927,7 @@ def CrossoverMutateFun():
else: else:
clf = LogisticRegression(random_state=RANDOM_SEED) 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]]} 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) localCrossMutr = crossoverMutation(XData, yData, clf, params, 'LR', AlgorithmsIDsEnd)
countLR += 1 countLR += 1
crossoverDF = pd.DataFrame() crossoverDF = pd.DataFrame()
@ -971,7 +972,7 @@ def CrossoverMutateFun():
else: else:
clf = LogisticRegression(random_state=RANDOM_SEED) 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]]} 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) localCrossMutr = crossoverMutation(XData, yData, clf, params, 'LR', AlgorithmsIDsEnd)
countLR += 1 countLR += 1
crossoverDF = pd.DataFrame() crossoverDF = pd.DataFrame()
@ -991,23 +992,48 @@ def CrossoverMutateFun():
allParametersPerfCrossMutr = allParametersPerfCrossMutrKNNC + allParametersPerfCrossMutrKNNM + allParametersPerfCrossMutrLRC + allParametersPerfCrossMutrLRM allParametersPerfCrossMutr = allParametersPerfCrossMutrKNNC + allParametersPerfCrossMutrKNNM + allParametersPerfCrossMutrLRC + allParametersPerfCrossMutrLRM
KNNIntIndex = [] allParametersPerformancePerModel[0] = allParametersPerformancePerModel[0] + allParametersPerfCrossMutrKNNC[0] + allParametersPerfCrossMutrKNNM[0]
for dr in KNNIDs:
KNNIntIndex.append(int(re.findall('\d+', dr)[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] print(allParametersPerformancePerModel[7])
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 = [] # KNNIntIndex = []
for dr in LRIDs: # for dr in KNNIDs:
LRIntIndex.append(int(re.findall('\d+', dr)[0]) - 100) # 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[4] = [j for i, j in enumerate(allParametersPerformancePerModel[4]) if i not in LRIntIndex]
allParametersPerformancePerModel[5].drop(allParametersPerformancePerModel[5].index[LRIntIndex], inplace=True) # allParametersPerformancePerModel[5].drop(allParametersPerformancePerModel[5].index[LRIntIndex], inplace=True)
allParametersPerformancePerModel[6].drop(allParametersPerformancePerModel[6].index[LRIntIndex], inplace=True) # allParametersPerformancePerModel[6].drop(allParametersPerformancePerModel[6].index[LRIntIndex], inplace=True)
allParametersPerformancePerModel[7].drop(allParametersPerformancePerModel[7].index[LRIntIndex], inplace=True) # allParametersPerformancePerModel[7].drop(allParametersPerformancePerModel[7].index[LRIntIndex], inplace=True)
return 'Everything Okay' return 'Everything Okay'

Loading…
Cancel
Save