From 877575a3752ca0ea7ad8357543a84efa8a500bbf Mon Sep 17 00:00:00 2001 From: Angelos Chatzimparmpas Date: Fri, 3 Jul 2020 15:13:22 +0200 Subject: [PATCH] fixed SVC --- __pycache__/run.cpython-37.pyc | Bin 0 -> 9718 bytes .../metadata.json | 1 + .../output.pkl | 1 + .../run/create_global_function/func_code.py | 11 + .../metadata.json | 1 + .../output.pkl | Bin 0 -> 25 bytes cachedir/joblib/run/executeModel/func_code.py | 17 + frontend/index.html | 2 +- frontend/src/components/About.vue | 8 - .../src/components/AlgorithmHyperParam.vue | 351 ------ frontend/src/components/Algorithms.vue | 1113 ----------------- .../src/components/CrossoverMutationSpace.vue | 309 ----- frontend/src/components/FeatureSpace1.vue | 86 ++ frontend/src/components/FeatureSpace2.vue | 86 ++ frontend/src/components/FeatureSpace3.vue | 86 ++ frontend/src/components/FeatureSpace4.vue | 86 ++ .../src/components/HyperParameterSpace.vue | 312 ----- frontend/src/components/Main.vue | 415 +----- frontend/src/components/NotFound.vue | 8 - frontend/src/components/Parameters.vue | 846 ------------- .../src/components/PerformanceMetrics.vue | 148 --- frontend/src/components/Predictions.vue | 454 ------- frontend/src/components/VotingResults.vue | 408 ------ run.py | 946 +------------- 24 files changed, 438 insertions(+), 5257 deletions(-) create mode 100644 __pycache__/run.cpython-37.pyc create mode 100644 cachedir/joblib/run/create_global_function/72a755383fba437e4dead6ff3e3d81e3/metadata.json create mode 100644 cachedir/joblib/run/create_global_function/72a755383fba437e4dead6ff3e3d81e3/output.pkl create mode 100644 cachedir/joblib/run/create_global_function/func_code.py create mode 100644 cachedir/joblib/run/executeModel/72a755383fba437e4dead6ff3e3d81e3/metadata.json create mode 100644 cachedir/joblib/run/executeModel/72a755383fba437e4dead6ff3e3d81e3/output.pkl create mode 100644 cachedir/joblib/run/executeModel/func_code.py delete mode 100644 frontend/src/components/About.vue delete mode 100644 frontend/src/components/AlgorithmHyperParam.vue delete mode 100644 frontend/src/components/Algorithms.vue delete mode 100644 frontend/src/components/CrossoverMutationSpace.vue create mode 100644 frontend/src/components/FeatureSpace1.vue create mode 100644 frontend/src/components/FeatureSpace2.vue create mode 100644 frontend/src/components/FeatureSpace3.vue create mode 100644 frontend/src/components/FeatureSpace4.vue delete mode 100644 frontend/src/components/HyperParameterSpace.vue delete mode 100644 frontend/src/components/NotFound.vue delete mode 100644 frontend/src/components/Parameters.vue delete mode 100644 frontend/src/components/PerformanceMetrics.vue delete mode 100644 frontend/src/components/Predictions.vue delete mode 100644 frontend/src/components/VotingResults.vue diff --git a/__pycache__/run.cpython-37.pyc b/__pycache__/run.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..94f66123ca2f2551bdcb96497ed29d2c8d4dbaf9 GIT binary patch literal 9718 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 literal 0 HcmV?d00001 diff --git a/cachedir/joblib/run/create_global_function/72a755383fba437e4dead6ff3e3d81e3/metadata.json b/cachedir/joblib/run/create_global_function/72a755383fba437e4dead6ff3e3d81e3/metadata.json new file mode 100644 index 0000000..94e7e39 --- /dev/null +++ b/cachedir/joblib/run/create_global_function/72a755383fba437e4dead6ff3e3d81e3/metadata.json @@ -0,0 +1 @@ +{"duration": 0.006577968597412109, "input_args": {}} \ No newline at end of file diff --git a/cachedir/joblib/run/create_global_function/72a755383fba437e4dead6ff3e3d81e3/output.pkl b/cachedir/joblib/run/create_global_function/72a755383fba437e4dead6ff3e3d81e3/output.pkl new file mode 100644 index 0000000..a61ccad --- /dev/null +++ b/cachedir/joblib/run/create_global_function/72a755383fba437e4dead6ff3e3d81e3/output.pkl @@ -0,0 +1 @@ +N. \ No newline at end of file diff --git a/cachedir/joblib/run/create_global_function/func_code.py b/cachedir/joblib/run/create_global_function/func_code.py new file mode 100644 index 0000000..f18ab73 --- /dev/null +++ b/cachedir/joblib/run/create_global_function/func_code.py @@ -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']) diff --git a/cachedir/joblib/run/executeModel/72a755383fba437e4dead6ff3e3d81e3/metadata.json b/cachedir/joblib/run/executeModel/72a755383fba437e4dead6ff3e3d81e3/metadata.json new file mode 100644 index 0000000..d592a72 --- /dev/null +++ b/cachedir/joblib/run/executeModel/72a755383fba437e4dead6ff3e3d81e3/metadata.json @@ -0,0 +1 @@ +{"duration": 4.569021940231323, "input_args": {}} \ No newline at end of file diff --git a/cachedir/joblib/run/executeModel/72a755383fba437e4dead6ff3e3d81e3/output.pkl b/cachedir/joblib/run/executeModel/72a755383fba437e4dead6ff3e3d81e3/output.pkl new file mode 100644 index 0000000000000000000000000000000000000000..76b1d12f8906e37f67b4382884a6fd94416769bc GIT binary patch literal 25 gcmZo*j^JltU~nx - HyperSearVis + FeatureEnVi
diff --git a/frontend/src/components/About.vue b/frontend/src/components/About.vue deleted file mode 100644 index 5529315..0000000 --- a/frontend/src/components/About.vue +++ /dev/null @@ -1,8 +0,0 @@ - - - diff --git a/frontend/src/components/AlgorithmHyperParam.vue b/frontend/src/components/AlgorithmHyperParam.vue deleted file mode 100644 index f577a96..0000000 --- a/frontend/src/components/AlgorithmHyperParam.vue +++ /dev/null @@ -1,351 +0,0 @@ - - - \ No newline at end of file diff --git a/frontend/src/components/Algorithms.vue b/frontend/src/components/Algorithms.vue deleted file mode 100644 index 3759f75..0000000 --- a/frontend/src/components/Algorithms.vue +++ /dev/null @@ -1,1113 +0,0 @@ - - - \ No newline at end of file diff --git a/frontend/src/components/CrossoverMutationSpace.vue b/frontend/src/components/CrossoverMutationSpace.vue deleted file mode 100644 index 3d5d43e..0000000 --- a/frontend/src/components/CrossoverMutationSpace.vue +++ /dev/null @@ -1,309 +0,0 @@ - - - \ No newline at end of file diff --git a/frontend/src/components/FeatureSpace1.vue b/frontend/src/components/FeatureSpace1.vue new file mode 100644 index 0000000..38998f0 --- /dev/null +++ b/frontend/src/components/FeatureSpace1.vue @@ -0,0 +1,86 @@ + + + diff --git a/frontend/src/components/FeatureSpace2.vue b/frontend/src/components/FeatureSpace2.vue new file mode 100644 index 0000000..9219312 --- /dev/null +++ b/frontend/src/components/FeatureSpace2.vue @@ -0,0 +1,86 @@ + + + diff --git a/frontend/src/components/FeatureSpace3.vue b/frontend/src/components/FeatureSpace3.vue new file mode 100644 index 0000000..16c02a1 --- /dev/null +++ b/frontend/src/components/FeatureSpace3.vue @@ -0,0 +1,86 @@ + + + diff --git a/frontend/src/components/FeatureSpace4.vue b/frontend/src/components/FeatureSpace4.vue new file mode 100644 index 0000000..e816ed5 --- /dev/null +++ b/frontend/src/components/FeatureSpace4.vue @@ -0,0 +1,86 @@ + + + diff --git a/frontend/src/components/HyperParameterSpace.vue b/frontend/src/components/HyperParameterSpace.vue deleted file mode 100644 index 0c598de..0000000 --- a/frontend/src/components/HyperParameterSpace.vue +++ /dev/null @@ -1,312 +0,0 @@ - - - \ No newline at end of file diff --git a/frontend/src/components/Main.vue b/frontend/src/components/Main.vue index 49889c2..cc49ca0 100755 --- a/frontend/src/components/Main.vue +++ b/frontend/src/components/Main.vue @@ -6,10 +6,9 @@ - Data Sets and Performance Metrics Manager + Data Sets Manager - @@ -19,16 +18,16 @@ Provenance - + - Majority Voting Results + Results - + @@ -118,44 +117,51 @@ - Hyper-parameters' Space - [Sel: {{OverSelLength}} / All: {{OverAllLength}}] + I. Feature Space - Highly Correct Prediction Probability - - + + - Crossover and Mutation - [Sel: {{OverSelLengthCM}} / All: {{OverAllLengthCM}}] + II. Feature Space - Slightly Correct Prediction Probability - - + + - + - Predictions' Space + III. Feature Space - Slightly Wrong Prediction Probability - - + + + + + IV. Feature Space - Highly Wrong Prediction Probability + + + + + + + + - - @@ -164,14 +170,10 @@ import Vue from 'vue' import DataSetExecController from './DataSetExecController.vue' -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 VotingResults from './VotingResults.vue' -import Parameters from './Parameters.vue' -import Predictions from './Predictions.vue' +import FeatureSpace1 from './FeatureSpace1.vue' +import FeatureSpace2 from './FeatureSpace2.vue' +import FeatureSpace3 from './FeatureSpace3.vue' +import FeatureSpace4 from './FeatureSpace4.vue' import axios from 'axios' import { loadProgressBar } from 'axios-progress-bar' import 'axios-progress-bar/dist/nprogress.css' @@ -190,14 +192,10 @@ export default Vue.extend({ name: 'Main', components: { DataSetExecController, - PerformanceMetrics, - Algorithms, - AlgorithmHyperParam, - HyperParameterSpace, - CrossoverMutationSpace, - Parameters, - Predictions, - VotingResults, + FeatureSpace1, + FeatureSpace2, + FeatureSpace3, + FeatureSpace4, mdbCard, mdbCardBody, mdbCardHeader, @@ -217,20 +215,17 @@ export default Vue.extend({ ClassifierIDsListCM: [], SelectedFeaturesPerClassifier: '', FinalResults: 0, - Algorithms: ['KNN','LR'], selectedAlgorithm: '', PerformancePerModel: '', PerformanceCheck: '', firstTimeFlag: 1, selectedModels_Stack: [], - selectedAlgorithms: ['KNN','LR'], parametersofModels: [], reset: false, brushedBoxPlotUpdate: 0, width: 0, height: 0, combineWH: [], - basicValuesFact: [1,1,1,1,0,0,0,0], sumPerClassifier: [], valueSel: 0, valueAll: 0, @@ -289,7 +284,6 @@ export default Vue.extend({ }, getDatafromtheBackEnd () { const path = `http://localhost:5000/data/PlotClassifiers` - const axiosConfig = { headers: { 'Content-Type': 'application/json', @@ -355,214 +349,6 @@ export default Vue.extend({ console.log(error) }) }, - SelectedPoints () { - this.OverSelLength = this.ClassifierIDsList.length - this.SendSelectedIDs() - }, - SendSelectedIDs () { - const path = `http://127.0.0.1:5000/data/SendtoSeverSelIDs` - const postData = { - predictSelectionIDs: this.ClassifierIDsList - } - const axiosConfig = { - headers: { - 'Content-Type': 'application/json', - 'Access-Control-Allow-Origin': '*', - 'Access-Control-Allow-Headers': 'Origin, Content-Type, X-Auth-Token', - 'Access-Control-Allow-Methods': 'GET, PUT, POST, DELETE, OPTIONS' - } - } - axios.post(path, postData, axiosConfig) - .then(response => { - console.log('Sent the selected IDs to compute predictions!') - this.retrievePredictionsSel() - }) - .catch(error => { - console.log(error) - }) - }, - retrievePredictionsSel () { - const path = `http://localhost:5000/data/RetrievePredictions` - - const axiosConfig = { - headers: { - 'Content-Type': 'application/json', - 'Access-Control-Allow-Origin': '*', - 'Access-Control-Allow-Headers': 'Origin, Content-Type, X-Auth-Token', - 'Access-Control-Allow-Methods': 'GET, PUT, POST, DELETE, OPTIONS' - } - } - axios.get(path, axiosConfig) - .then(response => { - this.PredictSel = response.data.PredictSel - console.log('Server successfully sent the predictions!') - EventBus.$emit('SendSelectedPointsToServerEvent', this.PredictSel) - }) - .catch(error => { - console.log(error) - }) - }, - SelectedPointsCM () { - this.OverSelLengthCM = this.ClassifierIDsListCM.length - }, - SendSelectedPointsToServer () { - if (this.ClassifierIDsList === ''){ - this.OverSelLength = 0 - EventBus.$emit('resetViews') - } else { - this.OverSelLength = this.ClassifierIDsList.length - const path = `http://127.0.0.1:5000/data/ServerRequestSelPoin` - const postData = { - ClassifiersList: this.ClassifierIDsList, - keyNow: this.keyNow, - } - const axiosConfig = { - headers: { - 'Content-Type': 'application/json', - 'Access-Control-Allow-Origin': '*', - 'Access-Control-Allow-Headers': 'Origin, Content-Type, X-Auth-Token', - 'Access-Control-Allow-Methods': 'GET, PUT, POST, DELETE, OPTIONS' - } - } - axios.post(path, postData, axiosConfig) - .then(response => { - console.log('Sent the selected points to the server (scatterplot)!') - if (this.keyNow == 0) { - this.OverAllLength = this.ClassifierIDsList.length - EventBus.$emit('GrayOutPoints', this.ClassifierIDsList) - } - //this.getSelectedModelsMetrics() - this.getFinalResults() - }) - .catch(error => { - console.log(error) - }) - } - }, - RemoveFromStackModels () { - const path = `http://127.0.0.1:5000/data/ServerRemoveFromStack` - const postData = { - ClassifiersList: this.ClassifierIDsListRemaining, - } - const axiosConfig = { - headers: { - 'Content-Type': 'application/json', - 'Access-Control-Allow-Origin': '*', - 'Access-Control-Allow-Headers': 'Origin, Content-Type, X-Auth-Token', - 'Access-Control-Allow-Methods': 'GET, PUT, POST, DELETE, OPTIONS' - } - } - axios.post(path, postData, axiosConfig) - .then(response => { - console.log('Sent the selected points to the server (scatterplot)!') - this.updatePredictionsSpace() - }) - .catch(error => { - console.log(error) - }) - }, - updatePredictionsSpace () { - const path = `http://localhost:5000/data/UpdatePredictionsSpace` - - const axiosConfig = { - headers: { - 'Content-Type': 'application/json', - 'Access-Control-Allow-Origin': '*', - 'Access-Control-Allow-Headers': 'Origin, Content-Type, X-Auth-Token', - 'Access-Control-Allow-Methods': 'GET, PUT, POST, DELETE, OPTIONS' - } - } - axios.get(path, axiosConfig) - .then(response => { - this.UpdatePredictions = response.data.UpdatePredictions - console.log('Updating Predictions Space!') - if (this.keyNow == 1) { - EventBus.$emit('InitializeProvenance', this.UpdatePredictions) - EventBus.$emit('sendKeyScatt', 1) - EventBus.$emit('GrayOutPoints', this.ClassifierIDsList) - } - EventBus.$emit('updatePredictionsSpace', this.UpdatePredictions) - EventBus.$emit('updateFlagForFinalResults', 0) - this.getFinalResults() - }) - .catch(error => { - console.log(error) - }) - }, - SendSelectedDataPointsToServer () { - // set a path from which the server will receive the seleceted predictions points - const path = `http://127.0.0.1:5000/data/ServerRequestDataPoint` - // brushing and linking between predictions space and data space - EventBus.$emit('updateDataSpaceHighlighting', this.DataPointsSel) - - const postData = { - DataPointsSel: this.DataPointsSel - } - const axiosConfig = { - headers: { - 'Content-Type': 'application/json', - 'Access-Control-Allow-Origin': '*', - 'Access-Control-Allow-Headers': 'Origin, Content-Type, X-Auth-Token', - 'Access-Control-Allow-Methods': 'GET, PUT, POST, DELETE, OPTIONS' - } - } - axios.post(path, postData, axiosConfig) - .then(response => { - console.log('Sent the selected data points to the server!') - this.getSelectedDataPointsModels() - }) - .catch(error => { - console.log(error) - }) - }, - getSelectedDataPointsModels () { - const path = `http://localhost:5000/data/ServerSentDataPointsModel` - - const axiosConfig = { - headers: { - 'Content-Type': 'application/json', - 'Access-Control-Allow-Origin': '*', - 'Access-Control-Allow-Headers': 'Origin, Content-Type, X-Auth-Token', - 'Access-Control-Allow-Methods': 'GET, PUT, POST, DELETE, OPTIONS' - } - } - axios.get(path, axiosConfig) - .then(response => { - this.DataPointsModels = response.data.DataPointsModels - var resultsPerMetricUpdated = JSON.parse(this.DataPointsModels[2]) - console.log('Server successfully sent the new models for the scatterplot!') - EventBus.$emit('UpdateModelsScatterplot', this.DataPointsModels) - EventBus.$emit('InitializeMetricsBarChartPrediction', JSON.stringify(resultsPerMetricUpdated)) - EventBus.$emit('UpdateBalanceView', this.DataPointsModels) - }) - .catch(error => { - console.log(error) - }) - }, - getSelectedModelsMetrics () { - const path = `http://localhost:5000/data/BarChartSelectedModels` - - const axiosConfig = { - headers: { - 'Content-Type': 'application/json', - 'Access-Control-Allow-Origin': '*', - 'Access-Control-Allow-Headers': 'Origin, Content-Type, X-Auth-Token', - 'Access-Control-Allow-Methods': 'GET, PUT, POST, DELETE, OPTIONS' - } - } - axios.get(path, axiosConfig) - .then(response => { - this.SelectedMetricsForModels = response.data.SelectedMetricsForModels - console.log('Server successfully updated barchart for metrics based on selected models!') - EventBus.$emit('UpdateBarChartperMetric', this.SelectedMetricsForModels) - }) - .catch(error => { - console.log(error) - }) - }, - getFinalResults () { - this.FinalResults = this.getFinalResultsFromBackend() - }, getFinalResultsFromBackend () { const path = `http://localhost:5000/data/SendFinalResultsBacktoVisualize` @@ -606,11 +392,7 @@ export default Vue.extend({ }) }, SendAlgorithmsToServer () { - const path = `http://127.0.0.1:5000/data/ServerRequestSelParameters` - const postData = { - Algorithms: this.Algorithms, - Toggle: this.toggleDeepMain - } + const path = `http://127.0.0.1:5000/data/ServerRequestResults` const axiosConfig = { headers: { 'Content-Type': 'application/json', @@ -622,66 +404,11 @@ export default Vue.extend({ axios.post(path, postData, axiosConfig) .then(response => { console.log('Send request to server! Algorithm name was sent successfully!') - this.factors() - }) - .catch(error => { - console.log(error) - }) - }, - UpdateBarChartFeatures () { - const path = `http://127.0.0.1:5000/data/FeaturesScoresUpdate` - const postData = { - models: this.modelsUpdate, - algorithms: this.AlgorithmsUpdate - } - const axiosConfig = { - headers: { - 'Content-Type': 'application/json', - 'Access-Control-Allow-Origin': '*', - 'Access-Control-Allow-Headers': 'Origin, Content-Type, X-Auth-Token', - 'Access-Control-Allow-Methods': 'GET, PUT, POST, DELETE, OPTIONS' - } - } - axios.post(path, postData, axiosConfig) - .then(response => { - console.log('Send request to server! Updating Barchart!') - this.UpdateModelsFeaturePerformance() }) .catch(error => { console.log(error) }) }, - UpdateBasedonFeatures () { - const path = `http://127.0.0.1:5000/data/FeaturesSelection` - const postData = { - featureSelection: this.SelectedFeaturesPerClassifier - } - const axiosConfig = { - headers: { - 'Content-Type': 'application/json', - 'Access-Control-Allow-Origin': '*', - 'Access-Control-Allow-Headers': 'Origin, Content-Type, X-Auth-Token', - 'Access-Control-Allow-Methods': 'GET, PUT, POST, DELETE, OPTIONS' - } - } - axios.post(path, postData, axiosConfig) - .then(response => { - console.log('Sent specific features per model!') - this.getFinalResults() - }) - .catch(error => { - console.log(error) - }) - }, - UpdateBrushBoxPlot () { - EventBus.$emit('emittedEventCallingBrushedBoxPlot', this.brushedBoxPlotUpdate) - }, - CallPCP () { - EventBus.$emit('emittedEventCallingSelectedALgorithm', this.selectedAlgorithm) - EventBus.$emit('emittedEventCallingModelClear') - EventBus.$emit('emittedEventCallingModelSelect', this.selectedAlgorithm) - EventBus.$emit('emittedEventCallingModel', this.PerformancePerModel) - }, Reset () { const path = `http://127.0.0.1:5000/data/Reset` this.reset = true @@ -722,28 +449,6 @@ export default Vue.extend({ change () { this.render(false) }, - factors () { - const path = `http://127.0.0.1:5000/data/factors` - const postData = { - Factors: this.basicValuesFact - } - const axiosConfig = { - headers: { - 'Content-Type': 'application/json', - 'Access-Control-Allow-Origin': '*', - 'Access-Control-Allow-Headers': 'Origin, Content-Type, X-Auth-Token', - 'Access-Control-Allow-Methods': 'GET, PUT, POST, DELETE, OPTIONS' - } - } - axios.post(path, postData, axiosConfig) - .then(response => { - console.log('Sending factors!') - this.getDatafromtheBackEnd() - }) - .catch(error => { - console.log(error) - }) - }, RetrieveNewColors () { const path = `http://127.0.0.1:5000/data/UpdateOverv` @@ -765,58 +470,6 @@ export default Vue.extend({ console.log(error) }) }, - updateToggle () { - var toggles = [] - toggles.push(this.toggle1) - toggles.push(this.toggle2) - toggles.push(this.toggle3) - EventBus.$emit('emittedEventCallingTogglesUpdate', toggles) - }, - DataSpaceFun () { - const path = `http://127.0.0.1:5000/data/SendDataSpacPoints` - const postData = { - points: this.dataPointsSelfromDataSpace, - } - const axiosConfig = { - headers: { - 'Content-Type': 'application/json', - 'Access-Control-Allow-Origin': '*', - 'Access-Control-Allow-Headers': 'Origin, Content-Type, X-Auth-Token', - 'Access-Control-Allow-Methods': 'GET, PUT, POST, DELETE, OPTIONS' - } - } - axios.post(path, postData, axiosConfig) - .then(response => { - console.log('Send request to server! Brushed points sent successfully!') - }) - .catch(error => { - console.log(error) - }) - }, - sendPointsCrossMutat () { - const path = `http://127.0.0.1:5000/data/CrossoverMutation` - - const postData = { - RemainingPoints: this.unselectedRemainingPoints - } - const axiosConfig = { - headers: { - 'Content-Type': 'application/json', - 'Access-Control-Allow-Origin': '*', - 'Access-Control-Allow-Headers': 'Origin, Content-Type, X-Auth-Token', - 'Access-Control-Allow-Methods': 'GET, PUT, POST, DELETE, OPTIONS' - } - } - axios.post(path, postData, axiosConfig) - .then(response => { - console.log('Sent the unselected points for crossover and mutation.') - this.getDatafromtheBackEnd() - this.getCMComputedData() - }) - .catch(error => { - console.log(error) - }) - } }, created () { // does the browser support the Navigation Timing API? diff --git a/frontend/src/components/NotFound.vue b/frontend/src/components/NotFound.vue deleted file mode 100644 index ec2d23e..0000000 --- a/frontend/src/components/NotFound.vue +++ /dev/null @@ -1,8 +0,0 @@ - - - diff --git a/frontend/src/components/Parameters.vue b/frontend/src/components/Parameters.vue deleted file mode 100644 index beb1726..0000000 --- a/frontend/src/components/Parameters.vue +++ /dev/null @@ -1,846 +0,0 @@ - - - - - \ No newline at end of file diff --git a/frontend/src/components/PerformanceMetrics.vue b/frontend/src/components/PerformanceMetrics.vue deleted file mode 100644 index 64c5ff9..0000000 --- a/frontend/src/components/PerformanceMetrics.vue +++ /dev/null @@ -1,148 +0,0 @@ - - - - - \ No newline at end of file diff --git a/frontend/src/components/Predictions.vue b/frontend/src/components/Predictions.vue deleted file mode 100644 index 248e02c..0000000 --- a/frontend/src/components/Predictions.vue +++ /dev/null @@ -1,454 +0,0 @@ - - - - - \ No newline at end of file diff --git a/frontend/src/components/VotingResults.vue b/frontend/src/components/VotingResults.vue deleted file mode 100644 index 1c69f28..0000000 --- a/frontend/src/components/VotingResults.vue +++ /dev/null @@ -1,408 +0,0 @@ - - - \ No newline at end of file diff --git a/run.py b/run.py index 268e583..54813c9 100644 --- a/run.py +++ b/run.py @@ -14,17 +14,10 @@ import multiprocessing from joblib import Memory -from sklearn.model_selection import RandomizedSearchCV -from sklearn.model_selection import GridSearchCV -from sklearn.neighbors import KNeighborsClassifier -from sklearn.linear_model import LogisticRegression +from sklearn.svm import SVC +from bayes_opt import BayesianOptimization +from sklearn.model_selection import cross_validate from sklearn.model_selection import cross_val_predict -from sklearn.metrics import matthews_corrcoef -from sklearn.metrics import log_loss -from imblearn.metrics import geometric_mean_score -from sklearn.manifold import MDS -from sklearn.manifold import TSNE -import umap # this block of code is for the connection between the server, the database, and the client (plus routing) @@ -62,9 +55,6 @@ def reset(): global KNNModelsCount global LRModelsCount - global factors - factors = [1,1,1,1,0,0,0,0] - global keyData keyData = 0 @@ -111,7 +101,7 @@ def reset(): all_classifiers = [] global crossValidation - crossValidation = 5 + crossValidation = 10 # models global KNNModels @@ -446,917 +436,37 @@ def dataSetSelection(): yDataStored = yData.copy() warnings.simplefilter('ignore') - return 'Everything is okay' - -# Retrieve data from client -@cross_origin(origin='localhost',headers=['Content-Type','Authorization']) -@app.route('/data/factors', methods=["GET", "POST"]) -def RetrieveFactors(): - global factors - global allParametersPerformancePerModel - Factors = request.get_data().decode('utf8').replace("'", '"') - FactorsInt = json.loads(Factors) - factors = FactorsInt['Factors'] - - return 'Everything Okay' - -# Initialize every model for each algorithm -@cross_origin(origin='localhost',headers=['Content-Type','Authorization']) -@app.route('/data/ServerRequestSelParameters', methods=["GET", "POST"]) -def retrieveModel(): - - # get the models from the frontend - RetrievedModel = request.get_data().decode('utf8').replace("'", '"') - RetrievedModel = json.loads(RetrievedModel) - - global algorithms - algorithms = RetrievedModel['Algorithms'] - - global XData - global yData - global LRModelsCount - - # loop through the algorithms - global allParametersPerformancePerModel - global HistoryPreservation - for eachAlgor in algorithms: - if (eachAlgor) == 'KNN': - clf = KNeighborsClassifier() - params = {'n_neighbors': list(range(1, 100)), 'metric': ['chebyshev', 'manhattan', 'euclidean', 'minkowski'], 'algorithm': ['brute', 'kd_tree', 'ball_tree'], 'weights': ['uniform', 'distance']} - AlgorithmsIDsEnd = KNNModelsCount - else: - clf = LogisticRegression(random_state=RANDOM_SEED) - params = {'C': list(np.arange(1,100,1)), 'max_iter': list(np.arange(50,500,50)), 'solver': ['lbfgs', 'newton-cg', 'sag', 'saga'], 'penalty': ['l2', 'none']} - AlgorithmsIDsEnd = LRModelsCount - allParametersPerformancePerModel = randomSearch(XData, yData, clf, params, eachAlgor, AlgorithmsIDsEnd) - HistoryPreservation = allParametersPerformancePerModel.copy() - # call the function that sends the results to the frontend + executeModel() + + return 'Everything is okay' - return 'Everything Okay' +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']) location = './cachedir' memory = Memory(location, verbose=0) @memory.cache -def randomSearch(XData, yData, clf, params, eachAlgor, AlgorithmsIDsEnd): - - search = RandomizedSearchCV( - estimator=clf, param_distributions=params, n_iter=100, - cv=crossValidation, refit='accuracy', scoring=scoring, - verbose=0, n_jobs=-1) - - # fit and extract the probabilities - search.fit(XData, yData) - - # process the results - cv_results = [] - cv_results.append(search.cv_results_) - df_cv_results = pd.DataFrame.from_dict(cv_results) - - # number of models stored - number_of_models = len(df_cv_results.iloc[0][0]) - - # initialize results per row - df_cv_results_per_row = [] - - # loop through number of models - modelsIDs = [] - for i in range(number_of_models): - number = AlgorithmsIDsEnd+i - modelsIDs.append(eachAlgor+str(number)) - # initialize results per item - df_cv_results_per_item = [] - for column in df_cv_results.iloc[0]: - df_cv_results_per_item.append(column[i]) - df_cv_results_per_row.append(df_cv_results_per_item) - - # store the results into a pandas dataframe - df_cv_results_classifiers = pd.DataFrame(data = df_cv_results_per_row, columns= df_cv_results.columns) - - # copy and filter in order to get only the metrics - metrics = df_cv_results_classifiers.copy() - metrics = metrics.filter(['mean_test_accuracy','mean_test_precision_weighted','mean_test_recall_weighted','mean_test_f1_weighted','mean_test_roc_auc_ovo_weighted']) - - # concat parameters and performance - parametersPerformancePerModel = pd.DataFrame(df_cv_results_classifiers['params']) - parametersLocal = parametersPerformancePerModel['params'].copy() - - Models = [] - for index, items in enumerate(parametersLocal): - Models.append(index) - parametersLocalNew = [ parametersLocal[your_key] for your_key in Models ] - - perModelProb = [] - - resultsWeighted = [] - resultsCorrCoef = [] - resultsLogLoss = [] - resultsLogLossFinal = [] - - # influence calculation for all the instances - inputs = range(len(XData)) - num_cores = multiprocessing.cpu_count() - - for eachModelParameters in parametersLocalNew: - clf.set_params(**eachModelParameters) - clf.fit(XData, yData) - yPredict = clf.predict(XData) - yPredict = np.nan_to_num(yPredict) - yPredictProb = cross_val_predict(clf, XData, yData, cv=crossValidation, method='predict_proba') - yPredictProb = np.nan_to_num(yPredictProb) - perModelProb.append(yPredictProb.tolist()) - - resultsWeighted.append(geometric_mean_score(yData, yPredict, average='weighted')) - resultsCorrCoef.append(matthews_corrcoef(yData, yPredict)) - resultsLogLoss.append(log_loss(yData, yPredictProb, normalize=True)) - - maxLog = max(resultsLogLoss) - minLog = min(resultsLogLoss) - for each in resultsLogLoss: - resultsLogLossFinal.append((each-minLog)/(maxLog-minLog)) - - metrics.insert(5,'geometric_mean_score_weighted',resultsWeighted) - metrics.insert(6,'matthews_corrcoef',resultsCorrCoef) - metrics.insert(7,'log_loss',resultsLogLossFinal) - - perModelProbPandas = pd.DataFrame(perModelProb) - - results.append(modelsIDs) - results.append(parametersPerformancePerModel) - results.append(metrics) - results.append(perModelProbPandas) - - return results - -def PreprocessingIDs(): - dicKNN = allParametersPerformancePerModel[0] - dicLR = allParametersPerformancePerModel[4] - - df_concatIDs = dicKNN + dicLR - - return df_concatIDs +def executeModel(): -def PreprocessingMetrics(): - dicKNN = allParametersPerformancePerModel[2] - dicLR = allParametersPerformancePerModel[6] + create_global_function() + global estimator - dfKNN = pd.DataFrame.from_dict(dicKNN) - dfLR = pd.DataFrame.from_dict(dicLR) + 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') - df_concatMetrics = pd.concat([dfKNN, dfLR]) - df_concatMetrics = df_concatMetrics.reset_index(drop=True) - return df_concatMetrics - -def PreprocessingPred(): - dicKNN = allParametersPerformancePerModel[3] - dicLR = allParametersPerformancePerModel[7] - - dfKNN = pd.DataFrame.from_dict(dicKNN) - dfLR = pd.DataFrame.from_dict(dicLR) - - df_concatProbs = pd.concat([dfKNN, dfLR]) - df_concatProbs.reset_index(drop=True, inplace=True) - - predictionsKNN = [] - for column, content in dfKNN.items(): - el = [sum(x)/len(x) for x in zip(*content)] - predictionsKNN.append(el) - - predictionsLR = [] - for column, content in dfLR.items(): - el = [sum(x)/len(x) for x in zip(*content)] - predictionsLR.append(el) - - predictions = [] - for column, content in df_concatProbs.items(): - el = [sum(x)/len(x) for x in zip(*content)] - predictions.append(el) - - return [predictionsKNN, predictionsLR, predictions] - -def PreprocessingParam(): - dicKNN = allParametersPerformancePerModel[1] - dicLR = allParametersPerformancePerModel[5] - - dicKNN = dicKNN['params'] - dicLR = dicLR['params'] - - dicKNN = {int(k):v for k,v in dicKNN.items()} - dicLR = {int(k):v for k,v in dicLR.items()} - - dfKNN = pd.DataFrame.from_dict(dicKNN) - dfLR = pd.DataFrame.from_dict(dicLR) - - dfKNN = dfKNN.T - dfLR = dfLR.T - - df_params = pd.concat([dfKNN, dfLR]) - return df_params - -def PreprocessingParamSep(): - dicKNN = allParametersPerformancePerModel[1] - dicLR = allParametersPerformancePerModel[5] - - dicKNN = dicKNN['params'] - dicLR = dicLR['params'] - - dicKNN = {int(k):v for k,v in dicKNN.items()} - dicLR = {int(k):v for k,v in dicLR.items()} - - dfKNN = pd.DataFrame.from_dict(dicKNN) - dfLR = pd.DataFrame.from_dict(dicLR) - - dfKNN = dfKNN.T - dfLR = dfLR.T - - return [dfKNN, dfLR] - -# remove that maybe! -def preProcsumPerMetric(factors): - sumPerClassifier = [] - loopThroughMetrics = PreprocessingMetrics() - loopThroughMetrics = loopThroughMetrics.fillna(0) - loopThroughMetrics.loc[:, 'log_loss'] = 1 - loopThroughMetrics.loc[:, 'log_loss'] - for row in loopThroughMetrics.iterrows(): - rowSum = 0 - name, values = row - for loop, elements in enumerate(values): - rowSum = elements*factors[loop] + rowSum - if sum(factors) is 0: - sumPerClassifier = 0 - else: - sumPerClassifier.append(rowSum/sum(factors) * 100) - return sumPerClassifier - -def preProcMetricsAllAndSel(): - loopThroughMetrics = PreprocessingMetrics() - loopThroughMetrics = loopThroughMetrics.fillna(0) - global factors - metricsPerModelColl = [] - metricsPerModelColl.append(loopThroughMetrics['mean_test_accuracy']) - metricsPerModelColl.append(loopThroughMetrics['geometric_mean_score_weighted']) - metricsPerModelColl.append(loopThroughMetrics['mean_test_precision_weighted']) - metricsPerModelColl.append(loopThroughMetrics['mean_test_recall_weighted']) - metricsPerModelColl.append(loopThroughMetrics['mean_test_f1_weighted']) - metricsPerModelColl.append(loopThroughMetrics['matthews_corrcoef']) - metricsPerModelColl.append(loopThroughMetrics['mean_test_roc_auc_ovo_weighted']) - metricsPerModelColl.append(loopThroughMetrics['log_loss']) - - f=lambda a: (abs(a)+a)/2 - for index, metric in enumerate(metricsPerModelColl): - if (index == 5): - metricsPerModelColl[index] = ((f(metric))*factors[index]) * 100 - elif (index == 7): - metricsPerModelColl[index] = ((1 - metric)*factors[index] ) * 100 - else: - metricsPerModelColl[index] = (metric*factors[index]) * 100 - metricsPerModelColl[index] = metricsPerModelColl[index].to_json() - return metricsPerModelColl - -def FunMDS (data): - mds = MDS(n_components=2, random_state=RANDOM_SEED) - XTransformed = mds.fit_transform(data).T - XTransformed = XTransformed.tolist() - return XTransformed - -def FunTsne (data): - tsne = TSNE(n_components=2, random_state=RANDOM_SEED).fit_transform(data) - tsne.shape - return tsne - -def FunUMAP (data): - trans = umap.UMAP(n_neighbors=15, random_state=RANDOM_SEED).fit(data) - Xpos = trans.embedding_[:, 0].tolist() - Ypos = trans.embedding_[:, 1].tolist() - return [Xpos,Ypos] - -# Sending the overview classifiers' results to be visualized as a scatterplot -@app.route('/data/PlotClassifiers', methods=["GET", "POST"]) -def SendToPlot(): - while (len(DataResultsRaw) != DataRawLength): - pass - InitializeEnsemble() - response = { - 'OverviewResults': Results - } - return jsonify(response) - -def InitializeEnsemble(): - XModels = PreprocessingMetrics() - global ModelSpaceMDS - global ModelSpaceTSNE - global allParametersPerformancePerModel - - XModels = XModels.fillna(0) - - ModelSpaceMDS = FunMDS(XModels) - ModelSpaceTSNE = FunTsne(XModels) - ModelSpaceTSNE = ModelSpaceTSNE.tolist() - ModelSpaceUMAP = FunUMAP(XModels) - - PredictionProbSel = PreprocessingPred() - - returnResults(ModelSpaceMDS,ModelSpaceTSNE,ModelSpaceUMAP,PredictionProbSel) - -def returnResults(ModelSpaceMDS,ModelSpaceTSNE,ModelSpaceUMAP,PredictionProbSel): - - global Results - global AllTargets - Results = [] - - parametersGen = PreprocessingParam() - metricsPerModel = preProcMetricsAllAndSel() - sumPerClassifier = preProcsumPerMetric(factors) - ModelsIDs = PreprocessingIDs() - - - parametersGenPD = parametersGen.to_json(orient='records') - XDataJSONEntireSet = XData.to_json(orient='records') - XDataColumns = XData.columns.tolist() - - Results.append(json.dumps(ModelsIDs)) - Results.append(json.dumps(sumPerClassifier)) - Results.append(json.dumps(parametersGenPD)) - Results.append(json.dumps(metricsPerModel)) - Results.append(json.dumps(XDataJSONEntireSet)) - Results.append(json.dumps(XDataColumns)) - Results.append(json.dumps(yData)) - Results.append(json.dumps(target_names)) - Results.append(json.dumps(AllTargets)) - Results.append(json.dumps(ModelSpaceMDS)) - Results.append(json.dumps(ModelSpaceTSNE)) - Results.append(json.dumps(ModelSpaceUMAP)) - Results.append(json.dumps(PredictionProbSel)) - - return Results - -# Initialize crossover and mutation processes -@cross_origin(origin='localhost',headers=['Content-Type','Authorization']) -@app.route('/data/CrossoverMutation', methods=["GET", "POST"]) -def CrossoverMutateFun(): - - # get the models from the frontend - RemainingIds = request.get_data().decode('utf8').replace("'", '"') - RemainingIds = json.loads(RemainingIds) - - RemainingIds = RemainingIds['RemainingPoints'] - - global XData - global yData - global LRModelsCount - - # loop through the algorithms - global allParametersPerfCrossMutr - global HistoryPreservation - global allParametersPerformancePerModel - - KNNIDs = list(filter(lambda k: 'KNN' in k, RemainingIds)) - LRIDs = list(filter(lambda k: 'LR' in k, RemainingIds)) - - countKNN = 0 - countLR = 0 - setMaxLoopValue = 50 - paramAllAlgs = PreprocessingParam() - KNNIntIndex = [] - LRIntIndex = [] - - localCrossMutr = [] - allParametersPerfCrossMutrKNNC = [] - - while countKNN < setMaxLoopValue: - for dr in KNNIDs: - KNNIntIndex.append(int(re.findall('\d+', dr)[0])) - KNNPickPair = random.sample(KNNIntIndex,2) - - pairDF = paramAllAlgs.iloc[KNNPickPair] - crossoverDF = pd.DataFrame() - for column in pairDF: - listData = [] - randomZeroOne = random.randint(0, 1) - valuePerColumn = pairDF[column].iloc[randomZeroOne] - listData.append(valuePerColumn) - crossoverDF[column] = listData - if (((paramAllAlgs['algorithm'] == crossoverDF['algorithm'].iloc[0]) & (paramAllAlgs['metric'] == crossoverDF['metric'].iloc[0]) & (paramAllAlgs['n_neighbors'] == crossoverDF['n_neighbors'].iloc[0]) & (paramAllAlgs['weights'] == crossoverDF['weights'].iloc[0])).any()): - crossoverDF = pd.DataFrame() - 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 = 200 + countKNN - localCrossMutr = crossoverMutation(XData, yData, clf, params, 'KNN', AlgorithmsIDsEnd) - countKNN += 1 - crossoverDF = pd.DataFrame() - - for loop in range(setMaxLoopValue - 1): - localCrossMutr[0] = localCrossMutr[0] + localCrossMutr[(loop+1)*4] - localCrossMutr[1] = pd.concat([localCrossMutr[1], localCrossMutr[(loop+1)*4+1]], ignore_index=True) - localCrossMutr[2] = pd.concat([localCrossMutr[2], localCrossMutr[(loop+1)*4+2]], ignore_index=True) - localCrossMutr[3] = pd.concat([localCrossMutr[3], localCrossMutr[(loop+1)*4+3]], ignore_index=True) - - allParametersPerfCrossMutrKNNC.append(localCrossMutr[0]) - allParametersPerfCrossMutrKNNC.append(localCrossMutr[1]) - allParametersPerfCrossMutrKNNC.append(localCrossMutr[2]) - allParametersPerfCrossMutrKNNC.append(localCrossMutr[3]) - - HistoryPreservation = HistoryPreservation + allParametersPerfCrossMutrKNNC - - countKNN = 0 - KNNIntIndex = [] - localCrossMutr.clear() - allParametersPerfCrossMutrKNNM = [] - - while countKNN < setMaxLoopValue: - for dr in KNNIDs: - KNNIntIndex.append(int(re.findall('\d+', dr)[0])) - KNNPickPair = random.sample(KNNIntIndex,1) - - pairDF = paramAllAlgs.iloc[KNNPickPair] - crossoverDF = pd.DataFrame() - for column in pairDF: - listData = [] - if (column == 'n_neighbors'): - randomNumber = random.randint(101, math.floor(((len(yData)/crossValidation)*(crossValidation-1)))-1) - listData.append(randomNumber) - crossoverDF[column] = listData - else: - valuePerColumn = pairDF[column].iloc[0] - listData.append(valuePerColumn) - crossoverDF[column] = listData - if (((paramAllAlgs['algorithm'] == crossoverDF['algorithm'].iloc[0]) & (paramAllAlgs['metric'] == crossoverDF['metric'].iloc[0]) & (paramAllAlgs['n_neighbors'] == crossoverDF['n_neighbors'].iloc[0]) & (paramAllAlgs['weights'] == crossoverDF['weights'].iloc[0])).any()): - crossoverDF = pd.DataFrame() - 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 - localCrossMutr = crossoverMutation(XData, yData, clf, params, 'KNN', AlgorithmsIDsEnd) - countKNN += 1 - crossoverDF = pd.DataFrame() - - for loop in range(setMaxLoopValue - 1): - localCrossMutr[0] = localCrossMutr[0] + localCrossMutr[(loop+1)*4] - localCrossMutr[1] = pd.concat([localCrossMutr[1], localCrossMutr[(loop+1)*4+1]], ignore_index=True) - localCrossMutr[2] = pd.concat([localCrossMutr[2], localCrossMutr[(loop+1)*4+2]], ignore_index=True) - localCrossMutr[3] = pd.concat([localCrossMutr[3], localCrossMutr[(loop+1)*4+3]], ignore_index=True) - - allParametersPerfCrossMutrKNNM.append(localCrossMutr[0]) - allParametersPerfCrossMutrKNNM.append(localCrossMutr[1]) - allParametersPerfCrossMutrKNNM.append(localCrossMutr[2]) - allParametersPerfCrossMutrKNNM.append(localCrossMutr[3]) - - HistoryPreservation = HistoryPreservation + allParametersPerfCrossMutrKNNM - - localCrossMutr.clear() - allParametersPerfCrossMutrLRC = [] - - while countLR < setMaxLoopValue: - for dr in LRIDs: - LRIntIndex.append(int(re.findall('\d+', dr)[0])) - LRPickPair = random.sample(LRIntIndex,2) - - pairDF = paramAllAlgs.iloc[LRPickPair] - crossoverDF = pd.DataFrame() - for column in pairDF: - listData = [] - randomZeroOne = random.randint(0, 1) - valuePerColumn = pairDF[column].iloc[randomZeroOne] - listData.append(valuePerColumn) - crossoverDF[column] = listData - if (((paramAllAlgs['C'] == crossoverDF['C'].iloc[0]) & (paramAllAlgs['max_iter'] == crossoverDF['max_iter'].iloc[0]) & (paramAllAlgs['solver'] == crossoverDF['solver'].iloc[0]) & (paramAllAlgs['penalty'] == crossoverDF['penalty'].iloc[0])).any()): - crossoverDF = pd.DataFrame() - 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 - localCrossMutr = crossoverMutation(XData, yData, clf, params, 'LR', AlgorithmsIDsEnd) - countLR += 1 - crossoverDF = pd.DataFrame() - - for loop in range(setMaxLoopValue - 1): - localCrossMutr[0] = localCrossMutr[0] + localCrossMutr[(loop+1)*4] - localCrossMutr[1] = pd.concat([localCrossMutr[1], localCrossMutr[(loop+1)*4+1]], ignore_index=True) - localCrossMutr[2] = pd.concat([localCrossMutr[2], localCrossMutr[(loop+1)*4+2]], ignore_index=True) - localCrossMutr[3] = pd.concat([localCrossMutr[3], localCrossMutr[(loop+1)*4+3]], ignore_index=True) - - allParametersPerfCrossMutrLRC.append(localCrossMutr[0]) - allParametersPerfCrossMutrLRC.append(localCrossMutr[1]) - allParametersPerfCrossMutrLRC.append(localCrossMutr[2]) - allParametersPerfCrossMutrLRC.append(localCrossMutr[3]) - - HistoryPreservation = HistoryPreservation + allParametersPerfCrossMutrLRC - - countLR = 0 - LRIntIndex = [] - localCrossMutr.clear() - allParametersPerfCrossMutrLRM = [] - - while countLR < setMaxLoopValue: - for dr in LRIDs: - LRIntIndex.append(int(re.findall('\d+', dr)[0])) - LRPickPair = random.sample(LRIntIndex,1) - - pairDF = paramAllAlgs.iloc[LRPickPair] - crossoverDF = pd.DataFrame() - for column in pairDF: - listData = [] - if (column == 'C'): - randomNumber = random.randint(101, 1000) - listData.append(randomNumber) - crossoverDF[column] = listData - else: - valuePerColumn = pairDF[column].iloc[0] - listData.append(valuePerColumn) - crossoverDF[column] = listData - if (((paramAllAlgs['C'] == crossoverDF['C'].iloc[0]) & (paramAllAlgs['max_iter'] == crossoverDF['max_iter'].iloc[0]) & (paramAllAlgs['solver'] == crossoverDF['solver'].iloc[0]) & (paramAllAlgs['penalty'] == crossoverDF['penalty'].iloc[0])).any()): - crossoverDF = pd.DataFrame() - 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 - localCrossMutr = crossoverMutation(XData, yData, clf, params, 'LR', AlgorithmsIDsEnd) - countLR += 1 - crossoverDF = pd.DataFrame() - - for loop in range(setMaxLoopValue - 1): - localCrossMutr[0] = localCrossMutr[0] + localCrossMutr[(loop+1)*4] - localCrossMutr[1] = pd.concat([localCrossMutr[1], localCrossMutr[(loop+1)*4+1]], ignore_index=True) - localCrossMutr[2] = pd.concat([localCrossMutr[2], localCrossMutr[(loop+1)*4+2]], ignore_index=True) - localCrossMutr[3] = pd.concat([localCrossMutr[3], localCrossMutr[(loop+1)*4+3]], ignore_index=True) - - allParametersPerfCrossMutrLRM.append(localCrossMutr[0]) - allParametersPerfCrossMutrLRM.append(localCrossMutr[1]) - allParametersPerfCrossMutrLRM.append(localCrossMutr[2]) - allParametersPerfCrossMutrLRM.append(localCrossMutr[3]) - - HistoryPreservation = HistoryPreservation + allParametersPerfCrossMutrLRM - - allParametersPerfCrossMutr = allParametersPerfCrossMutrKNNC + allParametersPerfCrossMutrKNNM + allParametersPerfCrossMutrLRC + allParametersPerfCrossMutrLRM - - 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) - - return 'Everything Okay' - -def crossoverMutation(XData, yData, clf, params, eachAlgor, AlgorithmsIDsEnd): - - search = GridSearchCV( - estimator=clf, param_grid=params, cv=crossValidation, refit='accuracy', - scoring=scoring, verbose=0, n_jobs=-1) - - # fit and extract the probabilities - search.fit(XData, yData) - - # process the results - cv_results = [] - cv_results.append(search.cv_results_) - df_cv_results = pd.DataFrame.from_dict(cv_results) - - # number of models stored - number_of_models = len(df_cv_results.iloc[0][0]) - - # initialize results per row - df_cv_results_per_row = [] - - # loop through number of models - modelsIDs = [] - for i in range(number_of_models): - number = AlgorithmsIDsEnd+i - modelsIDs.append(eachAlgor+str(number)) - # initialize results per item - df_cv_results_per_item = [] - for column in df_cv_results.iloc[0]: - df_cv_results_per_item.append(column[i]) - df_cv_results_per_row.append(df_cv_results_per_item) - - # store the results into a pandas dataframe - df_cv_results_classifiers = pd.DataFrame(data = df_cv_results_per_row, columns= df_cv_results.columns) - - # copy and filter in order to get only the metrics - metrics = df_cv_results_classifiers.copy() - metrics = metrics.filter(['mean_test_accuracy','mean_test_precision_weighted','mean_test_recall_weighted','mean_test_f1_weighted','mean_test_roc_auc_ovo_weighted']) - - # concat parameters and performance - parametersPerformancePerModel = pd.DataFrame(df_cv_results_classifiers['params']) - parametersLocal = parametersPerformancePerModel['params'].copy() - - Models = [] - for index, items in enumerate(parametersLocal): - Models.append(index) - - parametersLocalNew = [ parametersLocal[your_key] for your_key in Models ] - - perModelProb = [] - - resultsWeighted = [] - resultsCorrCoef = [] - resultsLogLoss = [] - resultsLogLossFinal = [] - - # influence calculation for all the instances - inputs = range(len(XData)) - num_cores = multiprocessing.cpu_count() - - for eachModelParameters in parametersLocalNew: - clf.set_params(**eachModelParameters) - clf.fit(XData, yData) - yPredict = clf.predict(XData) - yPredict = np.nan_to_num(yPredict) - yPredictProb = cross_val_predict(clf, XData, yData, cv=crossValidation, method='predict_proba') - yPredictProb = np.nan_to_num(yPredictProb) - perModelProb.append(yPredictProb.tolist()) - - resultsWeighted.append(geometric_mean_score(yData, yPredict, average='weighted')) - resultsCorrCoef.append(matthews_corrcoef(yData, yPredict)) - resultsLogLoss.append(log_loss(yData, yPredictProb, normalize=True)) - - maxLog = max(resultsLogLoss) - minLog = min(resultsLogLoss) - for each in resultsLogLoss: - resultsLogLossFinal.append((each-minLog)/(maxLog-minLog)) - - metrics.insert(5,'geometric_mean_score_weighted',resultsWeighted) - metrics.insert(6,'matthews_corrcoef',resultsCorrCoef) - metrics.insert(7,'log_loss',resultsLogLossFinal) - - perModelProbPandas = pd.DataFrame(perModelProb) - - results.append(modelsIDs) - results.append(parametersPerformancePerModel) - results.append(metrics) - results.append(perModelProbPandas) - - return results - -def PreprocessingIDsCM(): - dicKNNC = allParametersPerfCrossMutr[0] - dicKNNM = allParametersPerfCrossMutr[4] - dicLRC = allParametersPerfCrossMutr[8] - dicLRM = allParametersPerfCrossMutr[12] - - df_concatIDs = dicKNNC + dicKNNM + dicLRC + dicLRM - - return df_concatIDs - -def PreprocessingMetricsCM(): - dicKNNC = allParametersPerfCrossMutr[2] - dicKNNM = allParametersPerfCrossMutr[6] - dicLRC = allParametersPerfCrossMutr[10] - dicLRM = allParametersPerfCrossMutr[14] - - dfKNNC = pd.DataFrame.from_dict(dicKNNC) - dfKNNM = pd.DataFrame.from_dict(dicKNNM) - dfLRC = pd.DataFrame.from_dict(dicLRC) - dfLRM = pd.DataFrame.from_dict(dicLRM) - - df_concatMetrics = pd.concat([dfKNNC, dfKNNM, dfLRC, dfLRM]) - df_concatMetrics = df_concatMetrics.reset_index(drop=True) - return df_concatMetrics - -def PreprocessingPredCM(): - dicKNNC = allParametersPerfCrossMutr[3] - dicKNNM = allParametersPerfCrossMutr[7] - dicLRC = allParametersPerfCrossMutr[11] - dicLRM = allParametersPerfCrossMutr[15] - - dfKNNC = pd.DataFrame.from_dict(dicKNNC) - dfKNNM = pd.DataFrame.from_dict(dicKNNM) - dfLRC = pd.DataFrame.from_dict(dicLRC) - dfLRM = pd.DataFrame.from_dict(dicLRM) - - df_concatProbs = pd.concat([dfKNNC, dfKNNM, dfLRC, dfLRM]) - predictions = [] - for column, content in df_concatProbs.items(): - el = [sum(x)/len(x) for x in zip(*content)] - predictions.append(el) - - return predictions - -def PreprocessingParamCM(): - dicKNNC = allParametersPerfCrossMutr[1] - dicKNNM = allParametersPerfCrossMutr[5] - dicLRC = allParametersPerfCrossMutr[9] - dicLRM = allParametersPerfCrossMutr[13] - - dicKNNC = dicKNNC['params'] - dicKNNM = dicKNNM['params'] - dicLRC = dicLRC['params'] - dicLRM = dicLRM['params'] - - dicKNNC = {int(k):v for k,v in dicKNNC.items()} - dicKNNM = {int(k):v for k,v in dicKNNM.items()} - dicLRC = {int(k):v for k,v in dicLRC.items()} - dicLRM = {int(k):v for k,v in dicLRM.items()} - - dfKNNC = pd.DataFrame.from_dict(dicKNNC) - dfKNNM = pd.DataFrame.from_dict(dicKNNM) - dfLRC = pd.DataFrame.from_dict(dicLRC) - dfLRM = pd.DataFrame.from_dict(dicLRM) - - dfKNNC = dfKNNC.T - dfKNNM = dfKNNM.T - dfLRC = dfLRC.T - dfLRM = dfLRM.T - - df_params = pd.concat([dfKNNC, dfKNNM, dfLRC, dfLRM]) - return df_params - -def PreprocessingParamSepCM(): - dicKNNC = allParametersPerfCrossMutr[1] - dicKNNM = allParametersPerfCrossMutr[5] - dicLRC = allParametersPerfCrossMutr[9] - dicLRM = allParametersPerfCrossMutr[13] - - dicKNNC = dicKNNC['params'] - dicKNNM = dicKNNM['params'] - dicLRC = dicLRC['params'] - dicLRM = dicLRM['params'] - - dicKNNC = {int(k):v for k,v in dicKNNC.items()} - dicKNNM = {int(k):v for k,v in dicKNNM.items()} - dicLRC = {int(k):v for k,v in dicLRC.items()} - dicLRM = {int(k):v for k,v in dicLRM.items()} - - dfKNNC = pd.DataFrame.from_dict(dicKNNC) - dfKNNM = pd.DataFrame.from_dict(dicKNNM) - dfLRC = pd.DataFrame.from_dict(dicLRC) - dfLRM = pd.DataFrame.from_dict(dicLRM) - - dfKNNC = dfKNNC.T - dfKNNM = dfKNNM.T - dfLRC = dfLRC.T - dfLRM = dfLRM.T - - return [dfKNNC, dfKNNM, dfLRC, dfLRM] - -# remove that maybe! -def preProcsumPerMetricCM(factors): - sumPerClassifier = [] - loopThroughMetrics = PreprocessingMetricsCM() - loopThroughMetrics = loopThroughMetrics.fillna(0) - loopThroughMetrics.loc[:, 'log_loss'] = 1 - loopThroughMetrics.loc[:, 'log_loss'] - for row in loopThroughMetrics.iterrows(): - rowSum = 0 - name, values = row - for loop, elements in enumerate(values): - rowSum = elements*factors[loop] + rowSum - if sum(factors) is 0: - sumPerClassifier = 0 - else: - sumPerClassifier.append(rowSum/sum(factors) * 100) - return sumPerClassifier - -def preProcMetricsAllAndSelCM(): - loopThroughMetrics = PreprocessingMetricsCM() - loopThroughMetrics = loopThroughMetrics.fillna(0) - global factors - metricsPerModelColl = [] - metricsPerModelColl.append(loopThroughMetrics['mean_test_accuracy']) - metricsPerModelColl.append(loopThroughMetrics['geometric_mean_score_weighted']) - metricsPerModelColl.append(loopThroughMetrics['mean_test_precision_weighted']) - metricsPerModelColl.append(loopThroughMetrics['mean_test_recall_weighted']) - metricsPerModelColl.append(loopThroughMetrics['mean_test_f1_weighted']) - metricsPerModelColl.append(loopThroughMetrics['matthews_corrcoef']) - metricsPerModelColl.append(loopThroughMetrics['mean_test_roc_auc_ovo_weighted']) - metricsPerModelColl.append(loopThroughMetrics['log_loss']) - - f=lambda a: (abs(a)+a)/2 - for index, metric in enumerate(metricsPerModelColl): - if (index == 5): - metricsPerModelColl[index] = ((f(metric))*factors[index]) * 100 - elif (index == 7): - metricsPerModelColl[index] = ((1 - metric)*factors[index] ) * 100 - else: - metricsPerModelColl[index] = (metric*factors[index]) * 100 - metricsPerModelColl[index] = metricsPerModelColl[index].to_json() - return metricsPerModelColl - -# Sending the overview classifiers' results to be visualized as a scatterplot -@app.route('/data/PlotCrossMutate', methods=["GET", "POST"]) -def SendToPlotCM(): - while (len(DataResultsRaw) != DataRawLength): - pass - PreProcessingInitial() - response = { - 'OverviewResultsCM': ResultsCM - } - return jsonify(response) - -def PreProcessingInitial(): - XModels = PreprocessingMetricsCM() - global allParametersPerfCrossMutr - - XModels = XModels.fillna(0) - - ModelSpaceMDSCM = FunMDS(XModels) - ModelSpaceTSNECM = FunTsne(XModels) - ModelSpaceTSNECM = ModelSpaceTSNECM.tolist() - ModelSpaceUMAPCM = FunUMAP(XModels) - - PredictionProbSel = PreprocessingPredCM() - - CrossMutateResults(ModelSpaceMDSCM,ModelSpaceTSNECM,ModelSpaceUMAPCM,PredictionProbSel) - -def CrossMutateResults(ModelSpaceMDSCM,ModelSpaceTSNECM,ModelSpaceUMAPCM,PredictionProbSel): - - global ResultsCM - global AllTargets - ResultsCM = [] - - parametersGen = PreprocessingParamCM() - metricsPerModel = preProcMetricsAllAndSelCM() - sumPerClassifier = preProcsumPerMetricCM(factors) - ModelsIDs = PreprocessingIDsCM() - - - parametersGenPD = parametersGen.to_json(orient='records') - XDataJSONEntireSet = XData.to_json(orient='records') - XDataColumns = XData.columns.tolist() - - ResultsCM.append(json.dumps(ModelsIDs)) - ResultsCM.append(json.dumps(sumPerClassifier)) - ResultsCM.append(json.dumps(parametersGenPD)) - ResultsCM.append(json.dumps(metricsPerModel)) - ResultsCM.append(json.dumps(XDataJSONEntireSet)) - ResultsCM.append(json.dumps(XDataColumns)) - ResultsCM.append(json.dumps(yData)) - ResultsCM.append(json.dumps(target_names)) - ResultsCM.append(json.dumps(AllTargets)) - ResultsCM.append(json.dumps(ModelSpaceMDSCM)) - ResultsCM.append(json.dumps(ModelSpaceTSNECM)) - ResultsCM.append(json.dumps(ModelSpaceUMAPCM)) - ResultsCM.append(json.dumps(PredictionProbSel)) - - return Results - -def PreprocessingPredSel(SelectedIDs): - - numberIDKNN = [] - numberIDLR = [] - for el in SelectedIDs: - match = re.match(r"([a-z]+)([0-9]+)", el, re.I) - if match: - items = match.groups() - if (items[0] == 'KNN'): - numberIDKNN.append(int(items[1])) - else: - numberIDLR.append(int(items[1]) - 100) - - dicKNN = allParametersPerformancePerModel[3] - dicLR = allParametersPerformancePerModel[7] - - dfKNN = pd.DataFrame.from_dict(dicKNN) - dfKNN = dfKNN.loc[numberIDKNN] - dfLR = pd.DataFrame.from_dict(dicLR) - dfLR = dfLR.loc[numberIDLR] - dfLR.index += 100 - df_concatProbs = pd.concat([dfKNN, dfLR]) - - predictionsKNN = [] - for column, content in dfKNN.items(): - el = [sum(x)/len(x) for x in zip(*content)] - predictionsKNN.append(el) - - predictionsLR = [] - for column, content in dfLR.items(): - el = [sum(x)/len(x) for x in zip(*content)] - predictionsLR.append(el) - predictions = [] - for column, content in df_concatProbs.items(): - el = [sum(x)/len(x) for x in zip(*content)] - predictions.append(el) - - return [predictionsKNN, predictionsLR, predictions] - -@cross_origin(origin='localhost',headers=['Content-Type','Authorization']) -@app.route('/data/SendtoSeverSelIDs', methods=["GET", "POST"]) -def RetrieveSelIDsPredict(): - global ResultsSelPred - ResultsSelPred = [] - RetrieveIDsSelection = request.get_data().decode('utf8').replace("'", '"') - RetrieveIDsSelection = json.loads(RetrieveIDsSelection) - RetrieveIDsSelection = RetrieveIDsSelection['predictSelectionIDs'] - ResultsSelPred = PreprocessingPredSel(RetrieveIDsSelection) - - return 'Everything Okay' - -@app.route('/data/RetrievePredictions', methods=["GET", "POST"]) -def SendPredictSel(): - global ResultsSelPred - response = { - 'PredictSel': ResultsSelPred - } - return jsonify(response) \ No newline at end of file + return 'Everything Okay' \ No newline at end of file