From f476157f9c8e120830a82956572f045b94955e91 Mon Sep 17 00:00:00 2001 From: Angelos Chatzimparmpas Date: Sun, 24 Jan 2021 15:11:15 +0100 Subject: [PATCH] new --- __pycache__/run.cpython-38.pyc | Bin 38487 -> 38708 bytes .../src/components/FeatureSpaceDetail.vue | 33 ++- frontend/src/components/Heatmap.vue | 31 ++- frontend/src/components/Main.vue | 2 +- frontend/src/components/Results.vue | 26 ++- run.py | 209 +++++++++++------- 6 files changed, 202 insertions(+), 99 deletions(-) diff --git a/__pycache__/run.cpython-38.pyc b/__pycache__/run.cpython-38.pyc index 654eff3914c06355119e70f03c58c149bc6da07e..6780fee0aadc8e6b00feeabe85f15a8f0c4aa128 100644 GIT binary patch delta 12761 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 delta 12506 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 diff --git a/frontend/src/components/FeatureSpaceDetail.vue b/frontend/src/components/FeatureSpaceDetail.vue index 040fb3d..c799af2 100644 --- a/frontend/src/components/FeatureSpaceDetail.vue +++ b/frontend/src/components/FeatureSpaceDetail.vue @@ -62,6 +62,7 @@ export default { mode: 0, // this should be 0 KeepIDs: [], KeepIDTransform: [], + KeepNamesGlobal: [], keepNumberOfCompareNodes: 0, activeLeafNode: -1, spaceChangeDetail: false @@ -98,6 +99,7 @@ export default { setLayerExplore() { this.mode = 0 this.KeepIDs = [] + this.KeepNamesGlobal = [] this.KeepIDTransform = [] this.keepNumberOfCompareNodes = 0 //this.graphVizualization() @@ -822,7 +824,7 @@ export default { var legendCall = this.legendOnlyOnce - var listofNodes = this.dataFS[34] + var listofNodes = this.dataFS[33] var corrTarget = JSON.parse(this.dataFS[8+this.quadrantNumber]) var corrGlob = JSON.parse(this.dataFS[13+this.quadrantNumber]) @@ -948,6 +950,7 @@ export default { var selectionCounter = this.keepNumberOfCompareNodes var IDsGather = this.KeepIDs var IDsGatherTrans = this.KeepIDTransform + var keepNames = this.KeepNamesGlobal var node = svg.append('g') .attr('class', 'nodes') @@ -961,9 +964,17 @@ export default { if (!clickedNode.includes("root")) { var clearSendNode = [] clearSendNode.push(id.name) + var name = id.name + var splitName = name.split("_") + for (let m = 0; m < listofNodes.length ; m++) { + if (listofNodes[m].includes(splitName[0])) { + var valueToSend = m + } + } + clearSendNode.push(clickedNode-1) EventBus.$emit('updateHistoryKey', 2) - EventBus.$emit('updateValuesofHistory', clickedNode-1) + EventBus.$emit('updateValuesofHistory', valueToSend) EventBus.$emit('UpdateIDTrans', [clickedNode-1]) EventBus.$emit('transformNodes', clearSendNode) } else { @@ -1072,13 +1083,21 @@ export default { groupsColor.setAttribute('fill', '#969696') selectionCounter = selectionCounter + 1 EventBus.$emit('Counter', selectionCounter) + var name = id.name + var splitName = name.split("_") + for (let m = 0; m < listofNodes.length ; m++) { + if (listofNodes[m].includes(splitName[0])) { + var valueToSend = m + } + } + keepNames.push(valueToSend) IDsGather.push(idLocal); if (selectionCounter == 2) { - EventBus.$emit('updateValuesofHistory', IDsGather) + EventBus.$emit('updateValuesofHistory', keepNames) EventBus.$emit('UpdateIDs', IDsGather) EventBus.$emit('CompareTwo', IDsGather) } else if (selectionCounter == 3) { - EventBus.$emit('updateValuesofHistory', IDsGather) + EventBus.$emit('updateValuesofHistory', keepNames) EventBus.$emit('UpdateIDs', IDsGather) EventBus.$emit('CompareThree', IDsGather) } else { @@ -1094,8 +1113,9 @@ export default { } EventBus.$emit('UpdateIDs', IDsGather) if (selectionCounter == 1) { - EventBus.$emit('diactiveTransform') - EventBus.$emit('Default') + //EventBus.$emit('diactiveTransform') + //EventBus.$emit('Default') + EventBus.$emit('storeGeneration') } else if (selectionCounter == 2) { EventBus.$emit('UpdateIDs', IDsGather) EventBus.$emit('CompareTwo', IDsGather) @@ -1915,6 +1935,7 @@ export default { EventBus.$on('Counter', data => { this.keepNumberOfCompareNodes = data }) EventBus.$on('UpdateIDs', data => { this.KeepIDs = data }) + EventBus.$on('UpdateNames', data => { this.KeepNamesGlobal = data }) EventBus.$on('UpdateIDTrans', data => { this.KeepIDTransform = data }) diff --git a/frontend/src/components/Heatmap.vue b/frontend/src/components/Heatmap.vue index 7674a35..bb108d5 100644 --- a/frontend/src/components/Heatmap.vue +++ b/frontend/src/components/Heatmap.vue @@ -40,7 +40,8 @@ export default { dataFI: [], featureData: [], generKey: [], - featureGenGlobal: [] + featureGenGlobal: [], + keepMainRemovedFeatures: [], } }, methods: { @@ -73,6 +74,8 @@ export default { var featureUni = JSON.parse(this.dataFI[0]) var featuresFinal = this.featureData[33] + var status = this.keepMainRemovedFeatures + var algorithms = [] algorithms.push("Univariate FS") algorithms.push("Impurity-based FI") @@ -131,7 +134,15 @@ export default { values[j] = ((((Object.values(featureUni.Score)[i]-minUni)/(maxUni-minUni)))+(ImpurityFS[0][i])+(PermImpEli[i][0])+(FeaturesAccuracy[i][0])+(RankingFS[0][i]))/(len2-2) } else { if (Object.entries(this.generKey).length == 0) { - values[j] = -2 + if (status.length != 0) { + if (status.includes(Features[i])){ + values[j] = -4 + } else { + values[j] = -2 + } + } else { + values[j] = -2 + } } else { if (Object.entries(this.generKey).length == 7) { if (i == 0 || i == 1) { @@ -170,6 +181,9 @@ export default { }, heatmap_display(data, heatmapId) { + + var status = this.keepMainRemovedFeatures + if (Object.entries(this.generKey).length == 0) { var Features = JSON.parse(this.featureData[0]) } else { @@ -399,6 +413,15 @@ export default { if (index > -1) { featuresAddRem.splice(index, 1); } + if (status.includes(Features[k])) { + var outputArray = []; + for (let i = 0; i < status.length; i++) { + if (status[i] !== Features[k]) { + outputArray.push(status[i]); + } + } + EventBus.$emit('updateRemovedFeaturesBack', outputArray) + } EventBus.$emit('updateHistoryKey', 0) EventBus.$emit('updateValuesofHistory', k) EventBus.$emit('addFeature', featuresAddRem) @@ -429,7 +452,9 @@ export default { EventBus.$emit('removeFeaturesGen', featuresGen) return "url(#diagonalHatch)" } else { + status.push(Features[k]) featuresAddRem.push(k) + EventBus.$emit('updateRemovedFeatures', status) EventBus.$emit('updateHistoryKey', 1) EventBus.$emit('updateValuesofHistory', k) EventBus.$emit('removeFeatures', featuresAddRem) @@ -650,6 +675,8 @@ export default { EventBus.$on('quad', data => { this.featureData = data }) + EventBus.$on('updateRemovedFeatures', data => { this.keepMainRemovedFeatures = data }) + EventBus.$on('reset', this.reset) } } diff --git a/frontend/src/components/Main.vue b/frontend/src/components/Main.vue index 8b938d0..d0ac0cd 100755 --- a/frontend/src/components/Main.vue +++ b/frontend/src/components/Main.vue @@ -149,7 +149,7 @@ export default Vue.extend({ DataResults: '', keyNow: 1, instancesImportance: '', - RetrieveValueFile: 'BreastC', // this is for the default data set + RetrieveValueFile: 'IrisC', // this is for the default data set SelectedFeaturesPerClassifier: '', FinalResults: 0, selectedAlgorithm: '', diff --git a/frontend/src/components/Results.vue b/frontend/src/components/Results.vue index e82f3fc..e315774 100644 --- a/frontend/src/components/Results.vue +++ b/frontend/src/components/Results.vue @@ -27,7 +27,9 @@ export default { whereIsChange: -1, previousState: [], storeBestSoFarAV: [], - flag: true + flag: true, + onHold: 0, + keepFeaturesAddedGenRemoved: 0 } }, methods: { @@ -44,8 +46,18 @@ export default { svg.selectAll("*").remove(); var data = [] - var features = this.featuresReceived[33] + if (this.historyKey == 5) { + this.onHold = 0 + } + if (this.historyKey == 3) { + if (this.onHold > 0) { + for ( var i = 0; i < this.onHold; i++ ) { + features.pop(); + } + } + } + if (this.historyKey == -1) { for (let i = 0; i < features.length; i++) { this.valuesGlobal.push([state,0,0,0]) @@ -65,11 +77,13 @@ export default { this.valuesGlobal[this.whereIsChange[j]][0] = state } } else if (this.historyKey == 5) { - this.valuesGlobal.push([state,0,0,0]) + for (let k = 0; k < this.keepFeaturesAddedGenRemoved ; k++) { + this.valuesGlobal.push([state,0,0,0]) + } } else { } - + console.log(this.valuesGlobal) var toWhichTrans = this.historyKey var toWhichPosition = this.whereIsChange var counterSet = -1 @@ -472,12 +486,16 @@ export default { EventBus.$on('updateHistoryKey', data => { this.historyKey = data }) EventBus.$on('updateValuesofHistory', data => { this.whereIsChange = data }) + EventBus.$on('addFeatureGen', data => { this.onHold = Object.values(data).length }) + EventBus.$on('finalResults', data => { this.ValidResultsVar = data }) EventBus.$on('finalResults', this.initializeLinePLot) EventBus.$on('quad', data => { this.featuresReceived = data }) EventBus.$on('finalResults', this.HistoryPun) + EventBus.$on('addFeatureGen', data => { this.keepFeaturesAddedGenRemoved = Object.values(data).length }) + EventBus.$on('reset', this.reset) } } diff --git a/run.py b/run.py index ff9e8b1..b4b2b0e 100644 --- a/run.py +++ b/run.py @@ -58,11 +58,6 @@ def reset(): global filterActionFinal filterActionFinal = '' - global storePositions - global storeReplacements - storePositions = [] - storeReplacements = [] - global keySpecInternal keySpecInternal = 1 @@ -159,11 +154,6 @@ def retrieveFileName(): global DataResultsRawTest global DataRawLengthTest - global storePositions - global storeReplacements - storePositions = [] - storeReplacements = [] - global fileName fileName = [] fileName = request.get_data().decode('utf8').replace("'", '"') @@ -481,7 +471,7 @@ def dataSetSelection(): global keepOriginalFeatures keepOriginalFeatures = XData.copy() - keepOriginalFeatures.columns = [str(col) + ' (F'+str(idx+1)+')' for idx, col in enumerate(keepOriginalFeatures.columns)] + keepOriginalFeatures.columns = [str(col) + ' F'+str(idx+1)+'' for idx, col in enumerate(keepOriginalFeatures.columns)] columnsNewGen = keepOriginalFeatures.columns.values.tolist() XData.columns = ['F'+str(idx+1) for idx, col in enumerate(XData.columns)] @@ -536,6 +526,7 @@ def executeModel(exeCall, flagEx, nodeTransfName): global listofTransformations global XDataStoredOriginal global finalResultsData + global tracker global XDataNoRemoval global XDataNoRemovalOrig @@ -548,6 +539,11 @@ def executeModel(exeCall, flagEx, nodeTransfName): if (flagEx == 3): XDataStored = XData.copy() XDataNoRemovalOrig = XDataNoRemoval.copy() + elif (flagEx == 2): + XData = XDataStored.copy() + XDataStoredOriginal = XDataStored.copy() + XDataNoRemoval = XDataNoRemovalOrig.copy() + columnsNewGen = keepOriginalFeatures.columns.values.tolist() else: XData = XDataStored.copy() XDataNoRemoval = XDataNoRemovalOrig.copy() @@ -555,12 +551,19 @@ def executeModel(exeCall, flagEx, nodeTransfName): else: if (flagEx == 4): XDataStored = XData.copy() + XDataNoRemovalOrig = XDataNoRemoval.copy() + print('edw!') + #XDataStoredOriginal = XDataStored.copy() elif (flagEx == 2): - pass + XData = XDataStored.copy() + XDataStoredOriginal = XDataStored.copy() + XDataNoRemoval = XDataNoRemovalOrig.copy() + columnsNewGen = keepOriginalFeatures.columns.values.tolist() else: XData = XDataStored.copy() + #XDataNoRemoval = XDataNoRemovalOrig.copy() XDataStoredOriginal = XDataStored.copy() - columnsNewGen = keepOriginalFeatures.columns.values.tolist() + # Bayesian Optimization CHANGE INIT_POINTS! if (keyFirstTime): create_global_function() @@ -569,6 +572,7 @@ def executeModel(exeCall, flagEx, nodeTransfName): bayesopt.maximize(init_points=10, n_iter=5, acq='ucb') # 35 and 15 bestParams = bayesopt.max['params'] estimator = XGBClassifier(n_estimators=int(bestParams.get('n_estimators')), eta=bestParams.get('eta'), max_depth=int(bestParams.get('max_depth')), probability=True, random_state=RANDOM_SEED, silent=True, verbosity = 0, use_label_encoder=False) + columnsNewGen = keepOriginalFeatures.columns.values.tolist() if (len(exeCall) != 0): if (flagEx == 1): @@ -588,18 +592,20 @@ def executeModel(exeCall, flagEx, nodeTransfName): XDataNoRemoval[columnsKeepNew] = XDataTemp.values elif (flagEx == 4): splittedCol = nodeTransfName.split('_') - XData.rename(columns={ XData.columns[exeCall[0]]: nodeTransfName }, inplace = True) + for col in XDataNoRemoval.columns: + if ((splittedCol[0] in col)): + storeRenamedColumn = col + XData.rename(columns={ storeRenamedColumn: nodeTransfName }, inplace = True) + XDataNoRemoval.rename(columns={ storeRenamedColumn: nodeTransfName }, inplace = True) currentColumn = columnsNewGen[exeCall[0]] subString = currentColumn[currentColumn.find("(")+1:currentColumn.find(")")] replacement = currentColumn.replace(subString, nodeTransfName) - storePositions.append(exeCall[0]) - storeReplacements.append(replacement) - pos = 0 - for repl in storeReplacements: - columnsNewGen[storePositions[pos]] = repl - pos += 1 + for ind, column in enumerate(columnsNewGen): + if ((splittedCol[0] in column)): + columnsNewGen[ind] = columnsNewGen[ind].replace(storeRenamedColumn, nodeTransfName) if (len(splittedCol) == 1): XData[nodeTransfName] = XDataStoredOriginal[nodeTransfName] + XDataNoRemoval[nodeTransfName] = XDataStoredOriginal[nodeTransfName] else: if (splittedCol[1] == 'r'): XData[nodeTransfName] = XData[nodeTransfName].round() @@ -653,10 +659,35 @@ def executeModel(exeCall, flagEx, nodeTransfName): XData[nodeTransfName] = np.power(XData[nodeTransfName], 3) else: XData[nodeTransfName] = np.power(XData[nodeTransfName], 4) - XDataStored = XData.copy() + XDataNoRemoval[nodeTransfName] = XData[nodeTransfName] + XDataStored = XData.copy() + XDataNoRemovalOrig = XDataNoRemoval.copy() columnsNamesLoc = XData.columns.values.tolist() + tracker = [] + for value in columnsNewGen: + value = value.split(' ') + if (len(value) > 1): + tracker.append(value[1]) + else: + tracker.append(value[0]) + + + storeIndices = [] + valuesStore = [] + for ind, col in enumerate(tracker): + for value in XDataStoredOriginal.columns.values.tolist(): + if col in value: + storeIndices.append(ind) + valuesStore.append(valuesStore) + tracker[ind] = tracker[ind].replace(col, value) + else: + break + # FIX THAT! + #for el in storeIndices: + # columnsNewGen[el] = columnsNewGen[el].replace(columnsNewGen[el],valuesStore[el]) + #print(columnsNewGen) for col in columnsNamesLoc: splittedCol = col.split('_') if (len(splittedCol) == 1): @@ -669,10 +700,14 @@ def executeModel(exeCall, flagEx, nodeTransfName): else: columnsNames.append(splittedCol[0]+'_'+tran) featureImportanceData = estimatorFeatureSelection(XDataNoRemoval, estimator) + print(XData) + print(XDataStored) + print(XDataStoredOriginal.columns) + print(XDataNoRemoval) estimator.fit(XData, yData) yPredict = estimator.predict(XData) yPredictProb = cross_val_predict(estimator, XData, yData, cv=crossValidation, method='predict_proba') - print(XData) + num_cores = multiprocessing.cpu_count() inputsSc = ['accuracy','precision_macro','recall_macro'] @@ -738,7 +773,7 @@ def featFun (clfLocalPar,DataLocalPar,yDataLocalPar): # # calculating for all algorithms and models the performance and other results # @memory.cache def estimatorFeatureSelection(Data, clf): - print(Data) + resultsFS = [] permList = [] PerFeatureAccuracy = [] @@ -1715,7 +1750,7 @@ def Seperation(): packCorr.append(json.dumps(MI4List)) packCorr.append(json.dumps(MI5List)) - packCorr.append(list(XDataStored.columns.values.tolist())) + packCorr.append(list(tracker)) packCorr.append(list(XData.columns.values.tolist())) packCorr.append(json.dumps(columnsNames)) @@ -1776,6 +1811,7 @@ def CompareFunPy(): global columnsKeep global XDataGen global IDsToCompare + global columnsNewGen retrieveComparison = request.get_data().decode('utf8').replace("'", '"') retrieveComparison = json.loads(retrieveComparison) @@ -1783,7 +1819,8 @@ def CompareFunPy(): IDsToCompare = retrieveComparison['getIDs'] XDataGen = XDataStored.copy() columns = XData.columns.values.tolist() - columnsOriganl = keepOriginalFeatures.columns.values.tolist() + #columnsOriganl = XDataNoRemoval.columns.values.tolist() + columnsKeep = [] columnsKeepNonOrig = [] columnsKeepID = [] @@ -1791,76 +1828,76 @@ def CompareFunPy(): if indx in IDsToCompare: columnsKeepNonOrig.append(col) columnExtracted = re.findall('\d+', col) - columnsKeep.append(columnsOriganl[int(columnExtracted[0]) - 1]) - columnsKeepID.append(str(int(columnExtracted[0]))) + columnsKeep.append(columnsNewGen[int(columnExtracted[0]) - 1]) + columnsKeepID.append(str(col)) if (compareMode == 1): XDataGen = XData[columnsKeepNonOrig] feat1 = XDataGen.iloc[:,0] feat2 = XDataGen.iloc[:,1] - XDataGen['F'+columnsKeepID[0]+'+F'+columnsKeepID[1]] = feat1 + feat2 - XDataGen['|F'+columnsKeepID[0]+'-F'+columnsKeepID[1]+'|'] = abs(feat1 - feat2) - XDataGen['F'+columnsKeepID[0]+'xF'+columnsKeepID[1]] = feat1 * feat2 - XDataGen['F'+columnsKeepID[0]+'/F'+columnsKeepID[1]] = feat1 / feat2 - XDataGen['F'+columnsKeepID[1]+'/F'+columnsKeepID[0]] = feat2 / feat1 - columnsKeep.append('F'+columnsKeepID[0]+'+F'+columnsKeepID[1]) - columnsKeep.append('|F'+columnsKeepID[0]+'-F'+columnsKeepID[1]+'|') - columnsKeep.append('F'+columnsKeepID[0]+'xF'+columnsKeepID[1]) - columnsKeep.append('F'+columnsKeepID[0]+'/F'+columnsKeepID[1]) - columnsKeep.append('F'+columnsKeepID[1]+'/F'+columnsKeepID[0]) + XDataGen[columnsKeepID[0]+'+'+columnsKeepID[1]] = feat1 + feat2 + XDataGen['|'+columnsKeepID[0]+'-'+columnsKeepID[1]+'|'] = abs(feat1 - feat2) + XDataGen[columnsKeepID[0]+'x'+columnsKeepID[1]] = feat1 * feat2 + XDataGen[columnsKeepID[0]+'/'+columnsKeepID[1]] = feat1 / feat2 + XDataGen[columnsKeepID[1]+'/'+columnsKeepID[0]] = feat2 / feat1 + columnsKeep.append(columnsKeepID[0]+'+'+columnsKeepID[1]) + columnsKeep.append('|'+columnsKeepID[0]+'-'+columnsKeepID[1]+'|') + columnsKeep.append(columnsKeepID[0]+'x'+columnsKeepID[1]) + columnsKeep.append(columnsKeepID[0]+'/'+columnsKeepID[1]) + columnsKeep.append(columnsKeepID[1]+'/'+columnsKeepID[0]) elif (compareMode == 2): XDataGen = XData[columnsKeepNonOrig] feat1 = XDataGen.iloc[:,0] feat2 = XDataGen.iloc[:,1] feat3 = XDataGen.iloc[:,2] - XDataGen['F'+columnsKeepID[0]+'+F'+columnsKeepID[1]] = feat1 + feat2 - XDataGen['F'+columnsKeepID[1]+'+F'+columnsKeepID[2]] = feat2 + feat3 - XDataGen['F'+columnsKeepID[0]+'+F'+columnsKeepID[2]] = feat1 + feat3 - XDataGen['F'+columnsKeepID[0]+'+F'+columnsKeepID[1]+'+F'+columnsKeepID[2]] = feat1 + feat2 + feat3 - XDataGen['|F'+columnsKeepID[0]+'-F'+columnsKeepID[1]+'|'] = abs(feat1 - feat2) - XDataGen['|F'+columnsKeepID[1]+'-F'+columnsKeepID[2]+'|'] = abs(feat2 - feat3) - XDataGen['|F'+columnsKeepID[0]+'-F'+columnsKeepID[2]+'|'] = abs(feat1 - feat3) - XDataGen['|F'+columnsKeepID[0]+'-F'+columnsKeepID[1]+'-F'+columnsKeepID[2]+'|'] = abs(feat1 - feat2 - feat3) - XDataGen['F'+columnsKeepID[0]+'xF'+columnsKeepID[1]] = feat1 * feat2 - XDataGen['F'+columnsKeepID[1]+'xF'+columnsKeepID[2]] = feat2 * feat3 - XDataGen['F'+columnsKeepID[0]+'xF'+columnsKeepID[2]] = feat1 * feat3 - XDataGen['F'+columnsKeepID[0]+'xF'+columnsKeepID[1]+'xF'+columnsKeepID[2]] = feat1 * feat2 * feat3 - XDataGen['F'+columnsKeepID[0]+'/F'+columnsKeepID[1]] = feat1 / feat2 - XDataGen['F'+columnsKeepID[1]+'/F'+columnsKeepID[0]] = feat2 / feat1 - XDataGen['F'+columnsKeepID[1]+'/F'+columnsKeepID[2]] = feat2 / feat3 - XDataGen['F'+columnsKeepID[2]+'/F'+columnsKeepID[1]] = feat3 / feat2 - XDataGen['F'+columnsKeepID[0]+'/F'+columnsKeepID[2]] = feat1 / feat3 - XDataGen['F'+columnsKeepID[2]+'/F'+columnsKeepID[0]] = feat3 / feat1 - XDataGen['F'+columnsKeepID[0]+'/F'+columnsKeepID[1]+'/F'+columnsKeepID[2]] = feat1 / feat2 / feat3 - XDataGen['F'+columnsKeepID[0]+'/F'+columnsKeepID[2]+'/F'+columnsKeepID[1]] = feat1 / feat3 / feat2 - XDataGen['F'+columnsKeepID[1]+'/F'+columnsKeepID[2]+'/F'+columnsKeepID[0]] = feat2 / feat3 / feat1 - XDataGen['F'+columnsKeepID[1]+'/F'+columnsKeepID[0]+'/F'+columnsKeepID[2]] = feat2 / feat1 / feat3 - XDataGen['F'+columnsKeepID[2]+'/F'+columnsKeepID[0]+'/F'+columnsKeepID[1]] = feat3 / feat1 / feat2 - XDataGen['F'+columnsKeepID[2]+'/F'+columnsKeepID[1]+'/F'+columnsKeepID[0]] = feat3 / feat2 / feat1 - - columnsKeep.append('F'+columnsKeepID[0]+'+F'+columnsKeepID[1]) - columnsKeep.append('F'+columnsKeepID[1]+'+F'+columnsKeepID[2]) - columnsKeep.append('F'+columnsKeepID[0]+'+F'+columnsKeepID[2]) - columnsKeep.append('F'+columnsKeepID[0]+'+F'+columnsKeepID[1]+'+F'+columnsKeepID[2]) - columnsKeep.append('|F'+columnsKeepID[0]+'-F'+columnsKeepID[1]+'|') - columnsKeep.append('|F'+columnsKeepID[1]+'-F'+columnsKeepID[2]+'|') - columnsKeep.append('|F'+columnsKeepID[0]+'-F'+columnsKeepID[2]+'|') - columnsKeep.append('|F'+columnsKeepID[0]+'-F'+columnsKeepID[1]+'-F'+columnsKeepID[2]+'|') - columnsKeep.append('F'+columnsKeepID[0]+'xF'+columnsKeepID[1]) - columnsKeep.append('F'+columnsKeepID[1]+'xF'+columnsKeepID[2]) - columnsKeep.append('F'+columnsKeepID[0]+'xF'+columnsKeepID[2]) - columnsKeep.append('F'+columnsKeepID[0]+'xF'+columnsKeepID[1]+'xF'+columnsKeepID[2]) - columnsKeep.append('F'+columnsKeepID[0]+'/F'+columnsKeepID[1]) - columnsKeep.append('F'+columnsKeepID[1]+'/F'+columnsKeepID[0]) - columnsKeep.append('F'+columnsKeepID[1]+'/F'+columnsKeepID[2]) - columnsKeep.append('F'+columnsKeepID[2]+'/F'+columnsKeepID[1]) - columnsKeep.append('F'+columnsKeepID[0]+'/F'+columnsKeepID[2]) - columnsKeep.append('F'+columnsKeepID[2]+'/F'+columnsKeepID[0]) - columnsKeep.append('F'+columnsKeepID[0]+'/F'+columnsKeepID[1]+'/F'+columnsKeepID[2]) - columnsKeep.append('F'+columnsKeepID[0]+'/F'+columnsKeepID[2]+'/F'+columnsKeepID[1]) - columnsKeep.append('F'+columnsKeepID[1]+'/F'+columnsKeepID[2]+'/F'+columnsKeepID[0]) - columnsKeep.append('F'+columnsKeepID[1]+'/F'+columnsKeepID[0]+'/F'+columnsKeepID[2]) - columnsKeep.append('F'+columnsKeepID[2]+'/F'+columnsKeepID[0]+'/F'+columnsKeepID[1]) - columnsKeep.append('F'+columnsKeepID[2]+'/F'+columnsKeepID[1]+'/F'+columnsKeepID[0]) + XDataGen[columnsKeepID[0]+'+'+columnsKeepID[1]] = feat1 + feat2 + XDataGen[columnsKeepID[1]+'+'+columnsKeepID[2]] = feat2 + feat3 + XDataGen[columnsKeepID[0]+'+'+columnsKeepID[2]] = feat1 + feat3 + XDataGen[columnsKeepID[0]+'+'+columnsKeepID[1]+'+'+columnsKeepID[2]] = feat1 + feat2 + feat3 + XDataGen['|'+columnsKeepID[0]+'-'+columnsKeepID[1]+'|'] = abs(feat1 - feat2) + XDataGen['|'+columnsKeepID[1]+'-'+columnsKeepID[2]+'|'] = abs(feat2 - feat3) + XDataGen['|'+columnsKeepID[0]+'-'+columnsKeepID[2]+'|'] = abs(feat1 - feat3) + XDataGen['|'+columnsKeepID[0]+'-'+columnsKeepID[1]+'-'+columnsKeepID[2]+'|'] = abs(feat1 - feat2 - feat3) + XDataGen[columnsKeepID[0]+'x'+columnsKeepID[1]] = feat1 * feat2 + XDataGen[columnsKeepID[1]+'x'+columnsKeepID[2]] = feat2 * feat3 + XDataGen[columnsKeepID[0]+'x'+columnsKeepID[2]] = feat1 * feat3 + XDataGen[columnsKeepID[0]+'x'+columnsKeepID[1]+'x'+columnsKeepID[2]] = feat1 * feat2 * feat3 + XDataGen[columnsKeepID[0]+'/'+columnsKeepID[1]] = feat1 / feat2 + XDataGen[columnsKeepID[1]+'/'+columnsKeepID[0]] = feat2 / feat1 + XDataGen[columnsKeepID[1]+'/'+columnsKeepID[2]] = feat2 / feat3 + XDataGen[columnsKeepID[2]+'/'+columnsKeepID[1]] = feat3 / feat2 + XDataGen[columnsKeepID[0]+'/'+columnsKeepID[2]] = feat1 / feat3 + XDataGen[columnsKeepID[2]+'/'+columnsKeepID[0]] = feat3 / feat1 + XDataGen[columnsKeepID[0]+'/'+columnsKeepID[1]+'/'+columnsKeepID[2]] = feat1 / feat2 / feat3 + XDataGen[columnsKeepID[0]+'/'+columnsKeepID[2]+'/'+columnsKeepID[1]] = feat1 / feat3 / feat2 + XDataGen[columnsKeepID[1]+'/'+columnsKeepID[2]+'/'+columnsKeepID[0]] = feat2 / feat3 / feat1 + XDataGen[columnsKeepID[1]+'/'+columnsKeepID[0]+'/'+columnsKeepID[2]] = feat2 / feat1 / feat3 + XDataGen[columnsKeepID[2]+'/'+columnsKeepID[0]+'/'+columnsKeepID[1]] = feat3 / feat1 / feat2 + XDataGen[columnsKeepID[2]+'/'+columnsKeepID[1]+'/'+columnsKeepID[0]] = feat3 / feat2 / feat1 + + columnsKeep.append(columnsKeepID[0]+'+'+columnsKeepID[1]) + columnsKeep.append(columnsKeepID[1]+'+'+columnsKeepID[2]) + columnsKeep.append(columnsKeepID[0]+'+'+columnsKeepID[2]) + columnsKeep.append(columnsKeepID[0]+'+'+columnsKeepID[1]+'+'+columnsKeepID[2]) + columnsKeep.append('|'+columnsKeepID[0]+'-'+columnsKeepID[1]+'|') + columnsKeep.append('|'+columnsKeepID[1]+'-'+columnsKeepID[2]+'|') + columnsKeep.append('|'+columnsKeepID[0]+'-'+columnsKeepID[2]+'|') + columnsKeep.append('|'+columnsKeepID[0]+'-'+columnsKeepID[1]+'-'+columnsKeepID[2]+'|') + columnsKeep.append(columnsKeepID[0]+'x'+columnsKeepID[1]) + columnsKeep.append(columnsKeepID[1]+'x'+columnsKeepID[2]) + columnsKeep.append(columnsKeepID[0]+'x'+columnsKeepID[2]) + columnsKeep.append(columnsKeepID[0]+'x'+columnsKeepID[1]+'x'+columnsKeepID[2]) + columnsKeep.append(columnsKeepID[0]+'/'+columnsKeepID[1]) + columnsKeep.append(columnsKeepID[1]+'/'+columnsKeepID[0]) + columnsKeep.append(columnsKeepID[1]+'/'+columnsKeepID[2]) + columnsKeep.append(columnsKeepID[2]+'/'+columnsKeepID[1]) + columnsKeep.append(columnsKeepID[0]+'/'+columnsKeepID[2]) + columnsKeep.append(columnsKeepID[2]+'/'+columnsKeepID[0]) + columnsKeep.append(columnsKeepID[0]+'/'+columnsKeepID[1]+'/'+columnsKeepID[2]) + columnsKeep.append(columnsKeepID[0]+'/'+columnsKeepID[2]+'/'+columnsKeepID[1]) + columnsKeep.append(columnsKeepID[1]+'/'+columnsKeepID[2]+'/'+columnsKeepID[0]) + columnsKeep.append(columnsKeepID[1]+'/'+columnsKeepID[0]+'/'+columnsKeepID[2]) + columnsKeep.append(columnsKeepID[2]+'/'+columnsKeepID[0]+'/'+columnsKeepID[1]) + columnsKeep.append(columnsKeepID[2]+'/'+columnsKeepID[1]+'/'+columnsKeepID[0]) else: pass featureCompareData = estimatorFeatureSelection(XDataGen, estimator)