From 9a93d84855bf66c5a74a8c19ab44fbf2414aa578 Mon Sep 17 00:00:00 2001 From: Angelos Chatzimparmpas Date: Thu, 21 Jan 2021 17:49:30 +0100 Subject: [PATCH] new --- __pycache__/run.cpython-38.pyc | Bin 35332 -> 36849 bytes .../output.pkl | Bin 0 -> 422 bytes .../output.pkl | Bin 0 -> 430 bytes .../output.pkl | Bin 0 -> 427 bytes .../metadata.json | 1 + .../output.pkl | Bin 0 -> 422 bytes .../metadata.json | 1 + .../output.pkl | Bin 0 -> 522 bytes .../output.pkl | Bin 0 -> 404 bytes .../output.pkl | Bin 0 -> 419 bytes .../metadata.json | 1 + .../metadata.json | 1 + .../output.pkl | Bin 0 -> 707 bytes .../output.pkl | Bin 0 -> 414 bytes .../metadata.json | 1 + .../metadata.json | 1 + .../metadata.json | 1 + .../metadata.json | 1 + .../metadata.json | 1 + .../output.pkl | Bin 0 -> 424 bytes .../output.pkl | Bin 0 -> 513 bytes .../metadata.json | 1 + .../estimatorFeatureSelection/func_code.py | 99 ++++++++++ .../metadata.json | 1 + .../output.pkl | Bin 0 -> 30 bytes .../metadata.json | 1 - .../output.pkl | Bin 25 -> 0 bytes cachedir/joblib/run/executeModel/func_code.py | 176 +++++++++++++++++- frontend/src/components/DataSetSlider.vue | 4 +- frontend/src/components/DataSpace.vue | 2 +- frontend/src/components/Export.vue | 40 ++++ .../src/components/FeatureSpaceDetail.vue | 2 + frontend/src/components/Knowledge.vue | 44 +++++ frontend/src/components/Main.vue | 89 ++++++++- frontend/src/components/Results.vue | 9 +- frontend/src/main.js | 4 +- run.py | 149 +++++++++++---- 37 files changed, 574 insertions(+), 56 deletions(-) create mode 100644 cachedir/joblib/run/estimatorFeatureSelection/031611c241ba479d18e1372b83d0b576/output.pkl create mode 100644 cachedir/joblib/run/estimatorFeatureSelection/08076429e1f4a912207d8f1318e23956/output.pkl create mode 100644 cachedir/joblib/run/estimatorFeatureSelection/0ac4b1e38d060ee7705418ad7d40ac9b/output.pkl create mode 100644 cachedir/joblib/run/estimatorFeatureSelection/1ed1e3543e5b8c0b8ed8273e2b6d737b/metadata.json create mode 100644 cachedir/joblib/run/estimatorFeatureSelection/2bc28dfd99c9f6a65f1d74e67cd622bb/output.pkl create mode 100644 cachedir/joblib/run/estimatorFeatureSelection/2ea39cd41bf1eea844679842787364a7/metadata.json create mode 100644 cachedir/joblib/run/estimatorFeatureSelection/2ea39cd41bf1eea844679842787364a7/output.pkl create mode 100644 cachedir/joblib/run/estimatorFeatureSelection/3f0623bf82584c5a558248b65b02e98a/output.pkl create mode 100644 cachedir/joblib/run/estimatorFeatureSelection/61cd7da84c1bbfd3fb974c2dba5bf7df/output.pkl create mode 100644 cachedir/joblib/run/estimatorFeatureSelection/6c4a3c6ccc38028fd8eb8e3cafea6fb8/metadata.json create mode 100644 cachedir/joblib/run/estimatorFeatureSelection/77fea9bd3b261749a4919132a55d4c8b/metadata.json create mode 100644 cachedir/joblib/run/estimatorFeatureSelection/7b0a5c188fd9aceb09dfd157de9124db/output.pkl create mode 100644 cachedir/joblib/run/estimatorFeatureSelection/883ab89549bbca0bfafb9f9e5a3e0400/output.pkl create mode 100644 cachedir/joblib/run/estimatorFeatureSelection/8acd1de1317c1ff3977e18a58b7d3733/metadata.json create mode 100644 cachedir/joblib/run/estimatorFeatureSelection/94da8e9a31bea28d8ff8ea53a406d37b/metadata.json create mode 100644 cachedir/joblib/run/estimatorFeatureSelection/9902cbfccf20447a3c3f958bc3ba28f0/metadata.json create mode 100644 cachedir/joblib/run/estimatorFeatureSelection/9a08c17b423b35a0c58bb1d4053f6ab9/metadata.json create mode 100644 cachedir/joblib/run/estimatorFeatureSelection/a42f327147499bdd5ab86868e8668849/metadata.json create mode 100644 cachedir/joblib/run/estimatorFeatureSelection/bb0856b15a01508f89cf610063750776/output.pkl create mode 100644 cachedir/joblib/run/estimatorFeatureSelection/c01cd11e96d9a10fbadcce2961183ecd/output.pkl create mode 100644 cachedir/joblib/run/estimatorFeatureSelection/c5a7d28fb08d1dd352f1a14ab72c2f82/metadata.json create mode 100644 cachedir/joblib/run/estimatorFeatureSelection/func_code.py create mode 100644 cachedir/joblib/run/executeModel/12cb5fa7abfa03ab029a92fa8c40616f/metadata.json create mode 100644 cachedir/joblib/run/executeModel/12cb5fa7abfa03ab029a92fa8c40616f/output.pkl delete mode 100644 cachedir/joblib/run/executeModel/72a755383fba437e4dead6ff3e3d81e3/metadata.json delete mode 100644 cachedir/joblib/run/executeModel/72a755383fba437e4dead6ff3e3d81e3/output.pkl create mode 100644 frontend/src/components/Export.vue create mode 100644 frontend/src/components/Knowledge.vue diff --git a/__pycache__/run.cpython-38.pyc b/__pycache__/run.cpython-38.pyc index 7e24ac9a64d44932d85b5b020531aa2fbad9d6e8..22d455cfb0b9162a661d2ec2bb0924801a7edc70 100644 GIT binary patch delta 13285 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 DMcIEv diff --git a/cachedir/joblib/run/estimatorFeatureSelection/031611c241ba479d18e1372b83d0b576/output.pkl b/cachedir/joblib/run/estimatorFeatureSelection/031611c241ba479d18e1372b83d0b576/output.pkl new file mode 100644 index 0000000000000000000000000000000000000000..3c950867559e65a4deb81dc08c7ba54018987fd1 GIT binary patch literal 422 zcmZ9Hy-q_h4241BNjxD@MgC3V?(hN~m=HsCHzX<;t1B@wbSx7ui(_4MDISuOqnyw7 z$IaLG^;Oo>`S$dAgxz7W|A$SORexXA=WIPn+4ea)>Z_|=+^CGN@ z*4TPxwH2wVl@uiz#I1A^Mpte%Nkq*HiVC-e$n$(Y^_(CNDwrf3cMO4rG=NnxI>a1U zdQ~yUZa$)qYZME!*BCOENH-XSHLHakv|k%}wFA1?#@!@qknjJJ|8Y$(cx}Pe(Prhj W4$j>L$Cm9pM6TCE?euv3Ii$^Q+V0c(kRYwoGp1F-F31IS!S5fq^9T2bq+8+xrN#IfKB})0e@-H3o^aY<0`OMn(2>^aje68he)&(fvLLD~c$Ka` eH^z{IXF9rY=RGZWI<_^VUmVNVi_JBEOY96)7=4lxJR zu1w<4#YgGmS{ha(&=D4+#wz(2Bn-g$Ihg0?Fa>eRMAa!{U?2WtT`zFLk**k9;MsKL ax%|3D=424^%Pm-xpQDi&LkJ;N7VCYnJKzBr-GNLOnGBCo#%W~r0ie3-NiDQ2` z&hh1Xdw%lxy1brGhp^fW>wQ=r0)=Jx;IIhXg?w)|dmN-65=81k!?*~m_4a3&IxJgE zqDr|+Zr-akrlML{DS1D$MJbv|xM_A0bG1lGlhjHi<9InYci;<0auW3&1}L%uSd{Pr zd{AsfQ#NYZdh6$-6{RqeJYW^0_#H^X1qsmp62C=Qkp^^17iPSKsGa=&pKKlQAm%x* d%8X-^3E;tbn{n_5z)&;@AFm6a%QC8mcn3MbU@iav literal 0 HcmV?d00001 diff --git a/cachedir/joblib/run/estimatorFeatureSelection/2ea39cd41bf1eea844679842787364a7/metadata.json b/cachedir/joblib/run/estimatorFeatureSelection/2ea39cd41bf1eea844679842787364a7/metadata.json new file mode 100644 index 0000000..e2cbdf5 --- /dev/null +++ b/cachedir/joblib/run/estimatorFeatureSelection/2ea39cd41bf1eea844679842787364a7/metadata.json @@ -0,0 +1 @@ +{"duration": 2.0144307613372803, "input_args": {"Data": " F1 F2_mms F3 F4 F1xF3\n0 2.5 0.541667 6.3 6.0 15.75\n1 1.9 0.291667 5.8 5.1 11.02\n2 2.1 0.416667 7.1 5.9 14.91\n3 1.8 0.375000 6.3 5.6 11.34\n4 2.2 0.416667 6.5 5.8 14.30\n.. ... ... ... ... ...\n145 0.3 0.416667 4.8 1.4 1.44\n146 0.2 0.750000 5.1 1.6 1.02\n147 0.2 0.500000 4.6 1.4 0.92\n148 0.2 0.708333 5.3 1.5 1.06\n149 0.2 0.541667 5.0 1.4 1.00\n\n[150 rows x 5 columns]", "clf": "SVC(C=44.03816499590499, gamma=0.01, probability=True, random_state=42)"}} \ No newline at end of file diff --git a/cachedir/joblib/run/estimatorFeatureSelection/2ea39cd41bf1eea844679842787364a7/output.pkl b/cachedir/joblib/run/estimatorFeatureSelection/2ea39cd41bf1eea844679842787364a7/output.pkl new file mode 100644 index 0000000000000000000000000000000000000000..30bd2fae8c965419d9318cb60432a168d7192610 GIT binary patch literal 522 zcmZvYJx&8L5QRbFB(5kDYyNESaEbhHSoEB-l zd3hV>*IqoUm{Dm`hTvGsTFojOX|R|*OSMA6gO#8%H_xP|(i)LOgUT8x6=`Lfj)(i0 zFE-8;Z0aY*!|Byo2csH5%3hnY5*IYZxLrUdE;x=qggJ^=1TAO5b9j=deMt=>FJr@RA34J1vx#A-QpUkL`Ti ze}Ap+#(F-lPoKxKf1M8RWqT}Gwq-|UQz!+8;1o4PO(A98l>Oo5ZMtTAbEqtWt#h;C zlMYoylmzSW6FIO-Lnf0pNJQNMt5ohCk>~k*vQd3(1UN{TXEcC75SzVQLyUp!@(&q_>jWT>dhb+t0yrqb}SN~+iUaCYds`4j(vQS zuZN%C`@4wO^W*9JnD+0};WKTIiPARhIBgQUC=kVkK!^)X^Cs;NZy(cAJ?h9(RH?R7 zd-Q3`VyebU68+307t>0GyVf8vw~-ndh`6con|*{Q6(j^B37Nk+@j=UBwUj@Pm4xYV@;L`60j0AH)c`J z;^fTglT@Uj1^lWSa}p9_&XC}OYm13XHl}nqoQ_X^LH|%}4b!Yz%kG0BIh-(7jcTQW z0?;Us3adbKH1|#bDHc;xDpZQ&AXL-Vv}vb(p3{i9=6(uRg5^#oh)l-=8LOUUWI)du z0RK(c`XsAVw86;Sh76aUt6KfeU!G55%jj9?MUXDkn%v>&alt2^EGoJee4Cwjd2vz4 rYmP$}JFRbIIQL?BBUtHMoEG0-%@HxJ z!{z7xF6!<4c=|rj?qk}2(e^-0TY47SkPM*^Iz)!ZLm15)+U?&zr={DAr>tgNnwB1O z)>5u!Rg81Yi+Iv%g;lzhAc-_joGoi>%sS8KQ;+m`Byo^ub*kuU5R}nL6qG4L$-6Q(r#rHRZ@f4AdF;=J z@1Og-QOE1!pWjCZJa(9As!^|Uj$$h2e3Hf1ms|9#VrT7 z9DVe-jlvoNE2<(Yt}*_BWX5Y7%&pzlHqcAE$m$0F`9D9(4L3Ws8?P$18z-_Y)pI`G VaPSg{#}p9blI`zpdI#=_egWBRU+w?^ literal 0 HcmV?d00001 diff --git a/cachedir/joblib/run/estimatorFeatureSelection/c01cd11e96d9a10fbadcce2961183ecd/output.pkl b/cachedir/joblib/run/estimatorFeatureSelection/c01cd11e96d9a10fbadcce2961183ecd/output.pkl new file mode 100644 index 0000000000000000000000000000000000000000..d5f72d4cf52d5bf8b269e7d777f8ce2b63ab70c4 GIT binary patch literal 513 zcmY+AJ5B>Z42D7CBvVm@kzez04nRSh7KB8!WduqZq-Z4$kTP6>BT{2~7iBZWj{kqh zpC4a$-@msvabC{%r=Mfmd<@$|S|1anb$Z0KO6UQ-?sf+gUD}yTjftum{Tqq3WmEJT`m$bQ^g(W?Pwm zo4RRR#;lR68&+jDN^j&vo= ((previousState[0]-previousState[1]) + (previousState[2]-previousState[3]) + (previousState[4]-previousState[5]))): + finalResultsData = XData.copy() + print('improved') + + if (keyFirstTime == False): + if ((scoresAct[0]-scoresAct[1]) > (previousState[0]-previousState[1])): + previousState[0] = scoresAct[0] + previousState[1] = scoresAct[1] + howMany = howMany + 1 + elif ((scoresAct[2]-scoresAct[3]) > (previousState[2]-previousState[3])): + previousState[2] = scoresAct[2] + previousState[3] = scoresAct[3] + howMany = howMany + 1 + elif ((scoresAct[4]-scoresAct[5]) > (previousState[4]-previousState[5])): + previousState[4] = scoresAct[4] + previousState[5] = scoresAct[5] + howMany = howMany + 1 + else: + pass + + scores = scoresAct + previousState + + if (howMany == 3): + scores.append(1) + else: + scores.append(0) + + return 'Everything Okay' diff --git a/frontend/src/components/DataSetSlider.vue b/frontend/src/components/DataSetSlider.vue index e5ad225..3d7ec14 100644 --- a/frontend/src/components/DataSetSlider.vue +++ b/frontend/src/components/DataSetSlider.vue @@ -3,7 +3,7 @@ @@ -54,7 +54,7 @@ export default { this.defaultDataSet = fileName.options[fileName.selectedIndex].value this.defaultDataSet = this.defaultDataSet.split('.')[0] - if (this.defaultDataSet == "BreastC" || this.defaultDataSet == "HeartC" || this.defaultDataSet == "IrisC" || this.defaultDataSet == "BiodegC") { // This is a function that handles a new file, which users can upload. + if (this.defaultDataSet == "BiodegC" || this.defaultDataSet == "HeartC" || this.defaultDataSet == "IrisC") { // This is a function that handles a new file, which users can upload. this.dataset = "Data set" d3.select("#data").select("input").remove(); // Remove the selection field. EventBus.$emit('SendToServerDataSetConfirmation', this.defaultDataSet) diff --git a/frontend/src/components/DataSpace.vue b/frontend/src/components/DataSpace.vue index 351d663..10a2c23 100644 --- a/frontend/src/components/DataSpace.vue +++ b/frontend/src/components/DataSpace.vue @@ -566,7 +566,7 @@ text { #BeeSwarm { position: absolute; top: 0; left: 0; z-index: 1} #Sliders { position: absolute; top: 0; left: 0; z-index: 2} #NoAction { position: absolute; top: 0; left: 0; z-index: -1} -#TextLabels {position: absolute; top: 0; left: 0; z-index: 3} +#TextLabels {position: absolute; top: 0; left: 0; z-index: 1} .active-d3-item { cursor: pointer; diff --git a/frontend/src/components/Export.vue b/frontend/src/components/Export.vue new file mode 100644 index 0000000..3ec5644 --- /dev/null +++ b/frontend/src/components/Export.vue @@ -0,0 +1,40 @@ + + + + + \ No newline at end of file diff --git a/frontend/src/components/FeatureSpaceDetail.vue b/frontend/src/components/FeatureSpaceDetail.vue index 6b7f131..15de9e8 100644 --- a/frontend/src/components/FeatureSpaceDetail.vue +++ b/frontend/src/components/FeatureSpaceDetail.vue @@ -95,6 +95,7 @@ export default { }, setLayerExplore() { + console.log('mpike') this.mode = 0 this.KeepIDs = [] this.KeepIDTransform = [] @@ -1090,6 +1091,7 @@ export default { } EventBus.$emit('UpdateIDs', IDsGather) if (selectionCounter == 1) { + EventBus.$emit('diactiveTransform') EventBus.$emit('Default') } else if (selectionCounter == 2) { EventBus.$emit('UpdateIDs', IDsGather) diff --git a/frontend/src/components/Knowledge.vue b/frontend/src/components/Knowledge.vue new file mode 100644 index 0000000..60b5e84 --- /dev/null +++ b/frontend/src/components/Knowledge.vue @@ -0,0 +1,44 @@ + + + + + \ No newline at end of file diff --git a/frontend/src/components/Main.vue b/frontend/src/components/Main.vue index e13fbf3..b944b2e 100755 --- a/frontend/src/components/Main.vue +++ b/frontend/src/components/Main.vue @@ -55,6 +55,7 @@ + @@ -62,6 +63,24 @@ +
+
+
+
+

Serialized features using Cryo

+
+ +
+ +
+
+
+
@@ -73,6 +92,8 @@ import DataSpace from './DataSpace.vue' import FeatureSpaceOverview from './FeatureSpaceOverview.vue' import FeatureSpaceDetail from './FeatureSpaceDetail.vue' import Heatmap from './Heatmap.vue' +import Export from './Export.vue' +import Knowledge from './Knowledge.vue' import Results from './Results.vue' import axios from 'axios' import { loadProgressBar } from 'axios-progress-bar' @@ -80,8 +101,8 @@ import 'axios-progress-bar/dist/nprogress.css' import 'bootstrap-css-only/css/bootstrap.min.css' import { mdbCard, mdbCardBody, mdbCardText, mdbCardHeader } from 'mdbvue' import { EventBus } from '../main.js' -import * as jQuery from 'jquery' -import $ from 'jquery' +import $ from 'jquery'; // <-to import jquery +import 'bootstrap'; import * as d3Base from 'd3' import Papa from 'papaparse' @@ -96,6 +117,8 @@ export default Vue.extend({ FeatureSpaceOverview, FeatureSpaceDetail, Heatmap, + Export, + Knowledge, Results, mdbCard, mdbCardBody, @@ -104,6 +127,7 @@ export default Vue.extend({ }, data () { return { + valuePickled: 'Close', transformNodesFlag: false, storeDataTransf: [], compareNumber: 0, @@ -170,6 +194,27 @@ export default Vue.extend({ closeModalFun () { $('#myModal').modal('hide') }, + openModalCalculate () { + const path = `http://127.0.0.1:5000/data/RequestBestFeatures` + + 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 => { + var finalResultsData = JSON.parse(response.data.finalResultsData) + EventBus.$emit('sendSelectedFeaturestoPickle', finalResultsData) + console.log('Pickle data successful!') + }) + .catch(error => { + console.log(error) + }) + }, getCollection () { this.Collection = this.getCollectionFromBackend() }, @@ -431,7 +476,7 @@ export default Vue.extend({ EventBus.$emit('SlidersCall') this.keySlider = false } - EventBus.$emit('ConfirmDataSet') // REMOVE THAT! + //EventBus.$emit('ConfirmDataSet') // REMOVE THAT! } else { EventBus.$emit('dataSpace', this.correlResul) EventBus.$emit('quad', this.correlResul) @@ -657,8 +702,35 @@ export default Vue.extend({ window.addEventListener('resize', this.change) }, mounted() { - - EventBus.$on('storeGeneration', this.storeGenFun) + var coll = document.getElementsByClassName("collapsible"); + var i; + var flagLocalMounted = true + var flagLocalSkip = true + EventBus.$on('OpenModal', data =>{ flagLocalSkip = false }) + for (i = 0; i < coll.length; i++) { + coll[i].addEventListener("click", function() { + console.log(flagLocalSkip) + if (flagLocalSkip) { + var content = document.getElementsByClassName("content") + var value = "370px" + for (let j = 0; j < content.length; j++) { + if (content[j].style.display === "block") { + content[j].style.display = "none"; + } else { + content[j].style.display = "block"; + if (flagLocalMounted) { + content[j].style.display = "none"; + } + } + } + flagLocalMounted = false + var combineWH = [] + combineWH.push(this.width) + combineWH.push(this.height - 100) + } + flagLocalSkip = true + }); + } var modal = document.getElementById('myModal') window.onclick = function(event) { @@ -684,6 +756,8 @@ export default Vue.extend({ EventBus.$on('CompareThree', data => { this.compareNumber = 2 }) EventBus.$on('CompareThree', this.Compare) + EventBus.$on('diactiveTransform', data => { this.transformNodesFlag = true }) + EventBus.$on('activeTransform', data => { this.transformNodesFlag = false }) EventBus.$on('Default', this.returnImportance) EventBus.$on('updateFeatureImp', this.returnCorrel) @@ -751,6 +825,11 @@ export default Vue.extend({ EventBus.$on('flagSpace', data => { this.spaceChange = data }) + EventBus.$on('finalResults', this.openModalCalculate) + EventBus.$on('OpenModal', this.openModalFun) + + EventBus.$on('storeGeneration', this.storeGenFun) + //Prevent double click to search for a word. document.addEventListener('mousedown', function (event) { if (event.detail > 1) { diff --git a/frontend/src/components/Results.vue b/frontend/src/components/Results.vue index 77a999f..8de16eb 100644 --- a/frontend/src/components/Results.vue +++ b/frontend/src/components/Results.vue @@ -37,7 +37,7 @@ export default { var state = this.globalStep //console.log('Current Step: ', state) if (state == 1) { - this.storeBestSoFarAV = ((parseFloat(this.scoresMean[0]) + parseFloat(this.scoresMean[1]) + parseFloat(this.scoresMean[2])) / 3) + this.storeBestSoFarAV = parseFloat(this.scoresMean[0]) + parseFloat(this.scoresMean[1]) + parseFloat(this.scoresMean[2]) - parseFloat(this.scoresSTD[0]) - parseFloat(this.scoresSTD[1]) - parseFloat(this.scoresSTD[2]) } var svg = d3.select("#HistoryPlot"); @@ -45,7 +45,7 @@ export default { var margin = {top: 0, right: 0, bottom: 0, left: 0} var width = 390 - margin.left - margin.right - var height = 620 - margin.top - margin.bottom + var height = 578 - margin.top - margin.bottom var padding = 3 var xLabelHeight = 30 var yLabelWidth = 80 @@ -155,10 +155,9 @@ export default { .duration(duration) .attr('r', 0) .remove() - - if (this.storeBestSoFarAV <= ((parseFloat(this.scoresMean[0]) + parseFloat(this.scoresMean[1]) + parseFloat(this.scoresMean[2])) / 3)) { + if (this.storeBestSoFarAV <= (parseFloat(this.scoresMean[0]) + parseFloat(this.scoresMean[1]) + parseFloat(this.scoresMean[2]) - parseFloat(this.scoresSTD[0]) - parseFloat(this.scoresSTD[1]) - parseFloat(this.scoresSTD[2]))) { this.flag = true - this.storeBestSoFarAV = ((parseFloat(this.scoresMean[0]) + parseFloat(this.scoresMean[1]) + parseFloat(this.scoresMean[2])) / 3) + this.storeBestSoFarAV = parseFloat(this.scoresMean[0]) + parseFloat(this.scoresMean[1]) + parseFloat(this.scoresMean[2]) - parseFloat(this.scoresSTD[0]) - parseFloat(this.scoresSTD[1]) - parseFloat(this.scoresSTD[2]) } var previously = this.previousState diff --git a/frontend/src/main.js b/frontend/src/main.js index 4fae386..12fa119 100755 --- a/frontend/src/main.js +++ b/frontend/src/main.js @@ -6,10 +6,10 @@ import 'bootstrap-vue/dist/bootstrap-vue.css' import router from './router' import { library } from '@fortawesome/fontawesome-svg-core' import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome' -import { faDna, faSearch, faTrash, faBalanceScale , faWrench } from '@fortawesome/free-solid-svg-icons' +import { faDna, faSearch, faTrash, faBalanceScale , faWrench, faFileExport, faWindowClose} from '@fortawesome/free-solid-svg-icons' import bFormSlider from 'vue-bootstrap-slider' -library.add(faDna, faSearch, faTrash, faBalanceScale, faWrench) +library.add(faDna, faSearch, faTrash, faBalanceScale, faWrench, faFileExport, faWindowClose) Vue.component('font-awesome-icon', FontAwesomeIcon) diff --git a/run.py b/run.py index 450e6fe..9eb28e9 100644 --- a/run.py +++ b/run.py @@ -23,7 +23,7 @@ from sklearn.preprocessing import OneHotEncoder from sklearn.metrics import classification_report from sklearn.feature_selection import mutual_info_classif from sklearn.feature_selection import SelectKBest -from sklearn.feature_selection import chi2 +from sklearn.feature_selection import f_classif from sklearn.feature_selection import RFECV from sklearn.ensemble import RandomForestClassifier from sklearn.linear_model import LogisticRegression @@ -53,7 +53,7 @@ def reset(): global DataRawLength global DataResultsRaw global previousState - previousState = [] + previousState = []\ global filterActionFinal filterActionFinal = '' @@ -85,6 +85,9 @@ def reset(): global yDataStored yDataStored = [] + global finalResultsData + finalResultsData = [] + global detailsParams detailsParams = [] @@ -132,7 +135,10 @@ def reset(): global columnsNames columnsNames = [] - + + global fileName + fileName = [] + global listofTransformations listofTransformations = ["r","b","zs","mms","l2","l1p","l10","e2","em1","p2","p3","p4"] @@ -152,6 +158,8 @@ def retrieveFileName(): storePositions = [] storeReplacements = [] + global fileName + fileName = [] fileName = request.get_data().decode('utf8').replace("'", '"') global keySpecInternal @@ -187,8 +195,8 @@ def retrieveFileName(): global yDataStored yDataStored = [] - global filterDataFinal - filterDataFinal = 'mean' + global finalResultsData + finalResultsData = [] global ClassifierIDsList ClassifierIDsList = '' @@ -249,25 +257,25 @@ def retrieveFileName(): global listofTransformations listofTransformations = ["r","b","zs","mms","l2","l1p","l10","e2","em1","p2","p3","p4"] - + print('data set:',fileName) DataRawLength = -1 DataRawLengthTest = -1 data = json.loads(fileName) if data['fileName'] == 'HeartC': CollectionDB = mongo.db.HeartC.find() - names_labels.append('Healthy') - names_labels.append('Diseased') + target_names.append('Healthy') + target_names.append('Diseased') elif data['fileName'] == 'BiodegC': StanceTest = True CollectionDB = mongo.db.biodegC.find() CollectionDBTest = mongo.db.biodegCTest.find() CollectionDBExternal = mongo.db.biodegCExt.find() - names_labels.append('Non-biodegradable') - names_labels.append('Biodegradable') + target_names.append('Non-biodegradable') + target_names.append('Biodegradable') elif data['fileName'] == 'BreastC': - CollectionDB = mongo.db.diabetesC.find() - names_labels.append('Malignant') - names_labels.append('Benign') + CollectionDB = mongo.db.breastC.find() + target_names.append('Malignant') + target_names.append('Benign') else: CollectionDB = mongo.db.IrisC.find() DataResultsRaw = [] @@ -317,17 +325,26 @@ def sendToServerData(): AllTargets = [o[target] for o in DataResultsRaw] AllTargetsFloatValues = [] + global fileName + data = json.loads(fileName) + previous = None Class = 0 for i, value in enumerate(AllTargets): if (i == 0): previous = value - target_names.append(value) + if (data['fileName'] == 'IrisC'): + target_names.append(value) + else: + pass if (value == previous): AllTargetsFloatValues.append(Class) else: Class = Class + 1 - target_names.append(value) + if (data['fileName'] == 'IrisC'): + target_names.append(value) + else: + pass AllTargetsFloatValues.append(Class) previous = value @@ -342,6 +359,10 @@ def sendToServerData(): global XDataStoredOriginal XDataStoredOriginal = XData.copy() + + global finalResultsData + finalResultsData = XData.copy() + return 'Processed uploaded data set' def dataSetSelection(): @@ -410,17 +431,26 @@ def dataSetSelection(): AllTargets = [o[target] for o in DataResultsRaw] AllTargetsFloatValues = [] + global fileName + data = json.loads(fileName) + previous = None Class = 0 for i, value in enumerate(AllTargets): if (i == 0): previous = value - target_names.append(value) + if (data['fileName'] == 'IrisC'): + target_names.append(value) + else: + pass if (value == previous): AllTargetsFloatValues.append(Class) else: Class = Class + 1 - target_names.append(value) + if (data['fileName'] == 'IrisC'): + target_names.append(value) + else: + pass AllTargetsFloatValues.append(Class) previous = value @@ -443,6 +473,9 @@ def dataSetSelection(): global XDataStoredOriginal XDataStoredOriginal = XData.copy() + global finalResultsData + finalResultsData = XData.copy() + warnings.simplefilter('ignore') executeModel([], 0, '') @@ -474,6 +507,7 @@ def executeModel(exeCall, flagEx, nodeTransfName): global columnsNames global listofTransformations global XDataStoredOriginal + global finalResultsData columnsNames = [] scores = [] @@ -490,12 +524,12 @@ def executeModel(exeCall, flagEx, nodeTransfName): XData = XDataStored.copy() XDataStoredOriginal = XDataStored.copy() columnsNewGen = keepOriginalFeatures.columns.values.tolist() - # Bayesian Optimization for 150 iterations + # Bayesian Optimization for 50 iterations if (keyFirstTime): create_global_function() - params = {"C": (0.0001, 10000), "gamma": (0.0001, 10000)} + params = {"C": (0.01, 100), "gamma": (0.01, 100)} svc_bayesopt = BayesianOptimization(estimator, params, random_state=RANDOM_SEED) - svc_bayesopt.maximize(init_points=130, n_iter=20, acq='ucb') + svc_bayesopt.maximize(init_points=30, n_iter=20, acq='ucb') bestParams = svc_bayesopt.max['params'] estimator = SVC(C=bestParams.get('C'), gamma=bestParams.get('gamma'), probability=True, random_state=RANDOM_SEED) @@ -546,11 +580,17 @@ def executeModel(exeCall, flagEx, nodeTransfName): elif (splittedCol[1] == 'mms'): XData[nodeTransfName] = (XData[nodeTransfName]-XData[nodeTransfName].min())/(XData[nodeTransfName].max()-XData[nodeTransfName].min()) elif (splittedCol[1] == 'l2'): - XData[nodeTransfName] = np.log2(XData[nodeTransfName]) + dfTemp = np.log2(XData[nodeTransfName]) + dfTemp = dfTemp.replace(np.inf, 1.7976931348623157e+308) + dfTemp = dfTemp.replace(-np.inf, 2.2250738585072014e-308) + XData[nodeTransfName] = dfTemp elif (splittedCol[1] == 'l1p'): XData[nodeTransfName] = np.log1p(XData[nodeTransfName]) elif (splittedCol[1] == 'l10'): - XData[nodeTransfName] = np.log10(XData[nodeTransfName]) + dfTemp = np.log10(XData[nodeTransfName]) + dfTemp = dfTemp.replace(np.inf, 1.7976931348623157e+308) + dfTemp = dfTemp.replace(-np.inf, 2.2250738585072014e-308) + XData[nodeTransfName] = dfTemp elif (splittedCol[1] == 'e2'): XData[nodeTransfName] = np.exp2(XData[nodeTransfName]) elif (splittedCol[1] == 'em1'): @@ -580,7 +620,7 @@ def executeModel(exeCall, flagEx, nodeTransfName): 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'] @@ -593,7 +633,12 @@ def executeModel(exeCall, flagEx, nodeTransfName): previousState = scoresAct keyFirstTime = False howMany = 3 - else: + + if (((scoresAct[0]-scoresAct[1]) + (scoresAct[2]-scoresAct[3]) + (scoresAct[4]-scoresAct[5])) >= ((previousState[0]-previousState[1]) + (previousState[2]-previousState[3]) + (previousState[4]-previousState[5]))): + finalResultsData = XData.copy() + print('improved') + + if (keyFirstTime == False): if ((scoresAct[0]-scoresAct[1]) > (previousState[0]-previousState[1])): previousState[0] = scoresAct[0] previousState[1] = scoresAct[1] @@ -610,6 +655,7 @@ def executeModel(exeCall, flagEx, nodeTransfName): pass scores = scoresAct + previousState + if (howMany == 3): scores.append(1) else: @@ -617,6 +663,28 @@ def executeModel(exeCall, flagEx, nodeTransfName): return 'Everything Okay' +@app.route('/data/RequestBestFeatures', methods=["GET", "POST"]) +def BestFeat(): + global finalResultsData + finalResultsDataJSON = finalResultsData.to_json() + + response = { + 'finalResultsData': finalResultsDataJSON + } + return jsonify(response) + +def featFun (clfLocalPar,DataLocalPar,yDataLocalPar): + PerFeatureAccuracyLocalPar = [] + scores = model_selection.cross_val_score(clfLocalPar, DataLocalPar, yDataLocalPar, cv=None, n_jobs=-1) + PerFeatureAccuracyLocalPar.append(scores.mean()) + return PerFeatureAccuracyLocalPar + + +location = './cachedir' +memory = Memory(location, verbose=0) + +# calculating for all algorithms and models the performance and other results +@memory.cache def estimatorFeatureSelection(Data, clf): resultsFS = [] @@ -670,13 +738,17 @@ def estimatorFeatureSelection(Data, clf): else: RankingFS.append(0.05) - perm = PermutationImportance(clf, cv = None, refit = True, n_iter = 25).fit(Data, yData) + perm = PermutationImportance(clf, cv=None, refit = True, n_iter = 25).fit(Data, yData) permList.append(perm.feature_importances_) n_feats = Data.shape[1] - PerFeatureAccuracy = [] - for i in range(n_feats): - scores = model_selection.cross_val_score(clf, Data.values[:, i].reshape(-1, 1), yData, cv=crossValidation) - PerFeatureAccuracy.append(scores.mean()) + + num_cores = multiprocessing.cpu_count() + print("Parallelization Initialized") + flat_results = Parallel(n_jobs=num_cores)(delayed(featFun)(clf,Data.values[:, i].reshape(-1, 1),yData) for i in range(n_feats)) + PerFeatureAccuracy = [item for sublist in flat_results for item in sublist] + # for i in range(n_feats): + # scoresHere = model_selection.cross_val_score(clf, Data.values[:, i].reshape(-1, 1), yData, cv=None, n_jobs=-1) + # PerFeatureAccuracy.append(scoresHere.mean()) PerFeatureAccuracyAll.append(PerFeatureAccuracy) clf.fit(Data, yData) @@ -695,7 +767,7 @@ def estimatorFeatureSelection(Data, clf): PerFeatureAccuracyPandas = pd.DataFrame(PerFeatureAccuracyAll) PerFeatureAccuracyPandas = PerFeatureAccuracyPandas.to_json() - bestfeatures = SelectKBest(score_func=chi2, k='all') + bestfeatures = SelectKBest(score_func=f_classif, k='all') fit = bestfeatures.fit(Data,yData) dfscores = pd.DataFrame(fit.scores_) dfcolumns = pd.DataFrame(Data.columns) @@ -854,7 +926,10 @@ def Transformation(quadrant1, quadrant2, quadrant3, quadrant4, quadrant5): else: d={} XDataNumericCopy = XDataNumeric.copy() - XDataNumericCopy[i] = np.log2(XDataNumericCopy[i]) + dfTemp = np.log2(XDataNumericCopy[i]) + dfTemp = dfTemp.replace(np.inf, 1.7976931348623157e+308) + dfTemp = dfTemp.replace(-np.inf, 2.2250738585072014e-308) + XDataNumericCopy[i] = dfTemp for number in range(1,6): quadrantVariable = str('quadrant%s' % number) illusion = locals()[quadrantVariable] @@ -890,7 +965,10 @@ def Transformation(quadrant1, quadrant2, quadrant3, quadrant4, quadrant5): else: d={} XDataNumericCopy = XDataNumeric.copy() - XDataNumericCopy[i] = np.log10(XDataNumericCopy[i]) + dfTemp = np.log10(XDataNumericCopy[i]) + dfTemp = dfTemp.replace(np.inf, 1.7976931348623157e+308) + dfTemp = dfTemp.replace(-np.inf, 2.2250738585072014e-308) + XDataNumericCopy[i] = dfTemp for number in range(1,6): quadrantVariable = str('quadrant%s' % number) illusion = locals()[quadrantVariable] @@ -991,6 +1069,13 @@ def Transformation(quadrant1, quadrant2, quadrant3, quadrant4, quadrant5): return 'Everything Okay' def NewComputationTransf(DataRows1, DataRows2, DataRows3, DataRows4, DataRows5, quadrant1, quadrant2, quadrant3, quadrant4, quadrant5, feature, count): + + print(DataRows1) + print(DataRows2) + print(DataRows3) + print(DataRows4) + print(DataRows5) + corrMatrix1 = DataRows1.corr() corrMatrix1 = corrMatrix1.abs() corrMatrix2 = DataRows2.corr()