parent 44aabbbf6e
commit cf4093e3f7
  1. BIN
      __pycache__/run.cpython-38.pyc
  2. 41
      frontend/src/components/FeatureSpaceDetail.vue
  3. 4
      frontend/src/components/FeatureSpaceOverview.vue
  4. 62
      frontend/src/components/Heatmap.vue
  5. 29
      frontend/src/components/Main.vue
  6. 4
      frontend/src/components/Results.vue
  7. 90
      run.py

Binary file not shown.

@ -9,17 +9,17 @@
<tbody> <tbody>
<tr> <tr>
<div style="border: 1px solid black; height:70px; margin-top:19px"> <div style="border: 1px solid black; height:70px; margin-top:19px">
<td scope="row"><button class="btn btn-primary active" id="initButton" v-on:click="setLayerExplore" style="margin-left: -1px !important" ><font-awesome-icon icon="wrench" style="margin-right: 5px"/>Transformation</button></td> <td scope="row"><button class="btn btn-primary active" id="initButton" v-on:click="setLayerExplore" style="margin-top: 3px; margin-left: -1px !important" ><font-awesome-icon icon="wrench" style="margin-right: 5px"/>Transformation</button></td>
<td><button class="btn btn-primary" v-on:click="setLayerCompare" style="margin-left: -1.4px"><font-awesome-icon icon="balance-scale" style="margin-right: 5px" />Generation</button></td> <td><button class="btn btn-primary" v-on:click="setLayerCompare" style="margin-top: 3px; margin-left: -1.4px"><font-awesome-icon icon="balance-scale" style="margin-right: 5px" />Generation</button></td>
</div> </div>
<td> <td>
<div id="buildLegend" style="min-width: 160px;"> <div id="buildLegend" style="min-width: 160px;">
<div id="legend"></div> <div id="legend" style="margin-top: 2px; "></div>
<div id="legendText" style="border: 1px solid black; min-height: 70px; max-height: 70px; min-width:181px; margin-top: 16px; margin-left:-12px;"></div> <div id="legendText" style="border: 1px solid black; min-height: 70px; max-height: 70px; min-width:181px; margin-top: 16px; margin-left:-12px;"></div>
</div> </div>
</td> </td>
<td> <td>
<div class="row align-items-center " style="height: 69px; margin-top:7px; min-width: 160px; border: 1px solid black"> <div class="row align-items-center " style="height: 70px; margin-top:7px; border: 1px solid black">
<div class="col-lg-4"><p>Fs COR (>)</p></div> <div class="col-lg-4"><p>Fs COR (>)</p></div>
<div class="col-lg-7"><div id="thres"></div></div> <div class="col-lg-7"><div id="thres"></div></div>
</div> </div>
@ -95,6 +95,7 @@ export default {
this.KeepIDs = [] this.KeepIDs = []
this.keepNumberOfCompareNodes = 0 this.keepNumberOfCompareNodes = 0
this.graphVizualization() this.graphVizualization()
EventBus.$emit('storeGeneration')
}, },
setLayerCompare() { setLayerCompare() {
this.mode = 1 this.mode = 1
@ -491,8 +492,9 @@ export default {
var svg = d3.select('#chartID') var svg = d3.select('#chartID')
svg.selectAll("*").remove() svg.selectAll("*").remove()
var width = 819; var marginNodes = {top: 0, right: 0, bottom: 0, left: 0};
var height = 819; var width = 819 - marginNodes.right - marginNodes.left;
var height = 819 - marginNodes.top - marginNodes.bottom;
var numTicks = 200; var numTicks = 200;
@ -503,7 +505,8 @@ export default {
svg = d3.select("#FeatureGraph").append("svg") svg = d3.select("#FeatureGraph").append("svg")
.attr("width", width) .attr("width", width)
.attr("height", height); .attr("height", height)
.attr('transform', `translate(${marginNodes.left}, ${marginNodes.top})`);
var graph = this.jsonData var graph = this.jsonData
@ -635,6 +638,11 @@ export default {
EventBus.$emit('UpdateIDs', IDsGather) EventBus.$emit('UpdateIDs', IDsGather)
if (selectionCounter == 1) { if (selectionCounter == 1) {
EventBus.$emit('Default') EventBus.$emit('Default')
} else if (selectionCounter == 2) {
EventBus.$emit('UpdateIDs', IDsGather)
EventBus.$emit('CompareTwo', IDsGather)
} else {
} }
} }
} }
@ -647,7 +655,7 @@ export default {
items.forEach( function (it) { items.forEach( function (it) {
it.childNodes[0].style.visibility = "hidden"; it.childNodes[0].style.visibility = "hidden";
it.childNodes[1].setAttribute("transform", "translate(50,50) scale(0.28) rotate(180)"); it.childNodes[1].setAttribute("transform", "translate(50,50) scale(0.28) rotate(180)");
it.childNodes[1].childNodes[0].style.fill = "white"; it.childNodes[1].childNodes[0].style.fill = "#D3D3D3";
it.childNodes[2].style.visibility = "hidden"; it.childNodes[2].style.visibility = "hidden";
}) })
} }
@ -679,9 +687,9 @@ export default {
node.append('title').text(function (d) { return d.name; }); node.append('title').text(function (d) { return d.name; });
EventBus.$emit('brushLink', -1) EventBus.$emit('brushLink', -1)
}); });
var chartWidth = 350; var chartWidth = 310;
var chartHeight = 65; var chartHeight = 65;
var margin = {left: 25, right: 25, top: 10, bottom: 40}; var margin = {left: 8, right: 15, top: 10, bottom: 40};
var chartSvg = d3.select('svg.chart') var chartSvg = d3.select('svg.chart')
.attr('width', chartWidth) .attr('width', chartWidth)
.attr('height', chartHeight) .attr('height', chartHeight)
@ -704,7 +712,7 @@ export default {
.attr("y", chartHeight + 10) .attr("y", chartHeight + 10)
.attr("dy", "0.71em") .attr("dy", "0.71em")
.attr("text-anchor", "middle") .attr("text-anchor", "middle")
.text("Graph readability (%)"); .text("Weighted graph readability (%)");
var readabilityCircles = chartSvg.append('g').selectAll('circle'); var readabilityCircles = chartSvg.append('g').selectAll('circle');
// 48 parameters // 48 parameters
@ -1021,6 +1029,7 @@ export default {
zoom_handler(svg); zoom_handler(svg);
for (let i = 0; i < listofNodes.length; i++) { for (let i = 0; i < listofNodes.length; i++) {
var numb = graph.nodes[i]['group'].match(/\d/g) var numb = graph.nodes[i]['group'].match(/\d/g)
numb = parseInt(numb.join("")) numb = parseInt(numb.join(""))
@ -1190,7 +1199,7 @@ export default {
var textLine = d3.select('#legendText').append("svg").attr('width', 170).attr('height', 90) var textLine = d3.select('#legendText').append("svg").attr('width', 170).attr('height', 90)
var marginBorder = 18 var marginBorder = 16
var marginBorderX = 10 var marginBorderX = 10
textLine.append('line') textLine.append('line')
.style("stroke", "black") .style("stroke", "black")
@ -1208,7 +1217,7 @@ export default {
textLine.append('line') textLine.append('line')
.style("stroke", "black") .style("stroke", "black")
.style("stroke-width", 3) .style("stroke-width", 3)
.attr("x1", 42 + marginBorderX) .attr("x1", 44 + marginBorderX)
.attr("y1", 31 - marginBorder) .attr("y1", 31 - marginBorder)
.attr("x2", 53 + marginBorderX) .attr("x2", 53 + marginBorderX)
.attr("y2", 31 - marginBorder) .attr("y2", 31 - marginBorder)
@ -1281,8 +1290,8 @@ export default {
yDistance = yDistance[1] - yDistance[0]; yDistance = yDistance[1] - yDistance[0];
graph.nodes.forEach(function (n, i) { graph.nodes.forEach(function (n, i) {
n.x = (height - 10) * (n.x - xMin) / Math.max(xDistance, yDistance); n.x = (height - 105) * (n.x - xMin) / Math.max(xDistance, yDistance); // Margin for Nodes
n.y = (height - 10) * (n.y - yMin) / Math.max(xDistance, yDistance); n.y = (height - 105) * (n.y - yMin) / Math.max(xDistance, yDistance); // Margin for Nodes
}); });
xDistance = d3.extent(graph.nodes, function (n) { return n.x; }); xDistance = d3.extent(graph.nodes, function (n) { return n.x; });
@ -1449,7 +1458,7 @@ table td {
#chartID { #chartID {
position: absolute; position: absolute;
transform: translate(-390px, 840px); transform: translate(-354px, 840px);
} }
.chart circle { .chart circle {

@ -44,7 +44,7 @@
</div> </div>
<div class="tool"> <div class="tool">
<div id="help">Labels</div> <div id="help">Labels</div>
<div id="legendTarget" style="min-width: 492.7px; min-height: 50px; margin-top:-10px"></div> <div id="legendTarget" style="min-width: 457px; min-height: 50px; margin-top:-10px"></div>
</div> </div>
</div> </div>
@ -367,7 +367,7 @@ export default {
if(d.name == 'Data') { if(d.name == 'Data') {
return d.selected ? 0 : 0; return d.selected ? 0 : 0;
} else if (d.name == 'All' || d.name == 'Best' || d.name == 'Good' || d.name == 'Bad' || d.name == 'Worst'){ } else if (d.name == 'All' || d.name == 'Best' || d.name == 'Good' || d.name == 'Bad' || d.name == 'Worst'){
return d.selected ? 2 : 2; return d.selected ? 3 : 3;
} else { } else {
return d.selected ? 0 : 0; return d.selected ? 0 : 0;
} }

@ -40,6 +40,7 @@ export default {
dataFI: [], dataFI: [],
featureData: [], featureData: [],
generKey: [], generKey: [],
featureGenGlobal: []
} }
}, },
methods: { methods: {
@ -82,17 +83,16 @@ export default {
var FeaturesAccuracy = JSON.parse(this.dataFI[2]) var FeaturesAccuracy = JSON.parse(this.dataFI[2])
if (Object.entries(this.generKey).length == 0) { if (Object.entries(this.generKey).length == 0) {
var Features = this.featureData[0] var Features = JSON.parse(this.featureData[0])
} else { } else {
console.log(this.generKey)
var Features = this.generKey var Features = this.generKey
} }
console.log(Features)
let arr = Object.values(featureUni.Score); let arr = Object.values(featureUni.Score);
let minUni = Math.min(...arr); let minUni = Math.min(...arr);
let maxUni = Math.max(...arr); let maxUni = Math.max(...arr);
let len = Features.length var len = Features.length
let indicesYAxis = [] let indicesYAxis = []
for (let i = 0; i < len; i++) { for (let i = 0; i < len; i++) {
indicesYAxis[i] = [Features[i]] indicesYAxis[i] = [Features[i]]
@ -120,16 +120,25 @@ export default {
} else if (algorithms[j] == "Accuracy-based FI") { } else if (algorithms[j] == "Accuracy-based FI") {
values[j] = FeaturesAccuracy[i][0] values[j] = FeaturesAccuracy[i][0]
} else if (algorithms[j] == "Average") { } else if (algorithms[j] == "Average") {
values[j] = ((((Object.values(featureUni.Score)[i]-minUni)/(maxUni-minUni)))+(PermImpEli[i][0])+(FeaturesAccuracy[i][0]))/(len-2) values[j] = ((((Object.values(featureUni.Score)[i]-minUni)/(maxUni-minUni)))+(PermImpEli[i][0])+(FeaturesAccuracy[i][0]))/(len2-2)
} else { } else {
if (Object.entries(this.generKey).length == 0) { if (Object.entries(this.generKey).length == 0) {
values[j] = -2 values[j] = -2
} else { } else {
if (i == 0 || i == 1) { if (Object.entries(this.generKey).length == 7) {
values[j] = -3 if (i == 0 || i == 1) {
values[j] = -3
}
else {
values[j] = -4
}
} else {
if (i == 0 || i == 1 || i == 2) {
values[j] = -3
}
else {
values[j] = -4
} }
else {
values[j] = -4
} }
} }
} }
@ -145,8 +154,17 @@ export default {
}, },
heatmap_display(data, heatmapId) { heatmap_display(data, heatmapId) {
if (Object.entries(this.generKey).length == 0) {
var Features = JSON.parse(this.featureData[0])
} else {
var Features = this.generKey
}
var len = Features.length
var featuresAddRem = [] var featuresAddRem = []
var featuresGen = [] var featuresGen = this.featureGenGlobal
var cellSize = this.cellSize var cellSize = this.cellSize
//########################################################################## //##########################################################################
// Patrick.Brockmann@lsce.ipsl.fr // Patrick.Brockmann@lsce.ipsl.fr
@ -237,7 +255,7 @@ export default {
}) })
.attr("x", 0) .attr("x", 0)
.attr("y", function(d, i) { .attr("y", function(d, i) {
return (i * cellSize); return (i * cellSize);
}) })
.style("text-anchor", "end") .style("text-anchor", "end")
.attr("transform", function(d, i) { .attr("transform", function(d, i) {
@ -306,7 +324,7 @@ export default {
}) })
.attr("class", "row"); .attr("class", "row");
svg.append("text").attr("x", 10).attr("y", -65).text("Technique").style("font-size", "16px").attr("alignment-baseline","top") svg.append("text").attr("x", 10).attr("y", -65).text("Technique").style("font-size", "16px").attr("alignment-baseline","top")
svg.append("text").attr("transform", "rotate(-90)").attr("x", -33).attr("y", -75).style("text-anchor", "middle").style("font-size", "16px").text("Feature"); // -130 before for HeartC svg.append("text").attr("transform", "rotate(-90)").attr("x", (-1)*(cellSize*(len/2))).attr("y", -75).style("text-anchor", "middle").style("font-size", "16px").text("Feature"); // -130 before for HeartC
var heatMap = row.selectAll(".cell") var heatMap = row.selectAll(".cell")
.data(function(d) { .data(function(d) {
return d; return d;
@ -381,9 +399,19 @@ export default {
return colorScale(d) return colorScale(d)
} }
} else { } else {
featuresAddRem.push(k) if (d == -4) {
EventBus.$emit('removeFeatures', featuresAddRem) const index = featuresGen.indexOf(k);
return "url(#diagonalHatch)" console.log(index)
if (index > -1) {
featuresGen.splice(index, 1);
}
EventBus.$emit('removeFeaturesGen', featuresGen)
return "url(#diagonalHatch)"
} else {
featuresAddRem.push(k)
EventBus.$emit('removeFeatures', featuresAddRem)
return "url(#diagonalHatch)"
}
} }
} else { } else {
if (d == -3) { if (d == -3) {
@ -587,6 +615,10 @@ export default {
} }
}, },
mounted () { mounted () {
EventBus.$on('removeFeaturesGen', data => { this.featureGenGlobal = data })
EventBus.$on('addFeatureGen', data => { this.featureGenGlobal = data })
EventBus.$on('Generation', data => { this.generKey = data }) EventBus.$on('Generation', data => { this.generKey = data })
EventBus.$on('HeatmapCall', data => { this.dataFI = data }) EventBus.$on('HeatmapCall', data => { this.dataFI = data })

@ -459,6 +459,7 @@ export default Vue.extend({
.then(response => { .then(response => {
console.log('Server successfully send the importances!') console.log('Server successfully send the importances!')
this.Importance = response.data.Importance this.Importance = response.data.Importance
console.log(this.Importance)
this.featureNames = [] this.featureNames = []
EventBus.$emit('Generation', this.featureNames) EventBus.$emit('Generation', this.featureNames)
EventBus.$emit('HeatmapCall', this.Importance) EventBus.$emit('HeatmapCall', this.Importance)
@ -533,6 +534,28 @@ export default Vue.extend({
console.log(error) console.log(error)
}) })
}, },
storeGenFun () {
const path = `http://127.0.0.1:5000/data/storeGeneratedFeatures`
const postData = {
}
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('Store newly generated features!')
EventBus.$emit('updateFeatureImp')
EventBus.$emit('Default')
})
.catch(error => {
console.log(error)
})
},
Compare () { Compare () {
const path = `http://127.0.0.1:5000/data/compareFun` const path = `http://127.0.0.1:5000/data/compareFun`
const postData = { const postData = {
@ -581,6 +604,7 @@ export default Vue.extend({
}, },
}, },
created () { created () {
// does the browser support the Navigation Timing API? // does the browser support the Navigation Timing API?
if (window.performance) { if (window.performance) {
console.info("window.performance is supported"); console.info("window.performance is supported");
@ -594,6 +618,8 @@ export default Vue.extend({
}, },
mounted() { mounted() {
EventBus.$on('storeGeneration', this.storeGenFun)
var modal = document.getElementById('myModal') var modal = document.getElementById('myModal')
window.onclick = function(event) { window.onclick = function(event) {
//alert(event.target) //alert(event.target)
@ -619,6 +645,7 @@ export default Vue.extend({
EventBus.$on('CompareThree', this.Compare) EventBus.$on('CompareThree', this.Compare)
EventBus.$on('Default', this.returnImportance) EventBus.$on('Default', this.returnImportance)
EventBus.$on('updateFeatureImp', this.returnCorrel)
EventBus.$on('ReturningBrushedPointsIDs', data => { this.modelsUpdate = data }) EventBus.$on('ReturningBrushedPointsIDs', data => { this.modelsUpdate = data })
//EventBus.$on('ReturningBrushedPointsIDs', this.UpdateBarChartFeatures ) //EventBus.$on('ReturningBrushedPointsIDs', this.UpdateBarChartFeatures )
@ -674,6 +701,8 @@ export default Vue.extend({
EventBus.$on('addFeature', this.ManipulFeature) EventBus.$on('addFeature', this.ManipulFeature)
EventBus.$on('removeFeatures', this.ManipulFeature) EventBus.$on('removeFeatures', this.ManipulFeature)
EventBus.$on('removeFeaturesGen', data => { this.featureAddRemGen = data })
EventBus.$on('removeFeaturesGen', this.ManipulFeatureGen)
EventBus.$on('addFeatureGen', data => { this.featureAddRemGen = data }) EventBus.$on('addFeatureGen', data => { this.featureAddRemGen = data })
EventBus.$on('addFeatureGen', this.ManipulFeatureGen) EventBus.$on('addFeatureGen', this.ManipulFeatureGen)

@ -47,7 +47,7 @@ export default {
.attr('width', width + margin.left + margin.right) .attr('width', width + margin.left + margin.right)
.attr('height', height + margin.top + margin.bottom) .attr('height', height + margin.top + margin.bottom)
.append('g') .append('g')
.attr('transform', 'translate(' + -5 + ',' + 0 + ')') .attr('transform', 'translate(' + 0 + ',' + 0 + ')')
var border = chart.append('rect') var border = chart.append('rect')
.attr('x', yLabelWidth) .attr('x', yLabelWidth)
@ -62,7 +62,7 @@ export default {
var data = [] var data = []
var features = this.featuresReceived[33] var features = this.featuresReceived[33]
var labelsX = ['Add', 'Remove', 'Combine', 'Round'] var labelsX = ['Add', 'Remove', 'Transform', 'Generate']
for (let i=0; i< features.length; i++) { for (let i=0; i< features.length; i++) {
data.push({ data.push({
label: features[i], label: features[i],

@ -119,6 +119,10 @@ def reset():
global columnsKeep global columnsKeep
columnsKeep = [] columnsKeep = []
global columnsNewGen
columnsNewGen = []
return 'The reset was done!' return 'The reset was done!'
# retrieve data from client and select the correct data set # retrieve data from client and select the correct data set
@ -219,6 +223,9 @@ def retrieveFileName():
global columnsKeep global columnsKeep
columnsKeep = [] columnsKeep = []
global columnsNewGen
columnsNewGen = []
DataRawLength = -1 DataRawLength = -1
DataRawLengthTest = -1 DataRawLengthTest = -1
data = json.loads(fileName) data = json.loads(fileName)
@ -399,6 +406,7 @@ def dataSetSelection():
global keepOriginalFeatures global keepOriginalFeatures
keepOriginalFeatures = XData.copy() 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)] XData.columns = ['F'+str(idx+1) for idx, col in enumerate(XData.columns)]
@ -433,9 +441,18 @@ def executeModel(exeCall, flagEx):
global XData global XData
global XDataStored global XDataStored
global previousState global previousState
global columnsNewGen
scores = [] scores = []
XData = XDataStored.copy() if (len(exeCall) == 0):
if (flagEx == 3):
XDataStored = XData.copy()
else:
XData = XDataStored.copy()
else:
XData = XDataStored.copy()
columnsNewGen = keepOriginalFeatures.columns.values.tolist()
# Bayesian Optimization for 150 iterations # Bayesian Optimization for 150 iterations
if (keyFirstTime): if (keyFirstTime):
create_global_function() create_global_function()
@ -444,20 +461,23 @@ def executeModel(exeCall, flagEx):
svc_bayesopt.maximize(init_points=130, n_iter=20, acq='ucb') svc_bayesopt.maximize(init_points=130, n_iter=20, acq='ucb')
bestParams = svc_bayesopt.max['params'] bestParams = svc_bayesopt.max['params']
estimator = SVC(C=bestParams.get('C'), gamma=bestParams.get('gamma'), probability=True, random_state=RANDOM_SEED) estimator = SVC(C=bestParams.get('C'), gamma=bestParams.get('gamma'), probability=True, random_state=RANDOM_SEED)
featureImportanceData = estimatorFeatureSelection(XData, estimator)
if (len(exeCall) != 0): if (len(exeCall) != 0):
if (flagEx == 1): if (flagEx == 1):
XData = XData.drop(XData.columns[exeCall], axis=1) XData = XData.drop(XData.columns[exeCall], axis=1)
else: elif (flagEx == 2):
columnsKeepNew = [] columnsKeepNew = []
columns = XDataGen.columns.values.tolist() columns = XDataGen.columns.values.tolist()
for indx, col in enumerate(columns): for indx, col in enumerate(columns):
if indx in exeCall: if indx in exeCall:
columnsKeepNew.append(col) columnsKeepNew.append(col)
columnsNewGen.append(col)
XDataTemp = XDataGen[columnsKeepNew] XDataTemp = XDataGen[columnsKeepNew]
XData[columnsKeepNew] = XDataTemp.values XData[columnsKeepNew] = XDataTemp.values
print(XDataStored)
print(XData) print(XData)
featureImportanceData = estimatorFeatureSelection(XData, estimator)
estimator.fit(XData, yData) estimator.fit(XData, yData)
yPredict = estimator.predict(XData) yPredict = estimator.predict(XData)
yPredictProb = cross_val_predict(estimator, XData, yData, cv=crossValidation, method='predict_proba') yPredictProb = cross_val_predict(estimator, XData, yData, cv=crossValidation, method='predict_proba')
@ -1104,7 +1124,7 @@ def Seperation():
global packCorr global packCorr
packCorr = [] packCorr = []
packCorr.append(list(keepOriginalFeatures.columns.values.tolist())) packCorr.append(json.dumps(columnsNewGen))
packCorr.append(json.dumps(target_names)) packCorr.append(json.dumps(target_names))
packCorr.append(json.dumps(probabilityPredictions)) packCorr.append(json.dumps(probabilityPredictions))
@ -1226,7 +1246,7 @@ def CompareFunPy():
feat2 = XDataGen.iloc[:,1] feat2 = XDataGen.iloc[:,1]
XDataGen['F'+columnsKeepID[0]+'+F'+columnsKeepID[1]] = feat1 + feat2 XDataGen['F'+columnsKeepID[0]+'+F'+columnsKeepID[1]] = feat1 + feat2
XDataGen['|F'+columnsKeepID[0]+'-F'+columnsKeepID[1]+'|'] = abs(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]+'xF'+columnsKeepID[1]] = feat1 * feat2
XDataGen['F'+columnsKeepID[0]+'/F'+columnsKeepID[1]] = feat1 / feat2 XDataGen['F'+columnsKeepID[0]+'/F'+columnsKeepID[1]] = feat1 / feat2
XDataGen['F'+columnsKeepID[1]+'/F'+columnsKeepID[0]] = feat2 / feat1 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])
@ -1235,8 +1255,66 @@ def CompareFunPy():
columnsKeep.append('F'+columnsKeepID[0]+'/F'+columnsKeepID[1]) columnsKeep.append('F'+columnsKeepID[0]+'/F'+columnsKeepID[1])
columnsKeep.append('F'+columnsKeepID[1]+'/F'+columnsKeepID[0]) columnsKeep.append('F'+columnsKeepID[1]+'/F'+columnsKeepID[0])
elif (compareMode == 2): elif (compareMode == 2):
pass 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])
else: else:
pass pass
featureCompareData = estimatorFeatureSelection(XDataGen, estimator) featureCompareData = estimatorFeatureSelection(XDataGen, estimator)
return 'Okay' return 'Okay'
@cross_origin(origin='localhost',headers=['Content-Type','Authorization'])
@app.route('/data/storeGeneratedFeatures', methods=["GET", "POST"])
def storeGeneratedFeat():
executeModel([], 3)
return 'Okay'
Loading…
Cancel
Save