From 4fa191957a7dd02726798977387466733cb346ad Mon Sep 17 00:00:00 2001 From: Angelos Chatzimparmpas Date: Sun, 17 Jan 2021 14:51:15 +0100 Subject: [PATCH] new --- __pycache__/run.cpython-38.pyc | Bin 30123 -> 31434 bytes .../src/components/FeatureSpaceDetail.vue | 2 +- frontend/src/components/Heatmap.vue | 20 ++++-- frontend/src/components/Main.vue | 1 + frontend/src/components/Results.vue | 22 +++++- run.py | 63 ++++++++++++++++-- 6 files changed, 95 insertions(+), 13 deletions(-) diff --git a/__pycache__/run.cpython-38.pyc b/__pycache__/run.cpython-38.pyc index 5ac7fd19a3be058d4a52f985e73b2b182045e8fc..a912c27016ca4822552a077d8438cf790f7ecd47 100644 GIT binary patch delta 9251 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 Rmam!UvX!__@zII?{{y)3tResa delta 7986 zcma)B32()!e1Hq?#n}%MfIqyE zNJ?@_D3Kb;QXE+Xsw~nh%a&=llthXo+lic%kHnQ&CDpg1B&Cuf%B94KV_RktG2QdQ z#R3E^5Vdb-dU|?#db)dhmOuOr`T8%3`;g0(DZ#&oM#!nIx39WO$?LaPdP&k8_W6BO zqS@gUk(K_HM1r= zCb}6ow$m+iD|~m%Dx5UT0E=!*o4B2J%xJtr2;Gr3)=75?p`Bu6SK7#Kx<`!cqRaNqnD%> zan}15U_F+`>ZhNZ5xSq6dnMoTX{$M#m`y#MJEr$rUNKoa!LwN>ciB5g1Mji#AiJiY zwRgykl}N8Zs6rqBx;df*qpTX5oqcRMl4}rZ5q#X`e9pQGo2&Ut&Z=Y`Hdg}py)>u> zd*i`=r8^dis)^kl309Az4G4`0O$aLxni19@tOf9A4TQp~!a6`gXDAvBvvoMsiqL|v z9+@0WNeqY8#J*5MWgC!^vy1n*a;n;pr5#}-fS%c_2BZB-p8{-~kh&RwCtcv^&i^Mmzan-wyRPt|lYx8C1Urcw!gj~`@|^Nj;^5|NFp@Gs_+kvPARv&*ou*qLGFgc7BFv0jCpH%`2Qdvf=aN2gEb z{#>@s7;iStfj7->9Sh}K-3 zURMmg7RP)wb--1ht;e&3cb_ceZxroVgQ0te_-+ywfYwbDOTd?I3egeW)E^5QUL_<7 zU&38{i?1v0PKucSB6QgwBg`(E;+qDQ5@r~*!k=yp4MyRRjWp2%R9_kUJkHbr{C436 zBG?Wi@jSu>gdoBQ0(u!6MF7WYl-O}>jsy7Zqv%9p_6a18AqdBtb-6~quB6P7N*3%3 z{8Y)R(k(bW3upHjX+a42Bb*=SUn{Bac^I1)5iTKI2Jq)@Wh^L`OrMm*@rMu|LD-HU ztdeqCb{c5MxUcjXa+-gy^kMLXj|6iJ1q=Yc}?%mPzxJ6g16zTcgDqp{BDk+oPJqh$U)E z@nj6yhU}A>!0%9<>}CF=^5DUDf!_oCpQxsxJowl&sYs$8nmr+dR4dS|b7Dl& z@t&2h5Jm^3ajTktPwsezTEM546eNo^>tvy3pCUw39rs#S$hl%QU$YiTtk?p{V}|xuWcIEmPZrUfDKhQ=t%?oJC@BK%G#N@PH_e@pQMx7>)N!W&{3&u-h6P>FE7e?@JSC62)iO{?OcM&0L(h#ZO2)I)@($_5igAy+M9aE} z>Mzke_^o+Vhgzm(6-l6S7WK4B<5{qw4^>%nTofh*r5jYM2CJ$3`cijB0a!?8-Tc+1 zMUFzzepp>LS;4cHE#aRowPh3u+IP5XSr=KtPb@2Iy|>?4ktWunR)a#N<6cz)H66HD zngg5j7D%Y_71OzVers7l{qfmxq(}2-`}6oWT#?WHmj7R_i9~r=;;* zELLgxplLi$ZP0S*k_m!!$t6iG(DE*l4pBah=hF&Wc}ddpu|Hk_CM#5(SIkV(3WANa ziVs)#NC&@GQSI}>Nfl5qN1>!PQs@DS-dQv7KL%q4&C5ToSXN&>!)FqFq9^!%415O7 z1coo5FamO_`NqnUC1&=KN+t`bN9;ILw23&#_5`&28KG!A3-Q0C5f5+Xt1XG7@K-TKJyof#%fk%uIhqV)!&x6AR5|c$>8H_o~+$gR~vXRi3qMM+_lK5!TO;BX%X3Ao5-6rm%ol4XwV(_W~GsWS6F!M&C zsxz*mLnziLWCcr{LD8yPSZp{-*`Erb;n<*V258bPfQ=1o2a=0YiMkWAF3+p+1{^PZYIYd$tt@JDKD$P4_NHFZwhs%{QN=?HtAe^_(9A!T+^g0iPz{3n>V z{}vjO+f2-|lh{b6eDA}*Tbs*&QCmlBJj2J5$lot=Jo3XoFMKlKgGNm30ZEW+W%!uj zV}_4Kl^|O}(xNgoO_(Q%CaIX-teR;OGV72TBSDjfEYu7MFau{nddk2^KCxlkrowHY z!JHvG$dE24Wz9AK;W?Q}VZxNG%Bq7}C(Pq^%?#q~lg=rTaL(<~EYLTElY5K8LS)jV z0mpcz>YmKfGDXWXnXQ>Hg=>yUFQgcUiWCb_FjXVPsphD;G=tib6EY-e*FAxdq>>pc>RLg0! zAUik@^xZB3%R-D`X!?^DrVNBs_EqSJ$Y=X;lo)|)3Wmcz*`FzbKwQf@Im@o&L`!d6 z=}*8H#)q$v<)MJr5JZ)YUhB^t0RI|hN+1-8LxGNOnnVD6`AjgbfTISZgUVj!08Txt zpT!c1z@c6a0K>cl=yW3pG6!A`!N#m7)2fEHzic+v-!=5{_sG0rsgBf%f*Y)P)AhY zFTyO2Yhr4Xz*PCNo4956BL6}2(QU%=58Q=E>;j)+Jw{dhTuS+S7I}O6)S5Rfj<2C^ zcv;=H@`eoqRX3pN&rrdw5(CX_GOf3UeG_`Vd?>tM*-%$?5;`Kg8(AH5BKr=4NbNtu zR)9O(8jAl6o9Jxp&k_Ct;T44A{BYaeGT~~Le#p0~@F~9?uD(98KKm>FdRq~BhriRd zbjiGPavLl$2DLI2xi9d7_7}*<)33FEYA4_3-#Xs13Mas;2m|S+EM7&1&(0MjuCQWW zzB6PzyZ!?;`xU|hd?hA$c5PY&W9ecU%LJqG^8ABKm-C^cLxQtufz{W}e*6pAgqmsiE`A;b3@J z@w*NvgAgV&-P?HhxACdk$Nn8dWfAVTmfKGR7QxrTyH0Li1YheS`PMCxZ#}RaUW~6-{X&QovDhw!Q!2v76gF=aAz^HD6ABxXzk1@t< z$h;lrZUV?>BD($s`)d$Hdh6hC1Ur)=cU?x}2M7yAResugtlM}@!6lJ+aD3Wv^-Kf@ zf)l}o;6}(o@E~LpDMw;nY~~>3BIJ?j!>5;$QgLQoNI~C%AD|T|nZ)(DN53eA9%omK2Wh9=LZIhi-u4+u^j;-RPg+Z_(Ov^#KfN-jCRdWIWviDE2TY3 z#E8NQ5Tl#%C3rLAGhFj2-g9R4yl0T^*dL6B;=^Gq@TyU5Q3{#zp;oj(<;aflm(H9^ z&QruQM-hAh-oV|UF6=NG=?KD6gt=N+Q?GscN&_ZQc(NDY7Y)wzZ3o+r7wnc zC@g7&gebJ8ah8Z-aZ`yfft#vf=1si~heg_Tzhx1^(w;i2wS;btszhFMzz)Y zeIz{2qiRvvJOepr*6$pSc8|95ud25Q6mi2!?<7u1Sr~q?co_*#AW@(DYMM|6NEFLXLYHWj9SlK=EVxfipa-vaNa_^46k ze)q|dHXHiCC978&-lWYCP`pQTYO%Ke~bx@~xv~q=*MbOOnTctefE#m=M1` zz<+}6LdF4vM-fgVTtg666({#I?7oG7Zw2-?f=J@;W2+Z*W|$<{Aq0`Wk6{aam>owr nfq;9fTJV@`?eJ6ea9G&{98%&sFB@y(y<-g~hpm=BGS>0`+VFDw diff --git a/frontend/src/components/FeatureSpaceDetail.vue b/frontend/src/components/FeatureSpaceDetail.vue index 9587791..d7a430b 100644 --- a/frontend/src/components/FeatureSpaceDetail.vue +++ b/frontend/src/components/FeatureSpaceDetail.vue @@ -683,7 +683,7 @@ export default { } EventBus.$emit('UpdateIDs', IDsGather) if (selectionCounter == 1) { - EventBus.$emit('storeGeneration') + //EventBus.$emit('storeGeneration') } else if (selectionCounter == 2) { EventBus.$emit('UpdateIDs', IDsGather) EventBus.$emit('CompareTwo', IDsGather) diff --git a/frontend/src/components/Heatmap.vue b/frontend/src/components/Heatmap.vue index 5c5846d..c8d8f47 100644 --- a/frontend/src/components/Heatmap.vue +++ b/frontend/src/components/Heatmap.vue @@ -75,13 +75,17 @@ export default { var algorithms = [] algorithms.push("Univariate FS") + algorithms.push("Impurity-based FI") algorithms.push("Permutation FI") algorithms.push("Accuracy-based FI") + algorithms.push("Ranking-based FS") algorithms.push("Average") algorithms.push("# Action #") - var PermImpEli = JSON.parse(this.dataFI[1]) - var FeaturesAccuracy = JSON.parse(this.dataFI[2]) + var ImpurityFS = JSON.parse(this.dataFI[1]) + var PermImpEli = JSON.parse(this.dataFI[2]) + var FeaturesAccuracy = JSON.parse(this.dataFI[3]) + var RankingFS = JSON.parse(this.dataFI[4]) if (Object.entries(this.generKey).length == 0) { var Features = JSON.parse(this.featureData[0]) @@ -115,12 +119,16 @@ export default { for (let i = 0; i < len; i++) { if (algorithms[j] == "Univariate FS") { values[j] = ((Object.values(featureUni.Score)[i]-minUni)/(maxUni-minUni)) + } else if (algorithms[j] == "Impurity-based FI") { + values[j] = ImpurityFS[0][i] } else if (algorithms[j] == "Permutation FI") { values[j] = PermImpEli[i][0] } else if (algorithms[j] == "Accuracy-based FI") { values[j] = FeaturesAccuracy[i][0] + } else if (algorithms[j] == "Ranking-based FS") { + values[j] = RankingFS[0][i] } else if (algorithms[j] == "Average") { - values[j] = ((((Object.values(featureUni.Score)[i]-minUni)/(maxUni-minUni)))+(PermImpEli[i][0])+(FeaturesAccuracy[i][0]))/(len2-2) + 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 @@ -332,7 +340,7 @@ export default { return d.idx; }) .attr("class", "row"); - svg.append("text").attr("x", 10).attr("y", -65).text("Technique").style("font-size", "14px").attr("alignment-baseline","top") + svg.append("text").attr("x", 28).attr("y", -80).text("Technique").style("font-size", "14px").attr("alignment-baseline","top") svg.append("text").attr("transform", "rotate(-90)").attr("x", (-1)*(cellSize*(len/2))).attr("y", -90).style("text-anchor", "middle").style("font-size", "14px").text("Feature"); // -130 before for HeartC var heatMap = row.selectAll(".cell") .data(function(d) { @@ -417,7 +425,7 @@ export default { if (index > -1) { featuresGen.splice(index, 1); } - //EventBus.$emit('updateHistoryKey', 4) + EventBus.$emit('updateHistoryKey', 4) EventBus.$emit('removeFeaturesGen', featuresGen) return "url(#diagonalHatch)" } else { @@ -550,7 +558,7 @@ export default { }); //================================================== - d3.select('#colLabel_3').dispatch('click'); + d3.select('#colLabel_5').dispatch('click'); }, changeOrder(newOrder, heatmapId) { var svg = d3.select(heatmapId); diff --git a/frontend/src/components/Main.vue b/frontend/src/components/Main.vue index 723e6f7..f6616ff 100755 --- a/frontend/src/components/Main.vue +++ b/frontend/src/components/Main.vue @@ -562,6 +562,7 @@ export default Vue.extend({ axios.post(path, postData, axiosConfig) .then(response => { console.log('Store newly generated features!') + this.transformNodesFlag = true EventBus.$emit('updateHistoryKey', 5) this.threshold() if (!this.spaceChange) { diff --git a/frontend/src/components/Results.vue b/frontend/src/components/Results.vue index 987f640..067efd2 100644 --- a/frontend/src/components/Results.vue +++ b/frontend/src/components/Results.vue @@ -162,9 +162,16 @@ export default { } var previously = this.previousState + if (toWhichTrans == 5) { + previously.push("black") + previously.push("black") + previously.push("black") + previously.push("black") + } + var lengthFeatures = this.valuesGlobal.length var testLoc = this.flag - console.log('Better results found: ', testLoc) + dots.transition() .duration(duration) .attr('r', function(d){ return d*2 }) @@ -178,6 +185,18 @@ export default { if (d == state) { previously[counterSet] = '#B15928' return previously[counterSet] + } else if (toWhichTrans == 3 || toWhichTrans == 4) { + var found = false + for (let i = 0; i < toWhichPosition.length; i++) { + if (counterSet == (4*toWhichPosition[i] + 0) || counterSet == (4*toWhichPosition[i] + 1) || counterSet == (4*toWhichPosition[i] + 2) || counterSet == (4*toWhichPosition[i] + 3)) { + previously[counterSet] = 'black' + found = true + return previously[counterSet] + } + } + if (!found) { + return previously[counterSet] + } } else if (counterSet == (4*toWhichPosition + 0) || counterSet == (4*toWhichPosition + 1) || counterSet == (4*toWhichPosition + 2) || counterSet == (4*toWhichPosition + 3)) { previously[counterSet] = 'black' return previously[counterSet] @@ -196,7 +215,6 @@ export default { this.flag = false this.previousState = previously - var dotLabels = rows.selectAll('.dot-label') .data(function(d){ return d.values }) diff --git a/run.py b/run.py index 141064b..462766b 100644 --- a/run.py +++ b/run.py @@ -24,7 +24,9 @@ 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 RFE +from sklearn.feature_selection import RFECV +from sklearn.ensemble import RandomForestClassifier +from sklearn.linear_model import LogisticRegression import eli5 from eli5.sklearn import PermutationImportance @@ -486,6 +488,7 @@ def executeModel(exeCall, flagEx, nodeTransfName): XDataStored = XData.copy() else: XData = XDataStored.copy() + XDataStoredOriginal = XDataStored.copy() columnsNewGen = keepOriginalFeatures.columns.values.tolist() # Bayesian Optimization for 150 iterations if (keyFirstTime): @@ -521,8 +524,6 @@ def executeModel(exeCall, flagEx, nodeTransfName): storeReplacements.append(replacement) pos = 0 for repl in storeReplacements: - print(pos) - print(repl) columnsNewGen[storePositions[pos]] = repl pos += 1 if (len(splittedCol) == 1): @@ -602,7 +603,53 @@ def estimatorFeatureSelection(Data, clf): permList = [] PerFeatureAccuracy = [] PerFeatureAccuracyAll = [] + ImpurityFS = [] + RankingFS = [] + rf = RandomForestClassifier(n_estimators = 100, + n_jobs = -1, + random_state = RANDOM_SEED) + rf.fit(Data, yData) + + importances = rf.feature_importances_ + + std = np.std([tree.feature_importances_ for tree in rf.estimators_], + axis=0) + + maxList = max(importances) + minList = min(importances) + + for f in range(Data.shape[1]): + ImpurityFS.append((importances[f] - minList) / (maxList - minList)) + + estim = LogisticRegression(n_jobs = -1, random_state=RANDOM_SEED) + + selector = RFECV(estimator=estim, n_jobs = -1, step=1, cv=crossValidation) + selector = selector.fit(Data, yData) + RFEImp = selector.ranking_ + + for f in range(Data.shape[1]): + if (RFEImp[f] == 1): + RankingFS.append(0.95) + elif (RFEImp[f] == 2): + RankingFS.append(0.85) + elif (RFEImp[f] == 3): + RankingFS.append(0.75) + elif (RFEImp[f] == 4): + RankingFS.append(0.65) + elif (RFEImp[f] == 5): + RankingFS.append(0.55) + elif (RFEImp[f] == 6): + RankingFS.append(0.45) + elif (RFEImp[f] == 7): + RankingFS.append(0.35) + elif (RFEImp[f] == 8): + RankingFS.append(0.25) + elif (RFEImp[f] == 9): + RankingFS.append(0.15) + else: + RankingFS.append(0.05) + perm = PermutationImportance(clf, cv = None, refit = True, n_iter = 25).fit(Data, yData) permList.append(perm.feature_importances_) n_feats = Data.shape[1] @@ -616,6 +663,12 @@ def estimatorFeatureSelection(Data, clf): yPredict = clf.predict(Data) yPredict = np.nan_to_num(yPredict) + RankingFSDF = pd.DataFrame(RankingFS) + RankingFSDF = RankingFSDF.to_json() + + ImpurityFSDF = pd.DataFrame(ImpurityFS) + ImpurityFSDF = ImpurityFSDF.to_json() + perm_imp_eli5PD = pd.DataFrame(permList) perm_imp_eli5PD = perm_imp_eli5PD.to_json() @@ -631,8 +684,10 @@ def estimatorFeatureSelection(Data, clf): featureScores = featureScores.to_json() resultsFS.append(featureScores) + resultsFS.append(ImpurityFSDF) resultsFS.append(perm_imp_eli5PD) - resultsFS.append(PerFeatureAccuracyPandas) + resultsFS.append(PerFeatureAccuracyPandas) + resultsFS.append(RankingFSDF) return resultsFS