diff --git a/__pycache__/run.cpython-37.pyc b/__pycache__/run.cpython-37.pyc
new file mode 100644
index 0000000..94f6612
Binary files /dev/null and b/__pycache__/run.cpython-37.pyc differ
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 0000000..76b1d12
Binary files /dev/null and b/cachedir/joblib/run/executeModel/72a755383fba437e4dead6ff3e3d81e3/output.pkl differ
diff --git a/cachedir/joblib/run/executeModel/func_code.py b/cachedir/joblib/run/executeModel/func_code.py
new file mode 100644
index 0000000..112f9a9
--- /dev/null
+++ b/cachedir/joblib/run/executeModel/func_code.py
@@ -0,0 +1,17 @@
+# first line: 457
+@memory.cache
+def executeModel():
+
+ create_global_function()
+ global estimator
+
+ params = {"C": (0.0001, 10000), "gamma": (0.0001, 10000)}
+ svc_bayesopt = BayesianOptimization(estimator, params)
+ svc_bayesopt.maximize(init_points=5, n_iter=20, acq='ucb')
+ bestParams = svc_bayesopt.max['params']
+ estimator = SVC(C=bestParams.get('C'), gamma=bestParams.get('gamma'), probability=True)
+ estimator.fit(XData, yData)
+ yPredict = estimator.predict(XData)
+ yPredictProb = cross_val_predict(estimator, XData, yData, cv=crossValidation, method='predict_proba')
+
+ return 'Everything Okay'
diff --git a/frontend/index.html b/frontend/index.html
index 8c3401b..e1d2f37 100755
--- a/frontend/index.html
+++ b/frontend/index.html
@@ -3,7 +3,7 @@
- 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 @@
-
-
-
-
-
-
HyperSearVis is a visual analytics tool created by Angelos Chatzimparmpas, member of the ISOVIS Group, Linnaeus University, Sweden.
-
-
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 @@
-
-
-
- Projection method:
- MDS
- t-SNE
- UMAP
-
-
- Action:
-
- {{ CrossoverMutateText }}
-
-
-
-
-
-
-
\ 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 @@
+
+
+ {{ dataset }}
+
+ Heart Disease
+ Iris
+ Upload New File
+
+
+
+ {{ searchText }}
+
+
+
+ {{ resetText }}
+
+
+
+
+
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 @@
+
+
+ {{ dataset }}
+
+ Heart Disease
+ Iris
+ Upload New File
+
+
+
+ {{ searchText }}
+
+
+
+ {{ resetText }}
+
+
+
+
+
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 @@
+
+
+ {{ dataset }}
+
+ Heart Disease
+ Iris
+ Upload New File
+
+
+
+ {{ searchText }}
+
+
+
+ {{ resetText }}
+
+
+
+
+
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 @@
+
+
+ {{ dataset }}
+
+ Heart Disease
+ Iris
+ Upload New File
+
+
+
+ {{ searchText }}
+
+
+
+ {{ resetText }}
+
+
+
+
+
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 @@
-
-
-
- Projection method:
- MDS
- t-SNE
- UMAP
-
-
- Action:
-
- {{ CrossoverMutateText }}
-
-
-
-
-
-
-
\ 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 @@
-
-
-
-
-
-
404 - Page Not Found
-
-
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 @@
-
-
-
-
-
-
-
- Balanced data set
- Imbalanced data set
-
-
- (M1) Accuracy:
-
-
-
-
- (M1*) G-mean:
-
-
-
-
-
-
- (M2) Precision:
-
-
-
-
- (M2*) ROC AUC:
-
-
-
-
-
-
- (M3) Recall:
-
-
-
-
- (M3*) Log loss:
-
-
-
-
-
-
- (M4) F1-score:
-
-
-
-
- (M4*) MCC:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ 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