diff --git a/__pycache__/run.cpython-37.pyc b/__pycache__/run.cpython-37.pyc
index af482ba..2e50a1d 100644
Binary files a/__pycache__/run.cpython-37.pyc and b/__pycache__/run.cpython-37.pyc differ
diff --git a/frontend/src/components/Ensemble.vue b/frontend/src/components/Ensemble.vue
index 830989b..1012603 100644
--- a/frontend/src/components/Ensemble.vue
+++ b/frontend/src/components/Ensemble.vue
@@ -287,25 +287,25 @@ export default {
var allModels = JSON.parse(this.ScatterPlotResults[0])
OverviewPlotly.on('plotly_selected', function (evt) {
if (typeof evt !== 'undefined') {
- var pushModelsRemainingTemp = []
- const ClassifierIDsList = []
+ var pushModelsRemainingTempCM = []
+ const ClassifierIDsListCM = []
for (let i = 0; evt.points.length; i++) {
if (evt.points[i] === undefined) {
break
} else {
const OnlyId = evt.points[i].text.split(' ')[2]
const OnlyIdCleared = OnlyId.split('
')
- ClassifierIDsList.push(OnlyIdCleared[0])
+ ClassifierIDsListCM.push(OnlyIdCleared[0])
}
}
for (let i = 0; i < allModels.length; i++) {
- if (ClassifierIDsList.indexOf((allModels[i])) < 0) {
- pushModelsRemainingTemp.push(allModels[i])
+ if (ClassifierIDsListCM.indexOf((allModels[i])) < 0) {
+ pushModelsRemainingTempCM.push(allModels[i])
}
}
- EventBus.$emit('RemainingPointsCM', pushModelsRemainingTemp)
- EventBus.$emit('SendSelectedPointsUpdateIndicatorCM', ClassifierIDsList)
- EventBus.$emit('SendSelectedPointsToServerEventCM', ClassifierIDsList)
+ EventBus.$emit('RemainingPointsCM', pushModelsRemainingTempCM)
+ EventBus.$emit('SendSelectedPointsUpdateIndicatorCM', ClassifierIDsListCM)
+ EventBus.$emit('SendSelectedPointsToServerEventCM', ClassifierIDsListCM)
}
})
},
diff --git a/frontend/src/components/Main.vue b/frontend/src/components/Main.vue
index 1bce59b..70c9018 100755
--- a/frontend/src/components/Main.vue
+++ b/frontend/src/components/Main.vue
@@ -144,7 +144,7 @@
- Hyper-Parameters Predictions
+ Hyper-Parameters' Predictions
@@ -155,7 +155,7 @@
- Majority-Voting Ensemble Predictions
+ Majority-Voting Ensemble's Predictions
@@ -217,8 +217,10 @@ export default Vue.extend({
data () {
return {
storeEnsemble: [],
+ PredictSelEnsem: [],
firstTimeExec: true,
unselectedRemainingPoints: [],
+ unselectedRemainingPointsEnsem: [],
Collection: 0,
OverviewResults: 0,
preDataResults: '',
@@ -321,6 +323,8 @@ export default Vue.extend({
EventBus.$emit('emittedEventCallingGridSelection', this.OverviewResults)
this.firstTimeExec = false
} else {
+ this.PredictSelEnsem = []
+ EventBus.$emit('SendSelectedPointsToServerEventCM', this.PredictSelEnsem)
EventBus.$emit('emittedEventCallingCrossoverMutation', this.OverviewResults)
EventBus.$emit('emittedEventCallingGridCrossoverMutation', this.OverviewResults)
EventBus.$emit('emittedEventCallingGridSelectionCrossoverMutation', this.OverviewResults)
@@ -346,6 +350,8 @@ export default Vue.extend({
.then(response => {
this.OverviewResultsCM = response.data.OverviewResultsCM
console.log('Server successfully sent all the data related to visualizations!')
+ this.PredictSel = []
+ EventBus.$emit('SendSelectedPointsToServerEvent', this.PredictSel)
EventBus.$emit('emittedEventCallingScatterPlot', this.OverviewResultsCM)
EventBus.$emit('emittedEventCallingGrid', this.OverviewResultsCM)
EventBus.$emit('emittedEventCallingGridSelection', this.OverviewResultsCM)
@@ -423,8 +429,52 @@ export default Vue.extend({
console.log(error)
})
},
+ SendSelectedIDsEnsemble () {
+ const path = `http://127.0.0.1:5000/data/SendtoSeverSelIDsEnsem`
+ const postData = {
+ predictSelectionIDsCM: this.ClassifierIDsListCM
+ }
+ 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.retrievePredictionsSelEnsemble()
+ })
+ .catch(error => {
+ console.log(error)
+ })
+ },
+ retrievePredictionsSelEnsemble () {
+ const path = `http://localhost:5000/data/RetrievePredictionsEnsem`
+
+ 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.PredictSelEnsem = response.data.PredictSelEnsem
+ console.log('Server successfully sent the predictions!')
+ EventBus.$emit('SendSelectedPointsToServerEventCM', this.PredictSelEnsem)
+ })
+ .catch(error => {
+ console.log(error)
+ })
+ },
SelectedPointsCM () {
this.OverSelLengthCM = this.ClassifierIDsListCM.length
+ this.SendSelectedIDsEnsemble()
},
SendSelectedPointsToServer () {
if (this.ClassifierIDsList === ''){
@@ -818,9 +868,12 @@ export default Vue.extend({
const path = `http://127.0.0.1:5000/data/CrossoverMutation`
EventBus.$emit('SendStoredEnsemble', this.storeEnsemble)
+
+ var mergedStoreEnsembleLoc = [].concat.apply([], this.storeEnsemble)
const postData = {
- RemainingPoints: this.unselectedRemainingPoints
+ RemainingPoints: this.unselectedRemainingPoints,
+ StoreEnsemble: mergedStoreEnsembleLoc
}
const axiosConfig = {
headers: {
@@ -885,6 +938,8 @@ export default Vue.extend({
EventBus.$on('RemainingPoints', data => { this.unselectedRemainingPoints = data })
EventBus.$on('InitializeCrossoverMutation', this.sendPointsCrossMutat)
+ EventBus.$on('RemainingPointsCM', data => { this.unselectedRemainingPointsEnsem = data })
+
EventBus.$on('ChangeKey', data => { this.keyNow = data })
EventBus.$on('SendSelectedPointsUpdateIndicator', data => { this.ClassifierIDsList = data; this.storeEnsemble.push(this.ClassifierIDsList)})
EventBus.$on('SendSelectedPointsUpdateIndicator', this.SelectedPoints)
diff --git a/frontend/src/components/Predictions.vue b/frontend/src/components/Predictions.vue
index 885297b..97d0d13 100644
--- a/frontend/src/components/Predictions.vue
+++ b/frontend/src/components/Predictions.vue
@@ -61,8 +61,6 @@ export default {
var KNNPred = predictions[0]
var LRPred = predictions[1]
var PredAver = predictions[2]
- console.log(PredAver)
-
var dataAver = []
var dataAverGetResults = []
var dataKNN = []
@@ -125,7 +123,7 @@ export default {
}
var classStore = [].concat.apply([], classArray);
- console.log(classStore)
+
// === Set up canvas === //
var width = 1200,
diff --git a/run.py b/run.py
index b139c2c..1763c20 100644
--- a/run.py
+++ b/run.py
@@ -76,6 +76,9 @@ def reset():
global yData
yData = []
+ global EnsembleActive
+ EnsembleActive = []
+
global addKNN
addKNN = 0
@@ -205,6 +208,9 @@ def retrieveFileName():
global detailsParams
detailsParams = []
+
+ global EnsembleActive
+ EnsembleActive = []
global addKNN
addKNN = 0
@@ -652,6 +658,53 @@ def PreprocessingPred():
return [predictionsKNN, predictionsLR, predictions]
+def PreprocessingPredEnsemble():
+
+ global EnsembleActive
+
+ numberIDKNN = []
+ numberIDLR = []
+ for el in EnsembleActive:
+ 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]))
+
+ 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 = df_concatProbs.reset_index(drop=True)
+
+ dfKNN = df_concatProbs.loc[numberIDKNN]
+ dfLR = df_concatProbs.loc[numberIDLR]
+
+ df_concatProbs = pd.DataFrame()
+ df_concatProbs = df_concatProbs.iloc[0:0]
+ 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]
+
def PreprocessingParam():
dicKNN = allParametersPerformancePerModel[1]
dicLR = allParametersPerformancePerModel[5]
@@ -765,6 +818,7 @@ def InitializeEnsemble():
global ModelSpaceMDS
global ModelSpaceTSNE
global allParametersPerformancePerModel
+ global EnsembleActive
XModels = XModels.fillna(0)
@@ -773,7 +827,10 @@ def InitializeEnsemble():
ModelSpaceTSNE = ModelSpaceTSNE.tolist()
ModelSpaceUMAP = FunUMAP(XModels)
- PredictionProbSel = PreprocessingPred()
+ if (len(EnsembleActive) == 0):
+ PredictionProbSel = PreprocessingPred()
+ else:
+ PredictionProbSel = PreprocessingPredEnsemble()
returnResults(ModelSpaceMDS,ModelSpaceTSNE,ModelSpaceUMAP,PredictionProbSel)
@@ -820,6 +877,13 @@ def CrossoverMutateFun():
RemainingIds = RemainingIds['RemainingPoints']
+ global EnsembleActive
+
+ EnsembleActive = request.get_data().decode('utf8').replace("'", '"')
+ EnsembleActive = json.loads(EnsembleActive)
+
+ EnsembleActive = EnsembleActive['StoreEnsemble']
+
global XData
global yData
global LRModelsCount
@@ -1377,28 +1441,25 @@ def PreprocessingPredSel(SelectedIDs):
numberIDKNN = []
numberIDLR = []
- print(SelectedIDs)
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]) - addKNN)
+ numberIDKNN.append(int(items[1]) -addKNN)
else:
numberIDLR.append(int(items[1]) - addLR)
- print(numberIDKNN)
+
dicKNN = allParametersPerformancePerModel[3]
dicLR = allParametersPerformancePerModel[7]
dfKNN = pd.DataFrame.from_dict(dicKNN)
- print(dfKNN)
+
dfKNN = dfKNN.loc[numberIDKNN]
dfLR = pd.DataFrame.from_dict(dicLR)
dfLR = dfLR.loc[numberIDLR]
- print(dfLR)
dfLR.index += addKNN
df_concatProbs = pd.concat([dfKNN, dfLR])
- print(df_concatProbs)
predictionsKNN = []
for column, content in dfKNN.items():
@@ -1436,4 +1497,71 @@ def SendPredictSel():
response = {
'PredictSel': ResultsSelPred
}
+ return jsonify(response)
+
+def PreprocessingPredSelEnsem(SelectedIDsEnsem):
+
+ numberIDKNN = []
+ numberIDLR = []
+ for el in SelectedIDsEnsem:
+ 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]))
+
+ 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 = df_concatProbs.reset_index(drop=True)
+
+ dfKNN = df_concatProbs.loc[numberIDKNN]
+
+ dfLR = df_concatProbs.loc[numberIDLR]
+
+ df_concatProbs = pd.DataFrame()
+ df_concatProbs = df_concatProbs.iloc[0:0]
+ 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/SendtoSeverSelIDsEnsem', methods=["GET", "POST"])
+def RetrieveSelIDsPredictEnsem():
+ global ResultsSelPredEnsem
+ ResultsSelPredEnsem = []
+ RetrieveIDsSelectionEnsem = request.get_data().decode('utf8').replace("'", '"')
+ RetrieveIDsSelectionEnsem = json.loads(RetrieveIDsSelectionEnsem)
+ RetrieveIDsSelectionEnsem = RetrieveIDsSelectionEnsem['predictSelectionIDsCM']
+
+ ResultsSelPredEnsem = PreprocessingPredSelEnsem(RetrieveIDsSelectionEnsem)
+
+ return 'Everything Okay'
+
+@app.route('/data/RetrievePredictionsEnsem', methods=["GET", "POST"])
+def SendPredictSelEnsem():
+ global ResultsSelPredEnsem
+ response = {
+ 'PredictSelEnsem': ResultsSelPredEnsem
+ }
return jsonify(response)
\ No newline at end of file