fixed optimization

parent 5dcf16d0a5
commit d1fc0f1f87
  1. BIN
      __pycache__/tsneGrid.cpython-37.pyc
  2. 2
      index.html
  3. 45
      js/tsne_vis.js
  4. 99
      tsneGrid.py

@ -166,7 +166,7 @@
<div class="panel panel-default med-bottomProv" style="margin-top:0.2px; margin-bottom:+14px">
<div class="panel-heading">
<h2 class="panel-title" style="display:inline-block" data-toggle="tooltip" data-placement="right" title="Tip: a feature of this tool that supports clusters (and points) exploration. Checking the neighborhood preservation between the entire projection's average and a selection driven by the user.">Projections Provenance</h2>
[Sorting Metric:
<div id="textToChange" style="display:inline-block">[Sorting Metric:</div>
<select id="param-SortM-view" name="param-SortM-view" onchange="ReSort(false)">
<option value="1" selected>Neighborhood Hit (NH)</option>
<option value="2">Trustworthiness (T)</option>

@ -28,13 +28,13 @@ var ArrayWithCosts = []; var Iterations = [];
var VisiblePoints = [];
var sliderTrigger = false; var sliderInsideTrigger = false; var parameters; var SelProjIDS; var SelProjIDSProv; var SelectedProjections = []; var activeProjectionNumber = []; var activeProjectionNumberProv = [];
var sliderTrigger = false; var sliderInsideTrigger = false; var parameters; var SelProjIDS; var SelProjIDSProv; var SelectedProjections = []; var activeProjectionNumber = []; var activeProjectionNumberProv = []; var globalFlagCheck = true;
// This variable is for the kNN Bar Chart in order to store the first execution.
var inside = 0; var kValuesLegend = []; var findNearestTable = []; var howManyPoints;
var maxKNN = 0
var mode = 1; var colors = ['#a6cee3','#fb9a99','#b2df8a','#33a02c','#1f78b4','#e31a1c','#fdbf6f','#ff7f00','#cab2d6','#6a3d9a']; var projections = []; var metricsSorting = []; var dataReceivedFromServer = []; var metrics = [];
var mode = 1; var colors = ['#a6cee3','#fb9a99','#b2df8a','#33a02c','#1f78b4','#e31a1c','#fdbf6f','#ff7f00','#cab2d6','#6a3d9a']; var projections = []; var metricsSorting = []; var dataReceivedFromServer = []; var dataReceivedFromServerOptimized = []; var metrics = []; var FocusedIDs = [];
var Category; var target_names = []
@ -96,7 +96,7 @@ function fetchVal(callback) {
function OptimizePoints() {
if (lassoFlag) {
varFocusedIDs = []
FocusedIDs = []
for (let i = 0; i < points.length; i++) {
if (points[i].selected) {
FocusedIDs[i] = i
@ -104,9 +104,9 @@ function OptimizePoints() {
}
// ajax the JSON to the server
$.post("http://127.0.0.1:5000/receiver", {'data': JSON.stringify(results_local), 'focus': JSON.stringify(FocusedIDs)}, function(){
$.get("http://127.0.0.1:5000/sender", function( data ) {
dataReceivedFromServer = data
$.post("http://127.0.0.1:5000/receiverOptimizer", JSON.stringify(FocusedIDs), function(){
$.get("http://127.0.0.1:5000/senderOptimizer", function( data ) {
dataReceivedFromServerOptimized = data
ReSort(false)
});
@ -130,10 +130,32 @@ function ReSort(flagInitialize) {
Plotly.purge(graphDiv);
var metricsSortingCopy
var metricsCopy
projections = dataReceivedFromServer['projections']
parameters = dataReceivedFromServer['parameters']
metricsSorting = dataReceivedFromServer['metrics']
if (FocusedIDs.length != 0) {
if (globalFlagCheck) {
metricsSortingCopy = metricsSorting
metricsCopy = metrics
}
globalFlagCheck = false
document.getElementById("textToChange").innerHTML = "[Sorting Metric for Optimized Selection:";
metricsSorting = dataReceivedFromServerOptimized['metrics']
metrics = dataReceivedFromServerOptimized['metricsEntire']
if (FocusedIDs.length == points.length) {
document.getElementById("textToChange").innerHTML = "[Sorting Metric:";
}
} else {
if (!globalFlagCheck) {
metricsSorting = metricsSortingCopy
metrics = metricsCopy
}
}
var traces = []
var target_names = []
@ -172,6 +194,7 @@ function ReSort(flagInitialize) {
labelsTarget = uniqueTarget
}
var optionMetric = document.getElementById("param-SortM-view").value; // Get the threshold value with which the user set's the boundaries of the schema investigation
var order = [];
SelectedProjections = []
@ -188,14 +211,8 @@ if (optionMetric == 1) {
order = metricsSorting[optionMetric-1]
}
console.log(order)
console.log(activeProjectionNumber)
var index = order.indexOf(activeProjectionNumber);
console.log(index)
var arrayLineColor = []
for (let k = 0; k < 8; k++) {
@ -221,8 +238,6 @@ for (let k = 0; k < 8; k++) {
}
}
console.log(arrayLineColor)
var checkCounter = 0
var checkCounterMetr = 0
@ -555,7 +570,7 @@ if(k >= 8) {
margin: {
l: 10,
r: 10,
b: 8,
b: 2,
t: 2,
pad: 0
},

@ -145,6 +145,7 @@ def calculateGrid():
global dataProc
dataProc, length, labels = preprocess(data)
global D_highSpace
D_highSpace = distance.squareform(distance.pdist(dataProc))
DEFAULT_NO_DIMS = 2
@ -180,6 +181,8 @@ def calculateGrid():
SelectedListofParams = []
global SelectedProjectionsReturn
SelectedProjectionsReturn = []
global clusterIndex
clusterIndex = procrustesFun(projectionsAll)
metricNeigh = []
@ -187,6 +190,8 @@ def calculateGrid():
metricCont = []
metricStress = []
metricShepCorr = []
global convertLabels
convertLabels = []
for index, label in enumerate(labels):
if (label == 0):
@ -206,13 +211,21 @@ def calculateGrid():
else:
pass
global D_lowSpaceList
D_lowSpaceList = []
global KeepKs
KeepKs = []
for index in clusterIndex:
SelectedProjectionsReturn.append(projectionsAll[index].tolist())
SelectedListofParams.append(listofParamsAll[index])
D_lowSpace = distance.squareform(distance.pdist(projectionsAll[index]))
D_lowSpaceList.append(D_lowSpace)
k = listofParamsAll[index][0] # k = perplexity
KeepKs.append(k)
#resultNeigh = neighborhood_hit(np.array(projectionsAll[index]), convertLabels, k)
resultNeigh = trustworthiness(D_highSpace, D_lowSpace, k)
@ -253,7 +266,7 @@ def calculateGrid():
valueStress = (metricStress[index] - min_value_stress) / (max_value_stress - min_value_stress)
valueShep = (metricShepCorr[index] - min_value_shep) / (max_value_shep - min_value_shep)
metricsMatrixEntire.append([valueNeigh,valueTrust,valueCont,valueStress,valueShep])
sortNeigh = sorted(range(len(metricNeigh)), key=lambda k: metricNeigh[k], reverse=True)
sortTrust = sorted(range(len(metricTrust)), key=lambda k: metricTrust[k], reverse=True)
sortCont = sorted(range(len(metricCont)), key=lambda k: metricCont[k], reverse=True)
@ -283,5 +296,87 @@ def background_process():
pass
return jsonify({ 'projections': SelectedProjectionsReturn, 'parameters': SelectedListofParams, 'metrics': metricsMatrix, 'metricsEntire': metricsMatrixEntire })
@app.route('/receiverOptimizer', methods = ['POST'])
def OptimizeSelection():
dataReceived= request.get_data().decode('utf8').replace("'", '"')
dataReceived = json.loads(dataReceived)
dataSelected = []
for data in dataReceived:
if data != None:
dataSelected.append(data)
metricNeigh = []
metricTrust = []
metricCont = []
metricStress = []
metricShepCorr = []
for index, loop in enumerate(clusterIndex):
#resultNeigh = neighborhood_hit(np.array(projectionsAll[index]), convertLabels, k)
resultNeigh = trustworthiness(D_highSpace[dataSelected, :], D_lowSpaceList[index][dataSelected, :], KeepKs[index])
resultTrust = trustworthiness(D_highSpace[dataSelected, :], D_lowSpaceList[index][dataSelected, :], KeepKs[index])
resultContinuity = continuity(D_highSpace[dataSelected, :], D_lowSpaceList[index][dataSelected, :], KeepKs[index])
resultStress = normalized_stress(D_highSpace[dataSelected, :], D_lowSpaceList[index][dataSelected, :])
resultShep = normalized_stress(D_highSpace[dataSelected, :], D_lowSpaceList[index][dataSelected, :])
#resultShep = shepard_diagram_correlation(D_highSpace[dataSelected, :], D_lowSpaceList[index][dataSelected, :])
metricNeigh.append(resultNeigh)
metricTrust.append(resultTrust)
metricCont.append(resultContinuity)
metricStress.append(resultStress)
metricShepCorr.append(resultShep)
max_value_neigh = max(metricNeigh)
min_value_neigh = min(metricNeigh)
max_value_trust = max(metricTrust)
min_value_trust = min(metricTrust)
max_value_cont = max(metricCont)
min_value_cont = min(metricCont)
max_value_stress = max(metricStress)
min_value_stress = min(metricStress)
max_value_shep = max(metricShepCorr)
min_value_shep = min(metricShepCorr)
global metricsMatrixEntireSel
metricsMatrixEntireSel = []
for index, data in enumerate(metricTrust):
#valueNeigh = (metricNeigh[index] - min_value_neigh) / (max_value_neigh - min_value_neigh)
valueNeigh = (metricTrust[index] - min_value_trust) / (max_value_trust - min_value_trust)
valueTrust = (metricTrust[index] - min_value_trust) / (max_value_trust - min_value_trust)
valueCont = (metricCont[index] - min_value_cont) / (max_value_cont - min_value_cont)
valueStress = (metricStress[index] - min_value_stress) / (max_value_stress - min_value_stress)
valueShep = (metricShepCorr[index] - min_value_shep) / (max_value_shep - min_value_shep)
metricsMatrixEntireSel.append([valueNeigh,valueTrust,valueCont,valueStress,valueShep])
sortNeigh = sorted(range(len(metricNeigh)), key=lambda k: metricNeigh[k], reverse=True)
sortTrust = sorted(range(len(metricTrust)), key=lambda k: metricTrust[k], reverse=True)
sortCont = sorted(range(len(metricCont)), key=lambda k: metricCont[k], reverse=True)
sortStress = sorted(range(len(metricStress)), key=lambda k: metricStress[k], reverse=True)
sortShepCorr = sorted(range(len(metricShepCorr)), key=lambda k: metricShepCorr[k], reverse=True)
global metricsMatrixSel
metricsMatrixSel = []
metricsMatrixSel.append(sortNeigh)
metricsMatrixSel.append(sortTrust)
metricsMatrixSel.append(sortCont)
metricsMatrixSel.append(sortStress)
metricsMatrixSel.append(sortShepCorr)
return 'OK'
@app.route('/senderOptimizer')
def SendOptimizedProjections():
global metricsMatrixSel
global metricsMatrixEntireSel
return jsonify({'metrics': metricsMatrixSel, 'metricsEntire': metricsMatrixEntireSel })
if __name__ == '__main__':
app.run("0.0.0.0", "5000")
app.run("0.0.0.0", "5000")

Loading…
Cancel
Save