diff options
author | 20001LastOrder <boqi.chen@mail.mcgill.ca> | 2019-07-10 10:56:00 -0400 |
---|---|---|
committer | 20001LastOrder <boqi.chen@mail.mcgill.ca> | 2019-07-10 10:56:00 -0400 |
commit | 991dacefdb8f78fccc359d3d2ec836dc2e7fc80a (patch) | |
tree | 6b18aa59c5f711a845aa9e3e5cf3fd3632ad7a33 /Metrics/Metrics-Calculation/metrics_plot/utils | |
parent | add sample domain for measuring realistic metrics (diff) | |
download | VIATRA-Generator-991dacefdb8f78fccc359d3d2ec836dc2e7fc80a.tar.gz VIATRA-Generator-991dacefdb8f78fccc359d3d2ec836dc2e7fc80a.tar.zst VIATRA-Generator-991dacefdb8f78fccc359d3d2ec836dc2e7fc80a.zip |
measurements for the different violation types, comparison for differenct generation config
Diffstat (limited to 'Metrics/Metrics-Calculation/metrics_plot/utils')
3 files changed, 49 insertions, 3 deletions
diff --git a/Metrics/Metrics-Calculation/metrics_plot/utils/DistributionMetrics.py b/Metrics/Metrics-Calculation/metrics_plot/utils/DistributionMetrics.py new file mode 100644 index 00000000..6e707108 --- /dev/null +++ b/Metrics/Metrics-Calculation/metrics_plot/utils/DistributionMetrics.py | |||
@@ -0,0 +1,43 @@ | |||
1 | from scipy import stats | ||
2 | from scipy.spatial import distance | ||
3 | |||
4 | def ks_distance(samples1, samples2): | ||
5 | value, p = stats.ks_2samp(samples1, samples2) | ||
6 | return (value, p) | ||
7 | |||
8 | def js_distance(samples1, samples2): | ||
9 | map1 = fromSamples(samples1) | ||
10 | map2 = fromSamples(samples2) | ||
11 | allKeys = set(map1.keys()) | set(map2.keys()) | ||
12 | dist1 = distributionFromMap(map1, allKeys) | ||
13 | dist2 = distributionFromMap(map2, allKeys) | ||
14 | return distance.jensenshannon(dist1, dist2, 2) | ||
15 | |||
16 | def euclidean_distance(samples1, samples2): | ||
17 | map1 = fromSamples(samples1) | ||
18 | map2 = fromSamples(samples2) | ||
19 | allKeys = set(map1.keys()) | set(map2.keys()) | ||
20 | dist1 = distributionFromMap(map1, allKeys) | ||
21 | dist2 = distributionFromMap(map2, allKeys) | ||
22 | distance = 0 | ||
23 | for i in range(len(dist2)): | ||
24 | distance += pow(dist1[i] - dist2[i], 2) | ||
25 | return pow(distance, 0.5) | ||
26 | |||
27 | def fromSamples(samples): | ||
28 | m = {} | ||
29 | length = len(samples) | ||
30 | for sample in samples: | ||
31 | value = m.get(sample, 0) | ||
32 | m[sample] = value + 1 | ||
33 | for key in list(m.keys()): | ||
34 | m[key] /= length | ||
35 | return m | ||
36 | |||
37 | def distributionFromMap(m, allKeys): | ||
38 | dist = [] | ||
39 | for key in allKeys: | ||
40 | value = m.get(key, 0) | ||
41 | dist.append(value) | ||
42 | return dist | ||
43 | |||
diff --git a/Metrics/Metrics-Calculation/metrics_plot/utils/GraphType.py b/Metrics/Metrics-Calculation/metrics_plot/utils/GraphType.py index 13754e80..827c2a5e 100644 --- a/Metrics/Metrics-Calculation/metrics_plot/utils/GraphType.py +++ b/Metrics/Metrics-Calculation/metrics_plot/utils/GraphType.py | |||
@@ -11,13 +11,13 @@ class GraphCollection: | |||
11 | self.nas = [] | 11 | self.nas = [] |
12 | self.mpcs = [] | 12 | self.mpcs = [] |
13 | self.name = name | 13 | self.name = name |
14 | self.size = number | ||
14 | models = reader.readmultiplefiles(path, number, shouldShuffle) | 15 | models = reader.readmultiplefiles(path, number, shouldShuffle) |
15 | for i in range(len(models)): | 16 | for i in range(len(models)): |
16 | contents, out_d, na, mpc = reader.getmetrics(models[i]) | 17 | contents, out_d, na, mpc = reader.getmetrics(models[i]) |
17 | self.out_ds.append(out_d) | 18 | self.out_ds.append(out_d) |
18 | self.nas.append(na) | 19 | self.nas.append(na) |
19 | self.mpcs.append(mpc) | 20 | self.mpcs.append(mpc) |
20 | print(len(self.out_ds)) | ||
21 | 21 | ||
22 | #Graph stat for one graph | 22 | #Graph stat for one graph |
23 | class GraphStat: | 23 | class GraphStat: |
diff --git a/Metrics/Metrics-Calculation/metrics_plot/utils/readCSV.py b/Metrics/Metrics-Calculation/metrics_plot/utils/readCSV.py index e0402519..b27a0ffc 100644 --- a/Metrics/Metrics-Calculation/metrics_plot/utils/readCSV.py +++ b/Metrics/Metrics-Calculation/metrics_plot/utils/readCSV.py | |||
@@ -24,9 +24,12 @@ def readcsvfile(filename): | |||
24 | # meta models are string | 24 | # meta models are string |
25 | elif(arr[0] == constants.METAMODEL): | 25 | elif(arr[0] == constants.METAMODEL): |
26 | contents[constants.METAMODEL] = arr[1:] | 26 | contents[constants.METAMODEL] = arr[1:] |
27 | # all other contants are integer | 27 | # NA and OD are integers |
28 | else: | 28 | else: |
29 | contents[arr[0]] = list(map(int, arr[1:])) | 29 | try: |
30 | contents[arr[0]] = list(map(int, arr[1:])) | ||
31 | except: | ||
32 | print(arr[0], ' is not integer') | ||
30 | f.close() | 33 | f.close() |
31 | return contents | 34 | return contents |
32 | 35 | ||