Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
Supervised MultiModal Integration Tool
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container registry
Model registry
Analyze
Contributor analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Baptiste Bauvin
Supervised MultiModal Integration Tool
Commits
33374943
Commit
33374943
authored
6 years ago
by
Baptiste Bauvin
Browse files
Options
Downloads
Patches
Plain Diff
Simplified error analysis plotting
parent
397f17f4
No related branches found
No related tags found
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
multiview_platform/MonoMultiViewClassifiers/ResultAnalysis.py
+116
-167
116 additions, 167 deletions
...iview_platform/MonoMultiViewClassifiers/ResultAnalysis.py
with
116 additions
and
167 deletions
multiview_platform/MonoMultiViewClassifiers/ResultAnalysis.py
+
116
−
167
View file @
33374943
...
@@ -119,7 +119,7 @@ def getExampleErrorsBiclass(groud_truth, results):
...
@@ -119,7 +119,7 @@ def getExampleErrorsBiclass(groud_truth, results):
errorOnExamples
=
np
.
equal
(
classifierResult
.
full_labels_pred
,
groud_truth
).
astype
(
int
)
errorOnExamples
=
np
.
equal
(
classifierResult
.
full_labels_pred
,
groud_truth
).
astype
(
int
)
unseenExamples
=
np
.
where
(
groud_truth
==-
100
)[
0
]
unseenExamples
=
np
.
where
(
groud_truth
==-
100
)[
0
]
errorOnExamples
[
unseenExamples
]
=-
100
errorOnExamples
[
unseenExamples
]
=-
100
exampleErrors
[
classifierResult
.
get_classifier_name
()]
=
errorOnExamples
exampleErrors
[
classifierResult
.
get_classifier_name
()]
=
{
"
errorOnExamples
"
:
errorOnExamples
}
return
exampleErrors
return
exampleErrors
...
@@ -215,6 +215,12 @@ def plotMetricScores(trainScores, testScores, names, nbResults, metricName, file
...
@@ -215,6 +215,12 @@ def plotMetricScores(trainScores, testScores, names, nbResults, metricName, file
The plotted metric
'
s name
The plotted metric
'
s name
fileName : str
fileName : str
The name of the file where the figure will be saved.
The name of the file where the figure will be saved.
tag : str
Some text to personalize the title, must start with a whitespace.
train_STDs : np.array of floats or None
The array containing the standard deviations for the averaged scores on the training set.
test_STDs : np.array of floats or None
The array containing the standard deviations for the averaged scores on the testing set.
Returns
Returns
-------
-------
...
@@ -228,8 +234,8 @@ def plotMetricScores(trainScores, testScores, names, nbResults, metricName, file
...
@@ -228,8 +234,8 @@ def plotMetricScores(trainScores, testScores, names, nbResults, metricName, file
f
,
ax
=
plt
.
subplots
(
nrows
=
1
,
ncols
=
1
,
**
figKW
)
f
,
ax
=
plt
.
subplots
(
nrows
=
1
,
ncols
=
1
,
**
figKW
)
ax
.
set_title
(
metricName
+
"
\n
"
+
tag
+
"
scores for each classifier
"
)
ax
.
set_title
(
metricName
+
"
\n
"
+
tag
+
"
scores for each classifier
"
)
rects
=
ax
.
bar
(
range
(
nbResults
),
testScores
,
barWidth
,
color
=
"
0.
8
"
,
yerr
=
test_STDs
)
rects
=
ax
.
bar
(
range
(
nbResults
),
testScores
,
barWidth
,
color
=
"
0.
1
"
,
yerr
=
test_STDs
)
rect2
=
ax
.
bar
(
np
.
arange
(
nbResults
)
+
barWidth
,
trainScores
,
barWidth
,
color
=
"
0.
5
"
,
yerr
=
train_STDs
)
rect2
=
ax
.
bar
(
np
.
arange
(
nbResults
)
+
barWidth
,
trainScores
,
barWidth
,
color
=
"
0.
8
"
,
yerr
=
train_STDs
)
autolabel
(
rects
,
ax
,
set
=
1
,
std
=
test_STDs
)
autolabel
(
rects
,
ax
,
set
=
1
,
std
=
test_STDs
)
autolabel
(
rect2
,
ax
,
set
=
2
,
std
=
train_STDs
)
autolabel
(
rect2
,
ax
,
set
=
2
,
std
=
train_STDs
)
...
@@ -274,58 +280,81 @@ def publishMetricsGraphs(metricsScores, directory, databaseName, labelsNames):
...
@@ -274,58 +280,81 @@ def publishMetricsGraphs(metricsScores, directory, databaseName, labelsNames):
logging
.
debug
(
"
Done:
\t
Biclass score graph generation for
"
+
metricName
)
logging
.
debug
(
"
Done:
\t
Biclass score graph generation for
"
+
metricName
)
def
publishExampleErrors
(
exampleErrors
,
directory
,
databaseName
,
labelsNames
,
minSize
=
10
):
def
iterCmap
(
statsIter
):
logging
.
debug
(
"
Start:
\t
Biclass Label analysis figure generation
"
)
cmapList
=
[
"
red
"
,
"
0.0
"
]
+
[
str
(
float
((
i
+
1
))
/
statsIter
)
for
i
in
range
(
statsIter
)]
nbClassifiers
=
len
(
exampleErrors
)
cmap
=
mpl
.
colors
.
ListedColormap
(
cmapList
)
nbExamples
=
len
(
list
(
exampleErrors
.
values
())[
0
])
bounds
=
[
-
100
*
statsIter
-
0.5
,
-
0.5
]
nbIter
=
2
for
i
in
range
(
statsIter
):
data
=
np
.
zeros
((
nbExamples
,
nbClassifiers
*
nbIter
))
bounds
.
append
(
i
+
0.5
)
temp_data
=
np
.
zeros
((
nbExamples
,
nbClassifiers
))
bounds
.
append
(
statsIter
+
0.5
)
classifiersNames
=
exampleErrors
.
keys
()
for
classifierIndex
,
(
classifierName
,
errorOnExamples
)
in
enumerate
(
exampleErrors
.
items
()):
for
iterIndex
in
range
(
nbIter
):
data
[:,
classifierIndex
*
nbIter
+
iterIndex
]
=
errorOnExamples
temp_data
[:,
classifierIndex
]
=
errorOnExamples
figWidth
=
max
(
nbClassifiers
/
2
,
minSize
)
figHeight
=
max
(
nbExamples
/
20
,
minSize
)
figKW
=
{
"
figsize
"
:(
figWidth
,
figHeight
)}
fig
,
ax
=
plt
.
subplots
(
nrows
=
1
,
ncols
=
1
,
**
figKW
)
cmap
=
mpl
.
colors
.
ListedColormap
([
'
black
'
,
'
red
'
,
'
green
'
])
bounds
=
[
-
100.5
,
-
0.5
,
0.5
,
1.5
]
norm
=
mpl
.
colors
.
BoundaryNorm
(
bounds
,
cmap
.
N
)
norm
=
mpl
.
colors
.
BoundaryNorm
(
bounds
,
cmap
.
N
)
return
cmap
,
norm
plt
.
imshow
(
data
,
interpolation
=
'
none
'
,
cmap
=
cmap
,
norm
=
norm
,
aspect
=
'
auto
'
)
def
publish2Dplot
(
data
,
classifiersNames
,
nbClassifiers
,
nbExamples
,
nbCopies
,
fileName
,
minSize
=
10
,
width_denominator
=
2.0
,
height_denominator
=
20.0
,
statsIter
=
1
):
figWidth
=
max
(
nbClassifiers
/
width_denominator
,
minSize
)
figHeight
=
max
(
nbExamples
/
height_denominator
,
minSize
)
figKW
=
{
"
figsize
"
:
(
figWidth
,
figHeight
)}
fig
,
ax
=
plt
.
subplots
(
nrows
=
1
,
ncols
=
1
,
**
figKW
)
cmap
,
norm
=
iterCmap
(
statsIter
)
cax
=
plt
.
imshow
(
data
,
interpolation
=
'
none
'
,
cmap
=
cmap
,
norm
=
norm
,
aspect
=
'
auto
'
)
plt
.
title
(
'
Errors depending on the classifier
'
)
plt
.
title
(
'
Errors depending on the classifier
'
)
ticks
=
np
.
arange
(
nb
Iter
/
2
-
0.5
,
nbClassifiers
*
nb
Iter
,
nbIter
)
ticks
=
np
.
arange
(
nb
Copies
/
2
-
0.5
,
nbClassifiers
*
nb
Copies
,
nbCopies
)
labels
=
classifiersNames
labels
=
classifiersNames
plt
.
xticks
(
ticks
,
labels
,
rotation
=
"
vertical
"
)
plt
.
xticks
(
ticks
,
labels
,
rotation
=
"
vertical
"
)
red_patch
=
mpatches
.
Patch
(
color
=
'
red
'
,
label
=
'
Classifier failed
'
)
cbar
=
fig
.
colorbar
(
cax
,
ticks
=
[
-
100
*
statsIter
/
2
,
0
,
statsIter
])
green_patch
=
mpatches
.
Patch
(
color
=
'
green
'
,
label
=
'
Classifier succeded
'
)
cbar
.
ax
.
set_yticklabels
([
'
Unseen
'
,
'
Always Wrong
'
,
'
Always Right
'
])
black_patch
=
mpatches
.
Patch
(
color
=
'
black
'
,
label
=
'
Unseen data
'
)
plt
.
legend
(
handles
=
[
red_patch
,
green_patch
,
black_patch
],
bbox_to_anchor
=
(
0
,
1.02
,
1
,
0.2
),
loc
=
"
lower left
"
,
mode
=
"
expand
"
,
borderaxespad
=
0
,
ncol
=
3
)
fig
.
tight_layout
()
fig
.
tight_layout
()
fig
.
savefig
(
directory
+
time
.
strftime
(
"
%Y_%m_%d-%H_%M_%S
"
)
+
"
-
"
+
databaseName
+
"
-
"
+
"
_vs_
"
.
join
(
labelsNames
)
+
"
-
error_analysis.png
"
,
bbox_inches
=
"
tight
"
)
fig
.
savefig
(
fileName
+
"
error_analysis
_2D
.png
"
,
bbox_inches
=
"
tight
"
)
plt
.
close
()
plt
.
close
()
logging
.
debug
(
"
Done:
\t
Biclass Label analysis figure generation
"
)
logging
.
debug
(
"
Start:
\t
Biclass Error by example figure generation
"
)
errorOnExamples
=
-
1
*
np
.
sum
(
data
,
axis
=
1
)
/
nbIter
+
nbClassifiers
def
publishErrorsBarPlot
(
errorOnExamples
,
nbClassifiers
,
nbExamples
,
fileName
):
np
.
savetxt
(
directory
+
"
clf_errors_doubled.csv
"
,
data
,
delimiter
=
"
,
"
)
np
.
savetxt
(
directory
+
"
example_errors.csv
"
,
temp_data
,
delimiter
=
"
,
"
)
fig
,
ax
=
plt
.
subplots
()
fig
,
ax
=
plt
.
subplots
()
x
=
np
.
arange
(
nbExamples
)
x
=
np
.
arange
(
nbExamples
)
plt
.
bar
(
x
,
errorOnExamples
)
plt
.
bar
(
x
,
errorOnExamples
)
plt
.
ylim
([
0
,
nbClassifiers
])
plt
.
ylim
([
0
,
nbClassifiers
])
plt
.
title
(
"
Number of classifiers that failed to classify each example
"
)
plt
.
title
(
"
Number of classifiers that failed to classify each example
"
)
fig
.
savefig
(
directory
+
time
.
strftime
(
"
%Y_%m_%d-%H_%M_%S
"
)
+
"
-
"
+
databas
eName
+
"
-
"
+
"
_vs_
"
.
join
(
labelsNames
)
+
"
-example_errors
.png
"
)
fig
.
savefig
(
fil
eName
+
"
error_analysis_bar
.png
"
)
plt
.
close
()
plt
.
close
()
logging
.
debug
(
"
Done:
\t
Biclass Error by example figure generation
"
)
def
gen_error_data
(
example_errors
,
base_file_name
,
nbCopies
=
2
):
nbClassifiers
=
len
(
example_errors
)
nbExamples
=
len
(
list
(
example_errors
.
values
())[
0
][
"
errorOnExamples
"
])
classifiersNames
=
example_errors
.
keys
()
data
=
np
.
zeros
((
nbExamples
,
nbClassifiers
*
nbCopies
))
temp_data
=
np
.
zeros
((
nbExamples
,
nbClassifiers
))
for
classifierIndex
,
(
classifierName
,
errorOnExamples
)
in
enumerate
(
example_errors
.
items
()):
for
iterIndex
in
range
(
nbCopies
):
data
[:,
classifierIndex
*
nbCopies
+
iterIndex
]
=
errorOnExamples
[
"
errorOnExamples
"
]
temp_data
[:,
classifierIndex
]
=
errorOnExamples
[
"
errorOnExamples
"
]
errorOnExamples
=
-
1
*
np
.
sum
(
data
,
axis
=
1
)
/
nbCopies
+
nbClassifiers
np
.
savetxt
(
base_file_name
+
"
2D_plot_data.csv
"
,
data
,
delimiter
=
"
,
"
)
np
.
savetxt
(
base_file_name
+
"
bar_plot_data.csv
"
,
temp_data
,
delimiter
=
"
,
"
)
return
nbClassifiers
,
nbExamples
,
nbCopies
,
classifiersNames
,
data
,
errorOnExamples
def
publishExampleErrors
(
exampleErrors
,
directory
,
databaseName
,
labelsNames
):
logging
.
debug
(
"
Start:
\t
Biclass Label analysis figure generation
"
)
base_file_name
=
directory
+
time
.
strftime
(
"
%Y_%m_%d-%H_%M_%S
"
)
+
"
-
"
+
databaseName
+
"
-
"
+
"
_vs_
"
.
join
(
labelsNames
)
+
"
-
"
nbClassifiers
,
nbExamples
,
nCopies
,
classifiersNames
,
data
,
errorOnExamples
=
gen_error_data
(
exampleErrors
,
base_file_name
)
publish2Dplot
(
data
,
classifiersNames
,
nbClassifiers
,
nbExamples
,
nCopies
,
base_file_name
)
publishErrorsBarPlot
(
errorOnExamples
,
nbClassifiers
,
nbExamples
,
base_file_name
)
logging
.
debug
(
"
Done:
\t
Biclass Label analysis figures generation
"
)
def
analyzeBiclass
(
results
,
benchmarkArgumentDictionaries
,
statsIter
,
metrics
):
def
analyzeBiclass
(
results
,
benchmarkArgumentDictionaries
,
statsIter
,
metrics
):
...
@@ -386,7 +415,7 @@ def getErrorOnLabelsMulticlass(multiclassResults, multiclassLabels):
...
@@ -386,7 +415,7 @@ def getErrorOnLabelsMulticlass(multiclassResults, multiclassLabels):
for
iterIndex
,
iterResults
in
enumerate
(
multiclassResults
):
for
iterIndex
,
iterResults
in
enumerate
(
multiclassResults
):
for
classifierName
,
classifierResults
in
iterResults
.
items
():
for
classifierName
,
classifierResults
in
iterResults
.
items
():
errorOnExamples
=
classifierResults
[
"
labels
"
]
==
multiclassLabels
errorOnExamples
=
classifierResults
[
"
labels
"
]
==
multiclassLabels
multiclassResults
[
iterIndex
][
classifierName
][
"
errorOnExample
"
]
=
errorOnExamples
.
astype
(
int
)
multiclassResults
[
iterIndex
][
classifierName
][
"
errorOnExample
s
"
]
=
errorOnExamples
.
astype
(
int
)
logging
.
debug
(
"
Done:
\t
Getting errors on each example for each classifier
"
)
logging
.
debug
(
"
Done:
\t
Getting errors on each example for each classifier
"
)
...
@@ -416,50 +445,18 @@ def publishMulticlassScores(multiclassResults, metrics, statsIter, direcories, d
...
@@ -416,50 +445,18 @@ def publishMulticlassScores(multiclassResults, metrics, statsIter, direcories, d
def
publishMulticlassExmapleErrors
(
multiclassResults
,
directories
,
databaseName
,
minSize
=
10
):
def
publishMulticlassExmapleErrors
(
multiclassResults
,
directories
,
databaseName
,
minSize
=
10
):
for
iterIndex
,
multiclassResult
in
enumerate
(
multiclassResults
):
for
iterIndex
,
multiclassResult
in
enumerate
(
multiclassResults
):
directory
=
directories
[
iterIndex
]
directory
=
directories
[
iterIndex
]
logging
.
debug
(
"
Start:
\t
Label analysis figure generation
"
)
logging
.
debug
(
"
Start:
\t
Multiclass Label analysis figure generation
"
)
nbClassifiers
=
len
(
multiclassResult
)
nbExamples
=
len
(
list
(
multiclassResult
.
values
())[
0
][
"
errorOnExample
"
])
nbIter
=
2
data
=
np
.
zeros
((
nbExamples
,
nbClassifiers
*
nbIter
))
temp_data
=
np
.
zeros
((
nbExamples
,
nbClassifiers
))
classifiersNames
=
multiclassResult
.
keys
()
for
classifierIndex
,
(
classifierName
,
errorOnExamplesDict
)
in
enumerate
(
multiclassResult
.
items
()):
for
iterIndex
in
range
(
nbIter
):
data
[:,
classifierIndex
*
nbIter
+
iterIndex
]
=
errorOnExamplesDict
[
"
errorOnExample
"
]
temp_data
[:,
classifierIndex
]
=
errorOnExamplesDict
[
"
errorOnExample
"
]
figWidth
=
max
(
nbClassifiers
/
2
,
minSize
)
figHeight
=
max
(
nbExamples
/
20
,
minSize
)
figKW
=
{
"
figsize
"
:(
figWidth
,
figHeight
)}
fig
,
ax
=
plt
.
subplots
(
nrows
=
1
,
ncols
=
1
,
**
figKW
)
cmap
=
mpl
.
colors
.
ListedColormap
([
'
red
'
,
'
green
'
])
bounds
=
[
-
0.5
,
0.5
,
1.5
]
norm
=
mpl
.
colors
.
BoundaryNorm
(
bounds
,
cmap
.
N
)
cax
=
plt
.
imshow
(
data
,
interpolation
=
'
none
'
,
cmap
=
cmap
,
norm
=
norm
,
aspect
=
'
auto
'
)
base_file_name
=
directory
+
time
.
strftime
(
"
%Y_%m_%d-%H_%M_%S
"
)
+
"
-
"
+
databaseName
+
"
-
"
plt
.
title
(
'
Errors depending on the classifier
'
)
ticks
=
np
.
arange
(
nbIter
/
2
-
0.5
,
nbClassifiers
*
nbIter
,
nbIter
)
labels
=
classifiersNames
plt
.
xticks
(
ticks
,
labels
,
rotation
=
"
vertical
"
)
red_patch
=
mpatches
.
Patch
(
color
=
'
red
'
,
label
=
'
Classifier failed
'
)
green_patch
=
mpatches
.
Patch
(
color
=
'
green
'
,
label
=
'
Classifier succeded
'
)
plt
.
legend
(
handles
=
[
red_patch
,
green_patch
],
bbox_to_anchor
=
(
0
,
1.02
,
1
,
0.2
),
loc
=
"
lower left
"
,
mode
=
"
expand
"
,
borderaxespad
=
0
,
ncol
=
2
)
fig
.
tight_layout
()
fig
.
savefig
(
directory
+
time
.
strftime
(
"
%Y_%m_%d-%H_%M_%S
"
)
+
"
-
"
+
databaseName
+
"
-error_analysis.png
"
,
bbox_inches
=
"
tight
"
)
plt
.
close
()
logging
.
debug
(
"
Done:
\t
Label analysis figure generation
"
)
logging
.
debug
(
"
Start:
\t
Error by example figure generation
"
)
nbClassifiers
,
nbExamples
,
nCopies
,
classifiersNames
,
data
,
errorOnExamples
=
gen_error_data
(
multiclassResult
,
errorOnExamples
=
-
1
*
np
.
sum
(
data
,
axis
=
1
)
/
nbIter
+
nbClassifiers
base_file_name
)
np
.
savetxt
(
directory
+
time
.
strftime
(
"
%Y_%m_%d-%H_%M_%S
"
)
+
"
-clf_errors_doubled.csv
"
,
data
,
delimiter
=
"
,
"
)
np
.
savetxt
(
directory
+
time
.
strftime
(
"
%Y_%m_%d-%H_%M_%S
"
)
+
"
-example_errors.csv
"
,
temp_data
,
delimiter
=
"
,
"
)
publish2Dplot
(
data
,
classifiersNames
,
nbClassifiers
,
nbExamples
,
nCopies
,
base_file_name
)
fig
,
ax
=
plt
.
subplots
()
x
=
np
.
arange
(
nbExamples
)
publishErrorsBarPlot
(
errorOnExamples
,
nbClassifiers
,
nbExamples
,
base_file_name
)
plt
.
bar
(
x
,
errorOnExamples
)
plt
.
ylim
([
0
,
nbClassifiers
])
logging
.
debug
(
"
Done:
\t
Multiclass Label analysis figure generation
"
)
plt
.
title
(
"
Number of classifiers that failed to classify each example
"
)
fig
.
savefig
(
directory
+
time
.
strftime
(
"
%Y_%m_%d-%H_%M_%S
"
)
+
"
-
"
+
databaseName
+
"
-example_errors.png
"
)
plt
.
close
()
logging
.
debug
(
"
Done:
\t
Error by example figure generation
"
)
def
analyzeMulticlass
(
results
,
statsIter
,
benchmarkArgumentDictionaries
,
nbExamples
,
nbLabels
,
multiclassLabels
,
def
analyzeMulticlass
(
results
,
statsIter
,
benchmarkArgumentDictionaries
,
nbExamples
,
nbLabels
,
multiclassLabels
,
...
@@ -504,6 +501,7 @@ def analyzeMulticlass(results, statsIter, benchmarkArgumentDictionaries, nbExamp
...
@@ -504,6 +501,7 @@ def analyzeMulticlass(results, statsIter, benchmarkArgumentDictionaries, nbExamp
publishMulticlassExmapleErrors
(
multiclassResults
,
directories
,
benchmarkArgumentDictionaries
[
0
][
"
args
"
].
name
)
publishMulticlassExmapleErrors
(
multiclassResults
,
directories
,
benchmarkArgumentDictionaries
[
0
][
"
args
"
].
name
)
return
multiclassResults
return
multiclassResults
def
numpy_mean_and_std
(
scores_array
):
def
numpy_mean_and_std
(
scores_array
):
return
np
.
mean
(
scores_array
,
axis
=
1
),
np
.
std
(
scores_array
,
axis
=
1
)
return
np
.
mean
(
scores_array
,
axis
=
1
),
np
.
std
(
scores_array
,
axis
=
1
)
...
@@ -532,57 +530,30 @@ def publishIterBiclassMetricsScores(iterResults, directory, labelsDictionary, cl
...
@@ -532,57 +530,30 @@ def publishIterBiclassMetricsScores(iterResults, directory, labelsDictionary, cl
def
iterCmap
(
statsIter
):
def
gen_error_dat_glob
(
combiResults
,
statsIter
,
base_file_name
):
cmapList
=
[
"
red
"
,
"
0.0
"
]
nbExamples
=
combiResults
[
"
errorOnExamples
"
].
shape
[
1
]
for
i
in
range
(
statsIter
):
nbClassifiers
=
combiResults
[
"
errorOnExamples
"
].
shape
[
0
]
cmapList
.
append
(
str
(
float
((
i
+
1
))
/
statsIter
))
data
=
np
.
transpose
(
combiResults
[
"
errorOnExamples
"
])
cmap
=
mpl
.
colors
.
ListedColormap
(
cmapList
)
errorOnExamples
=
-
1
*
np
.
sum
(
data
,
axis
=
1
)
+
(
nbClassifiers
*
statsIter
)
bounds
=
[
-
100
*
statsIter
-
0.5
,
-
0.5
]
np
.
savetxt
(
base_file_name
+
"
clf_errors.csv
"
,
data
,
delimiter
=
"
,
"
)
for
i
in
range
(
statsIter
):
np
.
savetxt
(
base_file_name
+
"
example_errors.csv
"
,
errorOnExamples
,
delimiter
=
"
,
"
)
bounds
.
append
(
i
+
0.5
)
return
nbExamples
,
nbClassifiers
,
data
,
errorOnExamples
bounds
.
append
(
statsIter
+
0.5
)
norm
=
mpl
.
colors
.
BoundaryNorm
(
bounds
,
cmap
.
N
)
return
cmap
,
norm
def
publishIterBiclassExampleErrors
(
iterResults
,
directory
,
labelsDictionary
,
classifiersDict
,
statsIter
,
minSize
=
10
):
def
publishIterBiclassExampleErrors
(
iterResults
,
directory
,
labelsDictionary
,
classifiersDict
,
statsIter
,
minSize
=
10
):
for
labelsCombination
,
combiResults
in
iterResults
.
items
():
for
labelsCombination
,
combiResults
in
iterResults
.
items
():
currentDirectory
=
directory
+
labelsDictionary
[
int
(
labelsCombination
[
0
])]
+
"
-vs-
"
+
labelsDictionary
[
int
(
labelsCombination
[
1
])]
+
"
/
"
base_file_name
=
directory
+
labelsDictionary
[
int
(
labelsCombination
[
0
])]
+
"
-vs-
"
+
\
reversedClassifiersDict
=
dict
((
value
,
key
)
for
key
,
value
in
classifiersDict
.
items
())
labelsDictionary
[
int
(
labelsCombination
[
1
])]
+
"
/
"
+
time
.
strftime
(
"
%Y_%m_%d-%H_%M_%S
"
)
+
"
-
"
classifiersNames
=
[
reversedClassifiersDict
[
i
]
for
i
in
range
(
len
(
classifiersDict
))]
classifiersNames
=
[
classifierName
for
classifierName
in
classifiersDict
.
values
()]
logging
.
debug
(
"
Start:
\t
Global biclass label analysis figure generation
"
)
logging
.
debug
(
"
Start:
\t
Global label analysis figure generation
"
)
nbExamples
,
nbClassifiers
,
data
,
errorOnExamples
=
gen_error_dat_glob
(
combiResults
,
statsIter
,
base_file_name
)
nbExamples
=
combiResults
[
"
errorOnExamples
"
].
shape
[
1
]
nbClassifiers
=
combiResults
[
"
errorOnExamples
"
].
shape
[
0
]
figWidth
=
max
(
nbClassifiers
/
2
,
minSize
)
figHeight
=
max
(
nbExamples
/
20
,
minSize
)
figKW
=
{
"
figsize
"
:
(
figWidth
,
figHeight
)}
fig
,
ax
=
plt
.
subplots
(
nrows
=
1
,
ncols
=
1
,
**
figKW
)
data
=
np
.
transpose
(
combiResults
[
"
errorOnExamples
"
])
cmap
,
norm
=
iterCmap
(
statsIter
)
cax
=
plt
.
imshow
(
data
,
interpolation
=
'
none
'
,
cmap
=
cmap
,
norm
=
norm
,
aspect
=
'
auto
'
)
plt
.
title
(
'
Errors depending on the classifier
'
)
ticks
=
np
.
arange
(
nbClassifiers
)
plt
.
xticks
(
ticks
,
classifiersNames
,
rotation
=
"
vertical
"
)
cbar
=
fig
.
colorbar
(
cax
,
ticks
=
[
-
100
*
statsIter
/
2
,
0
,
statsIter
])
cbar
.
ax
.
set_yticklabels
([
'
Unseen
'
,
'
Always Wrong
'
,
'
Always Right
'
])
fig
.
tight_layout
()
fig
.
savefig
(
currentDirectory
+
time
.
strftime
(
"
%Y_%m_%d-%H_%M_%S
"
)
+
"
-error_analysis.png
"
)
plt
.
close
()
logging
.
debug
(
"
Done:
\t
Global label analysis figure generation
"
)
logging
.
debug
(
"
Start:
\t
Global error by example figure generation
"
)
publish2Dplot
(
data
,
classifiersNames
,
nbClassifiers
,
nbExamples
,
1
,
base_file_name
,
statsIter
=
statsIter
)
errorOnExamples
=
-
1
*
np
.
sum
(
data
,
axis
=
1
)
+
(
nbClassifiers
*
statsIter
)
np
.
savetxt
(
currentDirectory
+
time
.
strftime
(
"
%Y%m%d-%H%M%S
"
)
+
"
-clf_errors.csv
"
,
data
,
delimiter
=
"
,
"
)
publishErrorsBarPlot
(
errorOnExamples
,
nbClassifiers
*
statsIter
,
nbExamples
,
base_file_name
)
np
.
savetxt
(
currentDirectory
+
time
.
strftime
(
"
%Y%m%d-%H%M%S
"
)
+
"
-example_errors.csv
"
,
errorOnExamples
,
delimiter
=
"
,
"
)
fig
,
ax
=
plt
.
subplots
()
logging
.
debug
(
"
Done:
\t
Global biclass label analysis figures generation
"
)
x
=
np
.
arange
(
nbExamples
)
plt
.
bar
(
x
,
errorOnExamples
)
plt
.
ylim
([
0
,
nbClassifiers
*
statsIter
])
plt
.
title
(
"
Number of classifiers that failed to classify each example
"
)
fig
.
savefig
(
currentDirectory
+
time
.
strftime
(
"
%Y_%m_%d-%H_%M_%S
"
)
+
"
-example_errors.png
"
)
plt
.
close
()
logging
.
debug
(
"
Done:
\t
Global error by example figure generation
"
)
def
publishIterMulticlassMetricsScores
(
iterMulticlassResults
,
classifiersNames
,
dataBaseName
,
directory
,
statsIter
,
minSize
=
10
):
def
publishIterMulticlassMetricsScores
(
iterMulticlassResults
,
classifiersNames
,
dataBaseName
,
directory
,
statsIter
,
minSize
=
10
):
...
@@ -600,40 +571,18 @@ def publishIterMulticlassMetricsScores(iterMulticlassResults, classifiersNames,
...
@@ -600,40 +571,18 @@ def publishIterMulticlassMetricsScores(iterMulticlassResults, classifiersNames,
train_STDs
=
trainSTDs
,
test_STDs
=
testSTDs
)
train_STDs
=
trainSTDs
,
test_STDs
=
testSTDs
)
def
publishIterMulticlassExampleErrors
(
iterMulticlassResults
,
directory
,
classifiersNames
,
statsIter
,
minSize
=
10
):
def
publishIterMulticlassExampleErrors
(
iterMulticlassResults
,
directory
,
classifiersNames
,
statsIter
,
minSize
=
10
):
logging
.
debug
(
"
Start:
\t
Global label analysis figure generation
"
)
logging
.
debug
(
"
Start:
\t
Global multiclass label analysis figures generation
"
)
nbExamples
=
iterMulticlassResults
[
"
errorOnExamples
"
].
shape
[
1
]
base_file_name
=
directory
+
time
.
strftime
(
"
%Y_%m_%d-%H_%M_%S
"
)
+
"
-
"
nbClassifiers
=
iterMulticlassResults
[
"
errorOnExamples
"
].
shape
[
0
]
figWidth
=
max
(
nbClassifiers
/
2
,
minSize
)
figHeight
=
max
(
nbExamples
/
20
,
minSize
)
figKW
=
{
"
figsize
"
:
(
figWidth
,
figHeight
)}
fig
,
ax
=
plt
.
subplots
(
nrows
=
1
,
ncols
=
1
,
**
figKW
)
data
=
np
.
transpose
(
iterMulticlassResults
[
"
errorOnExamples
"
])
cax
=
plt
.
imshow
(
-
data
,
interpolation
=
'
none
'
,
cmap
=
"
Greys
"
,
aspect
=
'
auto
'
)
plt
.
title
(
'
Errors depending on the classifier
'
)
ticks
=
np
.
arange
(
nbClassifiers
)
plt
.
xticks
(
ticks
,
classifiersNames
,
rotation
=
"
vertical
"
)
cbar
=
fig
.
colorbar
(
cax
,
ticks
=
[
0
,
-
statsIter
])
cbar
.
ax
.
set_yticklabels
([
'
Always Wrong
'
,
'
Always Right
'
])
fig
.
tight_layout
()
fig
.
savefig
(
directory
+
time
.
strftime
(
"
%Y%m%d-%H%M%S
"
)
+
"
-error_analysis.png
"
)
plt
.
close
()
logging
.
debug
(
"
Done:
\t
Global label analysis figure generation
"
)
logging
.
debug
(
"
Start:
\t
Global error by example figure generation
"
)
nbExamples
,
nbClassifiers
,
data
,
errorOnExamples
=
gen_error_dat_glob
(
iterMulticlassResults
,
statsIter
,
base_file_name
)
errorOnExamples
=
-
1
*
np
.
sum
(
data
,
axis
=
1
)
+
(
nbClassifiers
*
statsIter
)
np
.
savetxt
(
directory
+
time
.
strftime
(
"
%Y_%m_%d-%H_%M_%S
"
)
+
"
-clf_errors.csv
"
,
data
,
delimiter
=
"
,
"
)
publish2Dplot
(
data
,
classifiersNames
,
nbClassifiers
,
nbExamples
,
1
,
base_file_name
,
statsIter
=
statsIter
)
np
.
savetxt
(
directory
+
time
.
strftime
(
"
%Y_%m_%d-%H_%M_%S
"
)
+
"
-example_errors.csv
"
,
errorOnExamples
,
delimiter
=
"
,
"
)
fig
,
ax
=
plt
.
subplots
()
publishErrorsBarPlot
(
errorOnExamples
,
nbClassifiers
*
statsIter
,
nbExamples
,
base_file_name
)
x
=
np
.
arange
(
nbExamples
)
plt
.
bar
(
x
,
errorOnExamples
)
logging
.
debug
(
"
Done:
\t
Global multiclass label analysis figures generation
"
)
plt
.
ylim
([
0
,
nbClassifiers
*
statsIter
])
plt
.
title
(
"
Number of classifiers that failed to classify each example
"
)
fig
.
savefig
(
directory
+
time
.
strftime
(
"
%Y_%m_%d-%H_%M_%S
"
)
+
"
-example_errors.png
"
)
plt
.
close
()
logging
.
debug
(
"
Done:
\t
Global error by example figure generation
"
)
def
analyzebiclassIter
(
biclassResults
,
metrics
,
statsIter
,
directory
,
labelsDictionary
,
dataBaseName
,
nbExamples
):
def
analyzebiclassIter
(
biclassResults
,
metrics
,
statsIter
,
directory
,
labelsDictionary
,
dataBaseName
,
nbExamples
):
...
@@ -666,7 +615,7 @@ def analyzebiclassIter(biclassResults, metrics, statsIter, directory, labelsDict
...
@@ -666,7 +615,7 @@ def analyzebiclassIter(biclassResults, metrics, statsIter, directory, labelsDict
iterBiclassResults
[
labelsComination
][
"
metricsScores
"
][
metric
[
0
]][
"
trainScores
"
][
classifiersDict
[
classifierName
],
iterIndex
]
=
trainScore
iterBiclassResults
[
labelsComination
][
"
metricsScores
"
][
metric
[
0
]][
"
trainScores
"
][
classifiersDict
[
classifierName
],
iterIndex
]
=
trainScore
iterBiclassResults
[
labelsComination
][
"
metricsScores
"
][
metric
[
0
]][
"
testScores
"
][
classifiersDict
[
classifierName
],
iterIndex
]
=
testScore
iterBiclassResults
[
labelsComination
][
"
metricsScores
"
][
metric
[
0
]][
"
testScores
"
][
classifiersDict
[
classifierName
],
iterIndex
]
=
testScore
for
classifierName
,
errorOnExample
in
results
[
"
exampleErrors
"
].
items
():
for
classifierName
,
errorOnExample
in
results
[
"
exampleErrors
"
].
items
():
iterBiclassResults
[
labelsComination
][
"
errorOnExamples
"
][
classifiersDict
[
classifierName
],
:]
+=
errorOnExample
iterBiclassResults
[
labelsComination
][
"
errorOnExamples
"
][
classifiersDict
[
classifierName
],
:]
+=
errorOnExample
[
"
errorOnExamples
"
]
publishIterBiclassMetricsScores
(
iterBiclassResults
,
directory
,
labelsDictionary
,
classifiersDict
,
dataBaseName
,
statsIter
)
publishIterBiclassMetricsScores
(
iterBiclassResults
,
directory
,
labelsDictionary
,
classifiersDict
,
dataBaseName
,
statsIter
)
publishIterBiclassExampleErrors
(
iterBiclassResults
,
directory
,
labelsDictionary
,
classifiersDict
,
statsIter
)
publishIterBiclassExampleErrors
(
iterBiclassResults
,
directory
,
labelsDictionary
,
classifiersDict
,
statsIter
)
...
@@ -693,7 +642,7 @@ def analyzeIterMulticlass(multiclassResults, directory, statsIter, metrics, data
...
@@ -693,7 +642,7 @@ def analyzeIterMulticlass(multiclassResults, directory, statsIter, metrics, data
np
.
zeros
((
nbClassifiers
,
statsIter
))}
np
.
zeros
((
nbClassifiers
,
statsIter
))}
iterMulticlassResults
[
"
metricsScores
"
][
metric
[
0
]][
"
trainScores
"
][
classifierIndex
,
iterIndex
]
=
classifierResults
[
"
metricsScores
"
][
metric
[
0
]][
0
]
iterMulticlassResults
[
"
metricsScores
"
][
metric
[
0
]][
"
trainScores
"
][
classifierIndex
,
iterIndex
]
=
classifierResults
[
"
metricsScores
"
][
metric
[
0
]][
0
]
iterMulticlassResults
[
"
metricsScores
"
][
metric
[
0
]][
"
testScores
"
][
classifierIndex
,
iterIndex
]
=
classifierResults
[
"
metricsScores
"
][
metric
[
0
]][
1
]
iterMulticlassResults
[
"
metricsScores
"
][
metric
[
0
]][
"
testScores
"
][
classifierIndex
,
iterIndex
]
=
classifierResults
[
"
metricsScores
"
][
metric
[
0
]][
1
]
iterMulticlassResults
[
"
errorOnExamples
"
][
classifierIndex
,
:]
+=
classifierResults
[
"
errorOnExample
"
]
iterMulticlassResults
[
"
errorOnExamples
"
][
classifierIndex
,
:]
+=
classifierResults
[
"
errorOnExample
s
"
]
logging
.
debug
(
"
Start:
\t
Getting mean results for multiclass classification
"
)
logging
.
debug
(
"
Start:
\t
Getting mean results for multiclass classification
"
)
classifiersNames
=
np
.
array
(
classifiersNames
)
classifiersNames
=
np
.
array
(
classifiersNames
)
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment