summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVivien Kraus <vivien@planete-kraus.eu>2021-04-07 12:05:36 +0200
committerVivien Kraus <vivien@planete-kraus.eu>2021-06-15 13:34:18 +0200
commitbb1ae75c56d34a65662d7b285333c595c0ddae7f (patch)
treee8baf732ce062603f0982ebc093fbd5451c45e65
Nouvelle version du manuscrit avec HTML
-rw-r--r--Makefile.am96
-rw-r--r--configure.ac24
-rw-r--r--data/feature_selection_lizeo.Rdatabin0 -> 7843 bytes
-rw-r--r--data/laps3l_tuning.Rdatabin0 -> 67479 bytes
-rw-r--r--data/lsmr_global_tuning.Rdatabin0 -> 1289 bytes
-rw-r--r--data/lsmr_local_tuning.Rdatabin0 -> 138363 bytes
-rw-r--r--data/rsms_protocol_4.Rdatabin0 -> 13436 bytes
-rw-r--r--data/rsms_test.Rdatabin0 -> 100294 bytes
-rw-r--r--images/bothsemimulti.svg71
-rw-r--r--images/dirty.svg77
-rw-r--r--images/featureselectionlizeo.R20
-rw-r--r--images/featureselectionlizeofull.R19
-rw-r--r--images/fig-co-training.svg95
-rw-r--r--images/fig-multi-vues.svg30
-rw-r--r--images/hireau-s.pngbin0 -> 33835 bytes
-rw-r--r--images/hireaugramme.pngbin0 -> 18494 bytes
-rwxr-xr-ximages/insurance_mae.R5
-rwxr-xr-ximages/insurance_rmse.R5
-rwxr-xr-ximages/l21m2.R20
-rw-r--r--images/laps3l_graph_code.R74
-rw-r--r--images/lasso.svg55
-rw-r--r--images/lizeo-donnees.pngbin0 -> 105511 bytes
-rw-r--r--images/lizeoclassif.svg55
-rw-r--r--images/lizeoreg.svg55
-rw-r--r--images/logo.pngbin0 -> 120775 bytes
-rw-r--r--images/lsmr_global_tuning.R94
-rw-r--r--images/lsmr_local_oes97.R5
-rw-r--r--images/lsmr_local_osales.R5
-rw-r--r--images/lsmr_local_scpf.R5
-rw-r--r--images/lsmr_local_sf2.R5
-rw-r--r--images/lsmr_local_tuning.R329
-rw-r--r--images/lsmrrsmsapprentissage.svg324
-rw-r--r--images/lsmrrsmsinference.svg475
-rw-r--r--images/nemenyi.R7
-rw-r--r--images/rsms_1.R69
-rw-r--r--images/rsms_2.R58
-rw-r--r--images/rsms_3.R94
-rw-r--r--images/rsms_4.R42
-rwxr-xr-ximages/twomoons.R50
-rw-r--r--images/wilcoxon.R6
-rw-r--r--manuscrit.html9309
-rw-r--r--manuscrit.xsl129
-rw-r--r--page-de-garde.xsl168
43 files changed, 11875 insertions, 0 deletions
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..db2e6c6
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,96 @@
+FIGURE_SOURCES = \
+ images/twomoons.R \
+ images/l21m2.R \
+ images/insurance_rmse.R \
+ images/insurance_mae.R \
+ images/lsmr_local_scpf.R \
+ images/lsmr_local_osales.R \
+ images/lsmr_local_sf2.R \
+ images/lsmr_local_oes97.R \
+ images/wilcoxon.R \
+ images/nemenyi.R \
+ images/rsms_1.R \
+ images/rsms_2.R \
+ images/rsms_3.R \
+ images/rsms_4.R \
+ images/featureselectionlizeo.R \
+ images/featureselectionlizeofull.R
+
+OTHER_FIGURES = \
+ images/fig-multi-vues.svg \
+ images/fig-co-training.svg \
+ images/lasso.svg \
+ images/dirty.svg \
+ images/hireaugramme.png \
+ images/hireau-s.png \
+ images/bothsemimulti.svg \
+ images/lizeo-donnees.png \
+ images/lizeoclassif.svg \
+ images/lizeoreg.svg \
+ images/lsmrrsmsapprentissage.svg \
+ images/lsmrrsmsinference.svg
+
+dist_noinst_SCRIPTS = $(FIGURE_SOURCES)
+
+pdf_DATA = manuscrit.pdf
+
+EXTRA_DIST = \
+ manuscrit.html \
+ images/logo.png \
+ manuscrit.xsl \
+ page-de-garde.xsl \
+ $(OTHER_FIGURES) \
+ images/laps3l_graph_code.R \
+ data/laps3l_tuning.Rdata \
+ images/lsmr_local_tuning.R \
+ data/lsmr_local_tuning.Rdata \
+ images/lsmr_global_tuning.R \
+ data/lsmr_global_tuning.Rdata \
+ data/rsms_test.Rdata \
+ data/rsms_protocol_4.Rdata \
+ data/feature_selection_lizeo.Rdata
+
+CLEANFILES = \
+ manuscrit.{tex,bib,aux,bbl,blg,loa,lof,log,lot,out,pdf,toc} \
+ page-de-garde.{aux,log,tex,pdf} \
+ $(FIGURE_SOURCES:.R=.svg) \
+ images/the-logo.png \
+ Rplots.pdf
+
+.PHONY: all clean-local
+
+all: manuscrit.pdf
+
+manuscrit.pdf: manuscrit.tex manuscrit.bib page-de-garde.pdf $(FIGURE_SOURCES:.R=.svg) $(OTHER_FIGURES)
+ HOME="$$PWD/inkscape-home" $(PDFLATEX) -shell-escape -interaction nonstopmode $<
+ $(BIBTEX) manuscrit
+ HOME="$$PWD/inkscape-home" $(PDFLATEX) -shell-escape -interaction nonstopmode $<
+ HOME="$$PWD/inkscape-home" $(PDFLATEX) -shell-escape -interaction nonstopmode $<
+
+page-de-garde.pdf: page-de-garde.tex images/the-logo.png
+ $(PDFLATEX) -shell-escape -interaction nonstopmode $<
+ $(PDFLATEX) -shell-escape -interaction nonstopmode $<
+
+images/the-logo.png: images/logo.png
+ mkdir -p images
+ cp $< $@
+
+manuscrit.tex: manuscrit.xsl manuscrit.html
+ $(XSLTPROC) $^ > $@-t
+ mv $@-t $@
+
+page-de-garde.tex: page-de-garde.xsl manuscrit.html
+ $(XSLTPROC) $^ > $@-t
+ mv $@-t $@
+
+manuscrit.bib: manuscrit.html
+ $(XSLTPROC) 'http://h4sp.planete-kraus.eu/transform/bibliography.xsl' $< > $@-t
+ mv $@-t $@
+
+%.svg: %.R
+ mkdir -p images
+ export ABS_TOP_SRCDIR="@abs_top_srcdir@" OUTPUT=$@-t; $(RSCRIPT) $<
+ mv $@-t $@
+
+clean-local:
+ rm -rf svg-inkscape inkscape-home
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..f3d9c44
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,24 @@
+# -*- Autoconf -*-
+# Process this file with autoconf to produce a configure script.
+
+AC_PREREQ([2.69])
+AC_INIT([manuscript], [SNAPSHOT], [vivien@planete-kraus.eu])
+AM_INIT_AUTOMAKE([foreign])
+
+# Checks for programs.
+AC_PROG_INSTALL
+AM_MISSING_PROG([RSCRIPT], [Rscript])
+AM_MISSING_PROG([PDFLATEX], [pdflatex])
+AM_MISSING_PROG([BIBTEX], [bibtex])
+AM_MISSING_PROG([XSLTPROC], [xsltproc])
+
+# Checks for libraries.
+
+# Checks for header files.
+
+# Checks for typedefs, structures, and compiler characteristics.
+
+# Checks for library functions.
+
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
diff --git a/data/feature_selection_lizeo.Rdata b/data/feature_selection_lizeo.Rdata
new file mode 100644
index 0000000..86a1d09
--- /dev/null
+++ b/data/feature_selection_lizeo.Rdata
Binary files differ
diff --git a/data/laps3l_tuning.Rdata b/data/laps3l_tuning.Rdata
new file mode 100644
index 0000000..87cf740
--- /dev/null
+++ b/data/laps3l_tuning.Rdata
Binary files differ
diff --git a/data/lsmr_global_tuning.Rdata b/data/lsmr_global_tuning.Rdata
new file mode 100644
index 0000000..e425854
--- /dev/null
+++ b/data/lsmr_global_tuning.Rdata
Binary files differ
diff --git a/data/lsmr_local_tuning.Rdata b/data/lsmr_local_tuning.Rdata
new file mode 100644
index 0000000..5c0dfc5
--- /dev/null
+++ b/data/lsmr_local_tuning.Rdata
Binary files differ
diff --git a/data/rsms_protocol_4.Rdata b/data/rsms_protocol_4.Rdata
new file mode 100644
index 0000000..c5f76ea
--- /dev/null
+++ b/data/rsms_protocol_4.Rdata
Binary files differ
diff --git a/data/rsms_test.Rdata b/data/rsms_test.Rdata
new file mode 100644
index 0000000..7595706
--- /dev/null
+++ b/data/rsms_test.Rdata
Binary files differ
diff --git a/images/bothsemimulti.svg b/images/bothsemimulti.svg
new file mode 100644
index 0000000..b03b092
--- /dev/null
+++ b/images/bothsemimulti.svg
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ version="1.1"
+ viewBox="-10 -10 220 220"
+ height="120mm"
+ width="120mm">
+ <defs>
+ <linearGradient id="modele-1" x1="0" x2="0" y1="0" y2="1">
+ <stop offset="0%" stop-color="blue" />
+ <stop offset="33%" stop-color="blue" />
+ <stop offset="34%" stop-color="orange" />
+ <stop offset="66%" stop-color="orange" />
+ <stop offset="67%" stop-color="green" />
+ <stop offset="100%" stop-color="green" />
+ </linearGradient>
+ <linearGradient id="modele-2" x1="0" x2="0" y1="0" y2="1">
+ <stop offset="0%" stop-color="blue" />
+ <stop offset="33%" stop-color="blue" />
+ <stop offset="34%" stop-color="orange" />
+ <stop offset="66%" stop-color="orange" />
+ <stop offset="67%" stop-color="blue" />
+ <stop offset="100%" stop-color="blue" />
+ </linearGradient>
+ <linearGradient id="modele-3" x1="0" x2="0" y1="0" y2="1">
+ <stop offset="0%" stop-color="white" />
+ <stop offset="33%" stop-color="white" />
+ <stop offset="34%" stop-color="red" />
+ <stop offset="66%" stop-color="red" />
+ <stop offset="67%" stop-color="orange" />
+ <stop offset="100%" stop-color="orange" />
+ </linearGradient>
+ </defs>
+ <g stroke="black" stroke-width="2" fill="white" id="individus">
+ <circle cx="25" cy="25" r="10" />
+ <circle cx="75" cy="25" r="10" />
+ <circle cx="25" cy="75" r="10" />
+ <circle cx="75" cy="75" r="10" />
+ <line x1="35" x2="65" y1="25" y2="25" />
+ <line x1="35" x2="65" y1="75" y2="75" />
+ </g>
+ <use xlink:href="#individus" transform="translate(100 0)" />
+ <g stroke="red" stroke-width="2">
+ <line x1="146.5" x2="153.5" y1="17" y2="33" />
+ <line x1="146.5" x2="153.5" y1="67" y2="83" />
+ </g>
+ <g font-size="8" stroke="black" text-anchor="middle">
+ <text x="25" y="30">-1</text>
+ <text x="75" y="30">-0.8</text>
+ <text x="25" y="80">+1</text>
+ <text x="75" y="80">+0.8</text>
+ <text x="125" y="30">-1</text>
+ <text x="175" y="30">+1</text>
+ <text x="125" y="80">-0.8</text>
+ <text x="175" y="80">+0.8</text>
+ </g>
+ <g stroke="black" stroke-width="2">
+ <line x1="50" x2="25" y1="125" y2="175" />
+ <circle cx="50" cy="125" r="10" fill="url(#modele-1)" />
+ <circle cx="25" cy="175" r="10" fill="url(#modele-2)"/>
+ <circle cx="75" cy="175" r="10" fill="url(#modele-3)"/>
+ </g>
+ <g stroke="black" stroke-width="2">
+ <line x1="150" x2="125" y1="125" y2="175" />
+ <line x1="134" x2="141" y1="142" y2="158" stroke="red" />
+ <circle cx="150" cy="125" r="10" fill="url(#modele-1)" />
+ <circle cx="125" cy="175" r="10" fill="url(#modele-3)"/>
+ <circle cx="175" cy="175" r="10" fill="url(#modele-2)"/>
+ </g>
+</svg>
diff --git a/images/dirty.svg b/images/dirty.svg
new file mode 100644
index 0000000..4e8e76f
--- /dev/null
+++ b/images/dirty.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ version="1.1"
+ viewBox="-10 -10 220 220"
+ height="100mm"
+ width="100mm">
+ <g stroke="black" stroke-width="0.7">
+ <rect x="0" y="0" width="100" height="200" fill="none" rx="5" />
+ <g fill="yellow" fill-opacity="0.2" stroke-width="0.5">
+ <g fill="none">
+ <rect x="140" y="160" width="10" height="10" />
+ </g>
+ <g fill="blue">
+ <rect x="0" y="20" width="100" height="100" />
+ <rect x="140" y="175" width="10" height="10" />
+ </g>
+ <rect x="80" y="120" width="20" height="20" />
+ <rect x="20" y="140" width="20" height="20" />
+ <rect x="60" y="160" width="20" height="20" />
+ <rect x="40" y="180" width="20" height="20" />
+ <rect x="140" y="190" width="10" height="10" />
+ </g>
+ </g>
+ <g stroke="black" stroke-width="0.3">
+ <line x1="110" x2="110" y1="0" y2="20" />
+ <line x1="118" x2="118" y1="20" y2="120" />
+ <line x1="110" x2="110" y1="120" y2="200" />
+ <g stroke-dasharray="4">
+ <line x1="100" x2="116" y1="0" y2="0" />
+ <line x1="100" x2="124" y1="20" y2="20" />
+ <line x1="100" x2="124" y1="120" y2="120" />
+ <line x1="100" x2="116" y1="200" y2="200" />
+ </g>
+ </g>
+ <g stroke="black" stroke-width="0.1">
+ <!-- The grid -->
+ <line x1="20" x2="20" y1="0" y2="200" />
+ <line x1="40" x2="40" y1="0" y2="200" />
+ <line x1="60" x2="60" y1="0" y2="200" />
+ <line x1="80" x2="80" y1="0" y2="200" />
+ <line x1="0" x2="100" y1="20" y2="20" />
+ <line x1="0" x2="100" y1="40" y2="40" />
+ <line x1="0" x2="100" y1="60" y2="60" />
+ <line x1="0" x2="100" y1="80" y2="80" />
+ <line x1="0" x2="100" y1="100" y2="100" />
+ <line x1="0" x2="100" y1="120" y2="120" />
+ <line x1="0" x2="100" y1="140" y2="140" />
+ <line x1="0" x2="100" y1="160" y2="160" />
+ <line x1="0" x2="100" y1="180" y2="180" />
+ </g>
+ <g stroke="black" stroke-width="0.7">
+ <line x1="130" x2="130" y1="150" y2="220" />
+ <line x1="130" x2="220" y1="150" y2="150" />
+ </g>
+ <g font-size="6px" font-family="serif">
+ <text x="125" y="14">
+ variables non pertinentes
+ </text>
+ <text x="125" y="70">
+ variables communes
+ </text>
+ <text x="125" y="135">
+ variables différenciantes
+ </text>
+ <text x="155" y="168">
+ $P = 0$, $Q = 0$
+ </text>
+ <text x="155" y="183">
+ $P = 0$, $Q \neq 0$
+ </text>
+ <text x="155" y="198">
+ $P \neq 0$, $Q = 0$
+ </text>
+ </g>
+</svg>
diff --git a/images/featureselectionlizeo.R b/images/featureselectionlizeo.R
new file mode 100644
index 0000000..7df6b8c
--- /dev/null
+++ b/images/featureselectionlizeo.R
@@ -0,0 +1,20 @@
+#!/usr/bin/env Rscript
+load (sprintf ("%s/data/feature_selection_lizeo.Rdata", Sys.getenv ("ABS_TOP_SRCDIR")))
+Sys.setlocale ("LC_ALL", "fr_FR.UTF-8")
+library ("magrittr")
+plot <- (feature_selection_lizeo
+ %>% dplyr::filter (algorithm != "rsms_full")
+ %>% dplyr::mutate (algorithm = ifelse (algorithm == "rsms", "\\textbf{RSMS}", algorithm))
+ %>% dplyr::mutate (algorithm = ifelse (algorithm == "mifs", "MIFS", algorithm))
+ %>% dplyr::mutate (algorithm = ifelse (algorithm == "rfs", "RFS", algorithm))
+ %>% dplyr::mutate (`% de variables sélectionnées` = n_features / max (n_features))
+ %>% dplyr::select (`Algorithme` = algorithm, `% de variables sélectionnées`, `aRMSE` = armse)
+ %>% dplyr::group_by (Algorithme, `% de variables sélectionnées`)
+ %>% dplyr::summarize (aRMSE = min (aRMSE))
+ %>% ggplot2::ggplot (ggplot2::aes (x = `% de variables sélectionnées`, y = aRMSE, color = Algorithme, linetype = Algorithme))
+ + ggplot2::geom_line ()
+ + ggplot2::scale_linetype_manual (values = c ("\\textbf{RSMS}" = "solid", "MIFS" = "dashed", "RFS" = "twodash"))
+ + ggplot2::scale_color_manual (values = c ("\\textbf{RSMS}" = "#E69F00", "MIFS" = "#56B4E9", "RFS" = "#009E73"))
+ + ggplot2::scale_x_continuous (trans = 'log10', labels = scales::percent))
+filename <- Sys.getenv ("OUTPUT")
+ggplot2::ggsave (filename, plot, device = "svg", width = 6, height = 3)
diff --git a/images/featureselectionlizeofull.R b/images/featureselectionlizeofull.R
new file mode 100644
index 0000000..c861e28
--- /dev/null
+++ b/images/featureselectionlizeofull.R
@@ -0,0 +1,19 @@
+#!/usr/bin/env Rscript
+load (sprintf ("%s/data/feature_selection_lizeo.Rdata", Sys.getenv ("ABS_TOP_SRCDIR")))
+Sys.setlocale ("LC_ALL", "fr_FR.UTF-8")
+library ("magrittr")
+plot <- (feature_selection_lizeo
+ %>% dplyr::filter (algorithm %in% c ("rsms_full", "rsms"))
+ %>% dplyr::mutate (algorithm = ifelse (algorithm == "rsms_full", "\\textbf{par époques}", algorithm))
+ %>% dplyr::mutate (algorithm = ifelse (algorithm == "rsms", "par sous-ensemble", algorithm))
+ %>% dplyr::mutate (`Nombre de variables` = n_features / max (n_features))
+ %>% dplyr::select (`Variante` = algorithm, `Nombre de variables`, `aRMSE` = armse)
+ %>% dplyr::group_by (Variante, `Nombre de variables`)
+ %>% dplyr::summarize (aRMSE = min (aRMSE))
+ %>% ggplot2::ggplot (ggplot2::aes (x = `Nombre de variables`, y = aRMSE, color = Variante, linetype = Variante))
+ + ggplot2::geom_line ()
+ + ggplot2::scale_linetype_manual (values = c ("\\textbf{par époques}" = "solid", "par sous-ensemble" = "dashed"))
+ + ggplot2::scale_color_manual (values = c ("\\textbf{par époques}" = "#0072B2", "par sous-ensemble" = "#E69F00"))
+ + ggplot2::scale_x_continuous (trans = 'log10', labels = scales::percent))
+filename <- Sys.getenv ("OUTPUT")
+ggplot2::ggsave (filename, plot, device = "svg", width = 6, height = 3)
diff --git a/images/fig-co-training.svg b/images/fig-co-training.svg
new file mode 100644
index 0000000..9cffba1
--- /dev/null
+++ b/images/fig-co-training.svg
@@ -0,0 +1,95 @@
+<?xml version='1.0' encoding='UTF-8' ?>
+<svg
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink='http://www.w3.org/1999/xlink'
+ width="14cm"
+ viewBox="0 0 640 640">
+ <g fill-opacity=".3">
+ <rect x="0" y="0" width="640" height="120" fill="#E69F00" />
+ <rect x="0" y="240" width="640" height="120" fill="#E69F00" />
+ <rect x="0" y="120" width="640" height="120" fill="#56B4E9" />
+ <rect x="0" y="360" width="640" height="120" fill="#56B4E9" />
+ </g>
+ <g fill="white">
+ <rect x="40" y="20" width="260" height="80" />
+ <rect x="40" y="140" width="260" height="80" />
+ <rect x="360" y="20" width="260" height="80" />
+ <rect x="360" y="140" width="260" height="80" />
+ <rect x="40" y="260" width="260" height="80" />
+ <rect x="40" y="380" width="260" height="80" />
+ <rect x="360" y="260" width="260" height="80" />
+ <rect x="360" y="380" width="260" height="80" />
+ </g>
+ <g fill="lightgray">
+ <rect x="92" y="20" width="208" height="80" />
+ <rect x="92" y="140" width="208" height="80" />
+
+ <rect x="412" y="20" width="208" height="80" />
+ <rect x="412" y="140" width="208" height="80" />
+
+ <rect x="92" y="260" width="208" height="80" />
+ <rect x="92" y="380" width="208" height="80" />
+
+ <rect x="412" y="260" width="52" height="80" /><rect x="516" y="260" width="104" height="80" />
+ <rect x="412" y="380" width="130" height="80" /><rect x="594" y="380" width="26" height="80" />
+ </g>
+ <g fill="#E69F00">
+ <rect x="542" y="20" width="52" height="80" />
+ <rect x="222" y="380" width="52" height="80" />
+ </g>
+ <g fill="#56B4E9">
+ <rect x="464" y="140" width="52" height="80" />
+ <rect x="144" y="260" width="52" height="80" />
+ </g>
+ <g stroke="black">
+ <rect x="40" y="20" width="260" height="80" fill="none" stroke="black" />
+ <rect x="40" y="140" width="260" height="80" fill="none" stroke="black" />
+
+ <rect x="360" y="20" width="260" height="80" fill="none" stroke="black" />
+ <rect x="360" y="140" width="260" height="80" fill="none" stroke="black" />
+
+ <rect x="40" y="260" width="260" height="80" fill="none" stroke="black" />
+ <rect x="40" y="380" width="260" height="80" fill="none" stroke="black" />
+
+ <rect x="360" y="260" width="260" height="80" fill="none" stroke="black" />
+ <rect x="360" y="380" width="260" height="80" fill="none" stroke="black" />
+
+ <line x1="0" x2="640" y1="240" y2="240" stroke="black" />
+ <line x1="320" x2="320" y1="0" y2="480" stroke="black" />
+ </g>
+ <g stroke="black" stroke-dasharray="5,3">
+ <line x1="274" x2="274" y1="260" y2="340" />
+ <line x1="222" x2="222" y1="260" y2="340" />
+ <line x1="196" x2="196" y1="380" y2="460" />
+ <line x1="144" x2="144" y1="380" y2="460" />
+ </g>
+ <g stroke="black" fill="white">
+ <polygon points="164,400 164,360 144,360 170,320 196,360 178,360 178,400" />
+ <polygon points="240,320 240,360 222,360 248,400 274,360 256,360 256,320" />
+ </g>
+ <g text-anchor="end" dominant-baseline="middle">
+ <text x="30" y="60">$h_1$</text>
+ <text x="30" y="180">$h_2$</text>
+
+ <text x="30" y="300">$h_1$</text>
+ <text x="30" y="420">$h_2$</text>
+
+ <text x="350" y="60">$h_1$</text>
+ <text x="350" y="180">$h_2$</text>
+
+ <text x="350" y="300">$h_1$</text>
+ <text x="350" y="420">$h_2$</text>
+ </g>
+ <g stroke="black">
+ <rect x="7" y="487" width="42" height="42" fill="white" />
+ <rect x="7" y="543" width="42" height="42" fill="lightgray" />
+ <rect x="327" y="487" width="42" height="42" fill="#E69F00" />
+ <rect x="327" y="543" width="42" height="42" fill="#56B4E9" />
+ </g>
+ <g text-anchor="start" dominant-baseline="middle">
+ <text x="56" y="508">Labellisé</text>
+ <text x="56" y="564">Non labellisé</text>
+ <text x="376" y="508">Valeur prédite par $h_1$</text>
+ <text x="376" y="564">Valeur prédite par $h_2$</text>
+ </g>
+</svg>
diff --git a/images/fig-multi-vues.svg b/images/fig-multi-vues.svg
new file mode 100644
index 0000000..41af47a
--- /dev/null
+++ b/images/fig-multi-vues.svg
@@ -0,0 +1,30 @@
+<?xml version='1.0' encoding='UTF-8' ?>
+<svg
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink='http://www.w3.org/1999/xlink'
+ width="10cm"
+ viewBox="0 0 640 480">
+ <g fill-opacity="0.5" stroke="black">
+ <rect x="80" y="80" width="160" height="64" fill="#E69F00" />
+ <rect x="240" y="80" width="160" height="64" fill="#56B4E9" />
+ <rect x="480" y="80" width="80" height="64" fill="#009E73" />
+ </g>
+ <g fill-opacity="0.2" stroke="black">
+ <rect x="80" y="144" width="160" height="256" fill="#E69F00" />
+ <rect x="240" y="144" width="160" height="256" fill="#56B4E9" />
+ <rect x="480" y="144" width="80" height="256" fill="#009E73" />
+ </g>
+ <g text-anchor="middle">
+ <text x="160" y="60">$X_1$ (texte)</text>
+ <text x="320" y="60">$X_2$ (liens)</text>
+
+ <g dominant-baseline="middle">
+ <text x="160" y="112">${X_l}_{1}$</text>
+ <text x="320" y="112">${X_l}_{1}$</text>
+ <text x="520" y="112">$Y$</text>
+
+ <text x="580" y="112" text-anchor="start">$n$</text>
+ <text x="60" y="240" text-anchor="end">$N$</text>
+ </g>
+ </g>
+</svg>
diff --git a/images/hireau-s.png b/images/hireau-s.png
new file mode 100644
index 0000000..9661c8b
--- /dev/null
+++ b/images/hireau-s.png
Binary files differ
diff --git a/images/hireaugramme.png b/images/hireaugramme.png
new file mode 100644
index 0000000..6ffb06c
--- /dev/null
+++ b/images/hireaugramme.png
Binary files differ
diff --git a/images/insurance_mae.R b/images/insurance_mae.R
new file mode 100755
index 0000000..9b0341b
--- /dev/null
+++ b/images/insurance_mae.R
@@ -0,0 +1,5 @@
+#!/usr/bin/env Rscript
+source (sprintf ("%s/images/laps3l_graph_code.R", Sys.getenv ("ABS_TOP_SRCDIR")))
+plot <- plot_tuning ("mae", "insurance")
+filename <- Sys.getenv ("OUTPUT")
+ggplot2::ggsave (filename, plot, device = "svg", width = 6, height = 3)
diff --git a/images/insurance_rmse.R b/images/insurance_rmse.R
new file mode 100755
index 0000000..9c37ee2
--- /dev/null
+++ b/images/insurance_rmse.R
@@ -0,0 +1,5 @@
+#!/usr/bin/env Rscript
+source (sprintf ("%s/images/laps3l_graph_code.R", Sys.getenv ("ABS_TOP_SRCDIR")))
+plot <- plot_tuning ("rmse", "insurance")
+filename <- Sys.getenv ("OUTPUT")
+ggplot2::ggsave (filename, plot, device = "svg", width = 6, height = 3)
diff --git a/images/l21m2.R b/images/l21m2.R
new file mode 100755
index 0000000..8998a49
--- /dev/null
+++ b/images/l21m2.R
@@ -0,0 +1,20 @@
+#!/usr/bin/env Rscript
+`%>%` <- magrittr::`%>%`
+xpoints <- seq (-1, 1, length.out = 100)
+ypoints <- seq (-1, 1, length.out = 100)
+compute_l1 <- function (x, y) abs (x) + abs (y)
+compute_l2 <- function (x, y) sqrt (x ^ 2 + y ^ 2)
+data <- (tibble::tibble (expand.grid (x = xpoints, y = ypoints))
+ %>% dplyr::mutate (`$\\left\\|W\\right\\|_{2, 1}$` = compute_l1 (x, y),
+ `$\\left\\|W\\right\\|_F$` = compute_l2 (x, y))
+ %>% dplyr::mutate (`$\\left\\|W\\right\\|_{2, 1 - 2}$` =
+ `$\\left\\|W\\right\\|_{2, 1}$`
+ - `$\\left\\|W\\right\\|_F$`))
+
+plotl21 <- (ggplot2::ggplot (data, ggplot2::aes (x = x, y = y, fill = `$\\left\\|W\\right\\|_{2, 1}$`))
+ + ggplot2::geom_raster ())
+plotl21m2 <- (ggplot2::ggplot (data, ggplot2::aes (x = x, y = y, fill = `$\\left\\|W\\right\\|_{2, 1 - 2}$`))
+ + ggplot2::geom_raster ())
+plot <- gridExtra::arrangeGrob (plotl21, plotl21m2, nrow = 2)
+filename <- Sys.getenv ("OUTPUT")
+ggplot2::ggsave (filename, plot, device = "svg", width = 5.5, height = 6.5)
diff --git a/images/laps3l_graph_code.R b/images/laps3l_graph_code.R
new file mode 100644
index 0000000..06b01b0
--- /dev/null
+++ b/images/laps3l_graph_code.R
@@ -0,0 +1,74 @@
+`%>%` <- magrittr::`%>%`
+
+load (sprintf ("%s/data/laps3l_tuning.Rdata", Sys.getenv ("ABS_TOP_SRCDIR")))
+
+aggregate_tuning_raw <- function (datasets, algorithms) {
+ data <- tuning
+ aggregated <- (data
+ %>% dplyr::filter (dataset %in% datasets, algorithm %in% algorithms)
+ %>% dplyr::group_by (algorithm, labeled_data, dataset)
+ %>% dplyr::summarize (armse = mean (rmse),
+ srmse = sd (rmse),
+ amae = mean (mae),
+ smae = sd (mae),
+ arrse = mean (rrse),
+ srrse = sd (rrse),
+ arae = mean (rae),
+ srae = sd (rae))
+ %>% dplyr::ungroup ())
+ metrics <- (aggregated
+ %>% tidyr::pivot_longer (c (armse, srmse, amae, smae, arrse, srrse, arae, srae),
+ names_to = "metric",
+ values_to = "value")
+ %>% dplyr::filter (is.finite (value)))
+ annotations <- (metrics
+ %>% dplyr::group_by (labeled_data, dataset, metric)
+ %>% dplyr::arrange (value)
+ %>% dplyr::summarize (algorithm = algorithm, is_best = c (
+ TRUE,
+ rep (FALSE, dplyr::n () - 1)
+ ))
+ %>% dplyr::ungroup ())
+ (metrics
+ %>% dplyr::inner_join (annotations))
+}
+
+#' Plot the tuning results
+#' @param metric the metric to show: "rmse", "mae", "rrse", "rae"
+#' @export
+plot_tuning <- function (metric = "rmse", dataset = "wine") {
+ the_metric <- metric
+ the_dataset <- dataset
+ (aggregate_tuning_raw (dataset, c ("laps3l", "sssl", "laprls"))
+ %>% dplyr::select (algorithm, labeled_data, dataset, metric, value)
+ %>% dplyr::filter (metric %in% c (sprintf ("a%s", the_metric),
+ sprintf ("s%s", the_metric)),
+ dataset == the_dataset)
+ %>% tidyr::pivot_wider (id_cols = c (algorithm, labeled_data, dataset),
+ names_from = metric,
+ values_from = value)
+ %>% dplyr::rename (mean = sprintf ("a%s", the_metric),
+ sd = sprintf ("s%s", the_metric))
+ %>% dplyr::mutate (low = mean - sd, high = mean + sd)
+ %>% dplyr::mutate (`Données labellisées` = labeled_data,
+ Algorithme =
+ ifelse (algorithm == "sssl",
+ "SSSL",
+ ifelse (algorithm == "laprls",
+ "LapRLS",
+ "\\textbf{LapS3L}")),
+ Value = mean,
+ low = low,
+ high = high)
+ %>% ggplot2::ggplot (ggplot2::aes (x = `Données labellisées`,
+ y = Value,
+ ymin = low,
+ ymax = high,
+ linetype = Algorithme,
+ color = Algorithme,
+ fill = Algorithme))
+ + ggplot2::geom_line ()
+ + ggplot2::geom_ribbon (alpha = 0.2, size = 0)
+ + ggplot2::ylab (metric)
+ + ggplot2::ggtitle (sprintf ("jeu de données %s, métrique %s", dataset, metric)))
+}
diff --git a/images/lasso.svg b/images/lasso.svg
new file mode 100644
index 0000000..35ae633
--- /dev/null
+++ b/images/lasso.svg
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ version="1.1"
+ viewBox="-10 -10 240 170"
+ height="75mm"
+ width="100mm">
+ <defs>
+ <clipPath id="figure-gauche-clip">
+ <rect x="00" y="00" width="100" height="100" />
+ </clipPath>
+ <clipPath id="figure-droite-clip">
+ <rect x="120" y="0" width="100" height="100" />
+ </clipPath>
+ <!-- Une figure, c'est un fond gris, deux axes en blanc dessus, et
+ la figure (qui est en fait un croisement de deux diagonales
+ avec une largeur très élevée) -->
+ <g id="figure-base">
+ <rect x="0" y="0" width="100" height="100" fill="#D3D3D3" />
+ <line x1="50" x2="50" y1="0" y2="100" stroke="white" stroke-width="0.5" />
+ <line x1="0" x2="100" y1="50" y2="50" stroke="white" stroke-width="0.5"/>
+ <line class="domaine"
+ x1="0" x2="100" y1="0" y2="100"
+ stroke="blue" opacity=".2" />
+ <line class="domaine"
+ x1="0" x2="100" y1="100" y2="0"
+ stroke="blue" opacity=".2" />
+ </g>
+ <g id="figure-decalee">
+ <use xlink:href="#figure-base" transform="translate (120 0)" />
+ </g>
+ </defs>
+ <use clip-path="url(#figure-gauche-clip)"
+ xlink:href="#figure-base"
+ id="gauche"
+ stroke-width="20"/>
+ <use clip-path="url(#figure-droite-clip)"
+ xlink:href="#figure-decalee"
+ id="droite"
+ stroke-width="50"/>
+ <text x="50" y="115" text-anchor="middle" font-size="10px">$\alpha$ grand</text>
+ <text x="170" y="115" text-anchor="middle" font-size="10px">$\alpha$ petit</text>
+
+ <rect x="0" y="125" width="20" height="15" fill="#D3D3D3" />
+ <text x="30" y="135" font-size="10px">
+ le modèle a une composante nulle
+ </text>
+
+ <rect x="0" y="145" width="20" height="15" fill="#D3D3D3" />
+ <rect x="0" y="145" width="20" height="15" fill="blue" opacity=".2" />
+ <text x="30" y="155" font-size="10px">
+ le modèle est dense
+ </text>
+</svg>
diff --git a/images/lizeo-donnees.png b/images/lizeo-donnees.png
new file mode 100644
index 0000000..c520299
--- /dev/null
+++ b/images/lizeo-donnees.png
Binary files differ
diff --git a/images/lizeoclassif.svg b/images/lizeoclassif.svg
new file mode 100644
index 0000000..94ef436
--- /dev/null
+++ b/images/lizeoclassif.svg
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ version="1.1"
+ viewBox="0 0 200 200"
+ width="80mm"
+ height="80mm">
+ <text x="70" y="12" text-anchor="middle" font-size="8px">
+ Variables textuelles
+ </text>
+ <g transform="rotate(-90) translate(-100, 12)">
+ <text text-anchor="middle" font-size="8px">
+ documents
+ </text>
+ </g>
+ <g transform="rotate (-90) translate(-15, 145)">
+ <text text-anchor="left" font-size="4px">
+ Prix
+ </text>
+ </g>
+ <g transform="rotate (-90) translate(-15, 155)">
+ <text text-anchor="left" font-size="4px">
+ Bruit
+ </text>
+ </g>
+ <text x="172" y="15" text-anchor="middle" font-size="6px">
+ ...
+ </text>
+ <text x="190" y="195" text-anchor="end" font-size="6px">
+ \textit{qualifiers}
+ </text>
+ <text x="70" y="130" text-anchor="middle" font-size="20px">
+ ...
+ </text>
+ <text x="175" y="130" text-anchor="middle" font-size="20px">
+ $\{1, 0\}$
+ </text>
+
+ <rect x="20" y="20" width="100" height="160" rx="5" stroke="black" stroke-width=".5" fill="none" />
+ <rect x="140" y="20" width="50" height="160" rx="5" stroke="black" stroke-width=".5" fill="none" />
+
+ <rect x="150" y="20" width="10" height="20" fill="gray" />
+ <rect x="140" y="40" width="10" height="20" fill="gray" />
+ <rect x="150" y="60" width="10" height="20" fill="gray" />
+
+ <line x1="20" x2="120" y1="40" y2="40" stroke="black" stroke-width=".1" />
+ <line x1="20" x2="120" y1="60" y2="60" stroke="black" stroke-width=".1" />
+ <line x1="20" x2="120" y1="80" y2="80" stroke="black" stroke-width=".1" />
+ <line x1="140" x2="190" y1="40" y2="40" stroke="black" stroke-width=".1" />
+ <line x1="140" x2="190" y1="60" y2="60" stroke="black" stroke-width=".1" />
+ <line x1="140" x2="190" y1="80" y2="80" stroke="black" stroke-width=".1" />
+ <line x1="150" x2="150" y1="20" y2="180" stroke="black" stroke-width=".1" />
+ <line x1="160" x2="160" y1="20" y2="180" stroke="black" stroke-width=".1" />
+</svg>
diff --git a/images/lizeoreg.svg b/images/lizeoreg.svg
new file mode 100644
index 0000000..4561c1d
--- /dev/null
+++ b/images/lizeoreg.svg
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ version="1.1"
+ viewBox="0 0 200 200"
+ height="80mm"
+ width="80mm">
+ <text x="70" y="12" text-anchor="middle" font-size="8px">
+ Variables textuelles
+ </text>
+ <g transform="rotate(-90) translate(-100, 12)">
+ <text text-anchor="middle" font-size="8px">
+ documents
+ </text>
+ </g>
+ <g transform="rotate (-90) translate(-15, 145)">
+ <text text-anchor="left" font-size="4px">
+ Prix
+ </text>
+ </g>
+ <g transform="rotate (-90) translate(-15, 155)">
+ <text text-anchor="left" font-size="4px">
+ Bruit
+ </text>
+ </g>
+ <text x="172" y="15" text-anchor="middle" font-size="6px">
+ ...
+ </text>
+ <text x="190" y="195" text-anchor="end" font-size="6px">
+ \textit{qualifiers}
+ </text>
+ <text x="70" y="130" text-anchor="middle" font-size="20px">
+ ...
+ </text>
+ <text x="175" y="130" text-anchor="middle" font-size="20px">
+ $\mathbb{R}$
+ </text>
+
+ <rect x="150" y="20" width="10" height="20" fill="orange" />
+ <rect x="140" y="40" width="10" height="20" fill="blue" opacity=".4" />
+ <rect x="150" y="60" width="10" height="20" fill="orange" opacity=".3" />
+
+ <rect x="20" y="20" width="100" height="160" rx="5" stroke="black" stroke-width=".5" fill="none" />
+ <rect x="140" y="20" width="50" height="160" rx="5" stroke="black" stroke-width=".5" fill="none" />
+
+ <line x1="20" x2="120" y1="40" y2="40" stroke="black" stroke-width=".1" />
+ <line x1="20" x2="120" y1="60" y2="60" stroke="black" stroke-width=".1" />
+ <line x1="20" x2="120" y1="80" y2="80" stroke="black" stroke-width=".1" />
+ <line x1="140" x2="190" y1="40" y2="40" stroke="black" stroke-width=".1" />
+ <line x1="140" x2="190" y1="60" y2="60" stroke="black" stroke-width=".1" />
+ <line x1="140" x2="190" y1="80" y2="80" stroke="black" stroke-width=".1" />
+ <line x1="150" x2="150" y1="20" y2="180" stroke="black" stroke-width=".1" />
+ <line x1="160" x2="160" y1="20" y2="180" stroke="black" stroke-width=".1" />
+</svg>
diff --git a/images/logo.png b/images/logo.png
new file mode 100644
index 0000000..7da55d2
--- /dev/null
+++ b/images/logo.png
Binary files differ
diff --git a/images/lsmr_global_tuning.R b/images/lsmr_global_tuning.R
new file mode 100644
index 0000000..3753e09
--- /dev/null
+++ b/images/lsmr_global_tuning.R
@@ -0,0 +1,94 @@
+load (sprintf ("%s/data/lsmr_global_tuning.Rdata", Sys.getenv ("ABS_TOP_SRCDIR")))
+
+#' Compute the Friedman + Nemenyi analysis with the tsutils package.
+#'
+#' @return the tsutils analysis.
+#' @export
+cd_analysis <- function () {
+ `%>%` <- magrittr::`%>%`
+ data <- (global_tuning_data
+ %>% dplyr::select (`LSMR local` = lsmr_local, dplyr::everything ())
+ %>% dplyr::select (-dataset))
+ colnames (data) <- toupper (colnames (data))
+ colnames (data) <- gsub ("LOCAL", "local", colnames (data))
+ tsutils::nemenyi (as.matrix (data), plottype = "vmcb")
+}
+
+## Expects that higher is better. Returns -1 if the first is better,
+## +1 if the second is better, and 0 otherwise.
+paired_test_aux <- function (algo1, algo2) {
+ diff <- algo2 - algo1
+ magnitude <- abs (diff)
+ sorted_magnitude <- sort (magnitude)
+ get_rank <- function (diff) {
+ m <- abs (diff)
+ ok <- which (sorted_magnitude == m)
+ mean (ok)
+ }
+ ranks <- sapply (diff, get_rank)
+ positives <- which (diff > 0)
+ negatives <- which (diff < 0)
+ ties <- which (diff == 0)
+ Rplus <- sum (ranks[positives]) + sum (ranks[ties]) / 2
+ Rminus <- sum (ranks[negatives]) + sum (ranks[ties]) / 2
+ ret <- 0
+ if (Rplus < Rminus) {
+ ret <- -1
+ } else {
+ ret <- +1
+ }
+ T <- min (Rplus, Rminus)
+ N <- length (diff)
+ znum <- (T - (1 / 4) * N * (N + 1))
+ ## ------------------------------
+ zdenom <- sqrt ((1 / 24) * N * (N + 1) * (2 * N + 1))
+ z <- znum / zdenom
+ alpha <- 0.1
+ crit <- qnorm (1 - alpha / 2)
+ if (z >= -crit) {
+ ret <- 0
+ }
+ ret
+}
+
+paired_test <- function (algo1, algo2) {
+ data <- global_tuning_data
+ algo1 <- data[, algo1 + 1][[1]]
+ algo2 <- data[, algo2 + 1][[1]]
+ paired_test_aux (-algo1, -algo2)
+}
+
+#' Compute the win / lose / tie matrix for all pairs of algorithms.
+#' @return the matrix with row and column names set to the names of
+#' the algorithms.
+#' @export
+win_lose_tie_paired_tests <- function () {
+ data <- global_tuning_data
+ M <- matrix (0, ncol (data) - 1, ncol (data) - 1)
+ colnames (M) <- toupper (gsub ("_", "\n", colnames (data)[2:ncol (data)], fixed = TRUE))
+ colnames (M) <- gsub ("LOCAL", "local", colnames (M))
+ row.names (M) <- colnames (M)
+ colnames (M) <- gsub ("LSMR\nlocal", "LSMR (l)", colnames (M), fixed = TRUE)
+ for (i in seq_len (ncol (data) - 1)) {
+ for (j in seq_len (ncol (data) - 1)) {
+ M[i, j] <- paired_test (i, j)
+ }
+ }
+ M
+}
+
+#' Print the plot of the win / lose / tie matrix
+#' @return Org-mode code
+#' @export
+print_win_lose_tie_plot <- function () {
+ M <- win_lose_tie_paired_tests ()
+ data <- reshape2::melt (M, na.rm = TRUE)
+ (ggplot2::ggplot (data = data,
+ ggplot2::aes (Var2, Var1, fill = value))
+ + ggplot2::geom_tile (color = "white")
+ + ggplot2::scale_fill_gradient2 (low = "blue", high = "red", mid = "#FFFFFF00",
+ midpoint = 0, limit = c (-1, 1), name = "significant test")
+ + ggplot2::theme (legend.position = "none")
+ + ggplot2::theme (axis.title = ggplot2::element_blank ())
+ + ggplot2::theme (axis.text.x = ggplot2::element_text (angle=45, hjust=1)))
+}
diff --git a/images/lsmr_local_oes97.R b/images/lsmr_local_oes97.R
new file mode 100644
index 0000000..aba51eb
--- /dev/null
+++ b/images/lsmr_local_oes97.R
@@ -0,0 +1,5 @@
+#!/usr/bin/env Rscript
+source (sprintf ("%s/images/lsmr_local_tuning.R", Sys.getenv ("ABS_TOP_SRCDIR")))
+plot <- print_local_graph ("oes97")
+filename <- Sys.getenv ("OUTPUT")
+ggplot2::ggsave (filename, plot, device = "svg", width = 6, height = 4)
diff --git a/images/lsmr_local_osales.R b/images/lsmr_local_osales.R
new file mode 100644
index 0000000..f2d61c0
--- /dev/null
+++ b/images/lsmr_local_osales.R
@@ -0,0 +1,5 @@
+#!/usr/bin/env Rscript
+source (sprintf ("%s/images/lsmr_local_tuning.R", Sys.getenv ("ABS_TOP_SRCDIR")))
+plot <- print_local_graph ("osales")
+filename <- Sys.getenv ("OUTPUT")
+ggplot2::ggsave (filename, plot, device = "svg", width = 6, height = 4)
diff --git a/images/lsmr_local_scpf.R b/images/lsmr_local_scpf.R
new file mode 100644
index 0000000..a276c83
--- /dev/null
+++ b/images/lsmr_local_scpf.R
@@ -0,0 +1,5 @@
+#!/usr/bin/env Rscript
+source (sprintf ("%s/images/lsmr_local_tuning.R", Sys.getenv ("ABS_TOP_SRCDIR")))
+plot <- print_local_graph ("scpf")
+filename <- Sys.getenv ("OUTPUT")
+ggplot2::ggsave (filename, plot, device = "svg", width = 6, height = 4)
diff --git a/images/lsmr_local_sf2.R b/images/lsmr_local_sf2.R
new file mode 100644
index 0000000..6406c72
--- /dev/null
+++ b/images/lsmr_local_sf2.R
@@ -0,0 +1,5 @@
+#!/usr/bin/env Rscript
+source (sprintf ("%s/images/lsmr_local_tuning.R", Sys.getenv ("ABS_TOP_SRCDIR")))
+plot <- print_local_graph ("sf2")
+filename <- Sys.getenv ("OUTPUT")
+ggplot2::ggsave (filename, plot, device = "svg", width = 6, height = 4)
diff --git a/images/lsmr_local_tuning.R b/images/lsmr_local_tuning.R
new file mode 100644
index 0000000..8ad743a
--- /dev/null
+++ b/images/lsmr_local_tuning.R
@@ -0,0 +1,329 @@
+load (sprintf ("%s/data/lsmr_local_tuning.Rdata", Sys.getenv ("ABS_TOP_SRCDIR")))
+
+#' Construct a linear kernel
+#'
+#' @return a linear kernel
+#' @export
+linear_kernel <- function () {
+ ret <- list ()
+ class (ret) <- "linear_kernel"
+ ret
+}
+
+#' Construct a cosine kernel
+#'
+#' @return a cosine kernel
+#' @export
+cosine_kernel <- function () {
+ ret <- list ()
+ class (ret) <- "cosine_kernel"
+ ret
+}
+
+#' Construct a RBF kernel
+#'
+#' @param bandwidth the sigma parameter for the RBF...
+#' @param gamma ... or alternatively the gamma parameter
+#' @return an RBF kernel
+#' @export
+rbf_kernel <- function (bandwidth = NULL, gamma = NULL) {
+ stopifnot (!is.null (bandwidth) || !is.null (gamma))
+ if (is.null (gamma)) {
+ gamma <- 1 / (2 * bandwidth ^ 2)
+ }
+ ret <- list (gamma = gamma)
+ class (ret) <- "rbf_kernel"
+ ret
+}
+
+#' Construct a Laplacian matrix with binary relations
+#'
+#' @param kernel the kernel to compute base similarities
+#' @param quantile used to compute the threshold.
+#' @return a Laplacian matrix generator
+#' @export
+quantile_laplacian <- function (kernel = linear_kernel (), quantile = 0.95) {
+ ret <- list (kernel = kernel, q = quantile)
+ class (ret) <- "quantile_laplacian"
+ ret
+}
+
+#' Apply a kernel over two data matrices
+#'
+#' @param x the kernel to apply
+#' @param U the first data matrix
+#' @param V the second data matrix (may be missing)
+#' @return the kernel matrix
+#' @export
+cache <- function (x, U, V) {
+ UseMethod ("cache", x)
+}
+
+#' @method cache linear_kernel
+#' @export
+cache.linear_kernel <- function (x, U, V = NULL) {
+ if (is.null (V)) {
+ V <- U
+ }
+ tcrossprod (U, V)
+}
+
+#' @method cache cosine_kernel
+#' @export
+cache.cosine_kernel <- function (x, U, V = NULL) {
+ if (is.null (V)) {
+ V <- U
+ }
+ num <- tcrossprod (U, V)
+ nu <- sqrt (rowSums (U^2))
+ nv <- sqrt (rowSums (V^2))
+ denom <- tcrossprod (nu, nv)
+ ret <- num / denom
+ ret[denom == 0] <- 1
+ ret
+}
+
+pdist <- function (U, V = NULL) {
+ if (is.null (V)) {
+ V <- U
+ }
+ rsu <- as.matrix (rowSums (U^2), nrow (U), 1)
+ rsv <- as.matrix (rowSums (V^2), nrow (V), 1)
+ Du <- rsu[, array (1, nrow (V)), drop = FALSE]
+ Dv <- t (rsv[, array (1, nrow (U)), drop = FALSE])
+ D <- Du + Dv - 2 * tcrossprod (U, V)
+ D[D < 0] <- 0
+ D
+}
+
+#' @method cache rbf_kernel
+#' @export
+cache.rbf_kernel <- function (x, U, V = NULL) {
+ gamma <- x$gamma
+ exp (- gamma * pdist (U, V))
+}
+
+#' @method cache quantile_laplacian
+#' @export
+cache.quantile_laplacian <- function (x, U, V = NULL) {
+ if (!is.null (V)) {
+ stop ("Cannot apply the Laplacian matrix on two different data matrices")
+ }
+ K <- cache (x$kernel, U)
+ q <- stats::quantile (K[upper.tri (K)], x$q)
+ M <- matrix (0, nrow (K), ncol (K))
+ M[K < q] <- 0
+ M[K >= q] <- 1
+ D <- rowSums (M)
+ diag (D, nrow (K), ncol (K)) - M
+}
+
+#' Construct a RBF kernel fit for a validation dataset
+#'
+#' @param x a validation data matrix
+#' @param y the validation label matrix
+#' @return a RBF kernel
+#' @export
+tune_rbf_kernel <- function (x, y) {
+ B <- cache (cosine_kernel (), t (t (y)))
+ B[B < 0] <- 0
+ b <- t (t (c (B)))
+ D <- pdist (x)
+ candidates <- c (1e-4, 2e-4, 5e-4,
+ 1e-3, 2e-3, 5e-3,
+ 1e-2, 2e-2, 5e-2,
+ 1e-1, 2e-1, 5e-1,
+ 1e+0, 2e+0, 5e+0,
+ 1e+1, 2e+1, 5e+1,
+ 1e+2, 2e+2, 5e+2,
+ 1e+3, 2e+3, 5e+3,
+ 1e+4, 2e+4, 5e+4)
+ alignment <- sapply (candidates, function (gamma) {
+ K <- exp (-gamma * D)
+ k <- t (t (c (K)))
+ alignment <- cache.cosine_kernel (NULL, t (b), t (k))
+ alignment[1, 1]
+ })
+ rbf_kernel (gamma = candidates[which.max (alignment)])
+}
+
+
+#' Load the local tuning results.
+#'
+#' @return A table with the following columns: 'dataset', 'kernel',
+#' 'bandwidth', 's', 'semi', 'multi', 'armse_sssl', 'armse_semi',
+#' 'armse_multi', 'armse_both'.
+#' @export
+get_local_tuning_data <- function () {
+ local_tuning
+}
+
+#' Print the results for the local tuning.
+#'
+#' @return the data.
+#' @export
+print_tbl_comparison_local <- function () {
+ data <- get_local_tuning_data ()
+ `%>%` <- magrittr::`%>%`
+ number <- function (x) {
+ sapply (x, function (x) {
+ if (x <= 1) {
+ sprintf ("*%.3f*", x)
+ } else {
+ sprintf ("%.3f", x)
+ }
+ })
+ }
+ summaries <- (data
+ %>% dplyr::group_by (dataset)
+ %>% dplyr::summarize (median_sssl = median (armse_sssl),
+ mean = mean (armse_both),
+ median = median (armse_both),
+ q1 = quantile (armse_both, .25),
+ q3 = quantile (armse_both, .75),
+ min = min (armse_both),
+ max = max (armse_both))
+ %>% dplyr::mutate (relative_mean = mean / median_sssl,
+ relative_median = median / median_sssl,
+ relative_q1 = q1 / median_sssl,
+ relative_q3 = q3 / median_sssl,
+ relative_min = min / median_sssl,
+ relative_max = max / median_sssl)
+ %>% dplyr::mutate (`*Données*` = dataset,
+ `Moyenne` = number (relative_mean),
+ `Médiane` = number (relative_median),
+ `Q1` = number (relative_q1),
+ `Q3` = number (relative_q3),
+ `Meilleur` = number (relative_min),
+ `Pire` = number (relative_max))
+ %>% dplyr::select (`*Données*`, `Moyenne`, `Q1`, `Q3`, `Meilleur`, `Pire`)
+ %>% dplyr::arrange (`Meilleur`))
+ summaries
+}
+
+rescale_log <- function (value, min, max) {
+ log_min <- log (min)
+ log_max <- log (max)
+ log_value <- log_min + value * (log_max - log_min)
+ exp (log_value)
+}
+
+laps3l_decode_hyper <- function (max_s) {
+ min_bandwidth <- 0.1
+ max_bandwidth <- 300
+ min_semi <- 1e-08
+ max_semi <- 1
+ min_multi <- 1e-04
+ max_multi <- 10000
+ min_s <- 1
+ function (row) {
+ kernel <- NULL
+ row$kernel <- as.character (row$kernel)
+ if (row$kernel == "cosine") {
+ kernel <- cosine_kernel ()
+ }
+ else if (row$kernel == "linear") {
+ kernel <- linear_kernel ()
+ }
+ else {
+ stopifnot (row$kernel == "rbf")
+ bw <- rescale_log (row$bandwidth, min_bandwidth, max_bandwidth)
+ kernel <- rbf_kernel (bw)
+ }
+ list (kernel = kernel,
+ semi = rescale_log (row$semi, min_semi, max_semi),
+ multi = rescale_log (row$multi, min_multi, max_multi),
+ s = round (rescale_log (row$s, min_s, max_s)))
+ }
+}
+
+#' Print a local graph
+#'
+#' @param graph which graph to plot
+#' @return a ggplot object.
+#' @export
+print_local_graph <- function (graph = "atp1d") {
+ max_s <- NA
+ if (graph == "atp1d") {
+ max_s <- 262
+ } else if (graph == "atp7d") {
+ max_s <- 234
+ } else if (graph == "edm") {
+ max_s <- 121
+ } else if (graph == "enb") {
+ max_s <- 601
+ } else if (graph == "jura") {
+ max_s <- 281
+ } else if (graph == "oes10") {
+ max_s <- 314
+ } else if (graph == "oes97") {
+ max_s <- 257
+ } else if (graph == "osales") {
+ max_s <- 495
+ } else if (graph == "sarcossub") {
+ max_s <- 779
+ } else if (graph == "scpf") {
+ max_s <- 889
+ } else if (graph == "sf1") {
+ max_s <- 250
+ } else if (graph == "sf2") {
+ max_s <- 832
+ } else if (graph == "wq") {
+ max_s <- 827
+ } else {
+ stop ("Unknown dataset")
+ }
+ d <- laps3l_decode_hyper (max_s)
+ decode_row <- function (data, i) {
+ row <- data[i,]
+ row$kernel <- "linear"
+ row$s <- 0
+ items <- d (row)
+ data$semi[i] <- items$semi
+ data$multi[i] <- items$multi
+ data[i,]
+ }
+ decode <- function (data) {
+ do.call (rbind, lapply (seq_len (nrow (data)), function (i) decode_row (data, i)))
+ }
+ smooth <- function (data) {
+ X <- as.matrix (cbind (data$semi, data$multi))
+ y <- t (t (data$relative_armse))
+ D <- as.matrix (dist (X, diag = T, upper = T))
+ M <- 0 * D
+ M[D < 0.1] <- 1
+ sum <- rowSums (M)
+ M <- diag (1 / sum, nrow (X), nrow (X)) %*% M
+ data$relative_armse <- M %*% y
+ data
+ }
+ data <- get_local_tuning_data ()
+ `%>%` <- magrittr::`%>%`
+ armse_sssl_median <- median ((data
+ %>% dplyr::filter (dataset == graph)
+ %>% dplyr::select (armse_sssl))$armse_sssl, na.rm = TRUE)
+ relative_data <- (data
+ %>% dplyr::filter (dataset == graph)
+ %>% dplyr::mutate (relative_armse = armse_both / armse_sssl_median)
+ %>% dplyr::select (semi, multi, relative_armse))
+ averaged <- smooth (relative_data)
+ intp <- with (averaged,
+ akima::interp (x = semi,
+ y = multi,
+ z = relative_armse,
+ duplicate = "mean"))
+ values <- as.data.frame (as.matrix (intp$z))
+ colnames (values) <- intp$y
+ intp <- (tidyr::gather (cbind (values, semi = intp$x),
+ multi, armse, seq_len (ncol (intp$z)),
+ na.rm = TRUE)
+ %>% dplyr::mutate (multi = as.numeric (multi)))
+ interpolated <- (intp %>% decode ())
+ (ggplot2::ggplot (interpolated, ggplot2::aes (x = semi, y = multi, fill = armse))
+ + ggplot2::geom_tile ()
+ + ggplot2::scale_fill_gradient2 (midpoint = 1, name = "aRMSE\nrelative")
+ + ggplot2::xlab ("Régulariseur semi-supervisé $\\alpha$")
+ + ggplot2::ylab ("Régulariseur multi-label $\\beta$")
+ + ggplot2::scale_x_log10 ()
+ + ggplot2::scale_y_log10 ())
+}
diff --git a/images/lsmrrsmsapprentissage.svg b/images/lsmrrsmsapprentissage.svg
new file mode 100644
index 0000000..766a2d9
--- /dev/null
+++ b/images/lsmrrsmsapprentissage.svg
@@ -0,0 +1,324 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ version="1.1"
+ viewBox="0 0 210 297"
+ height="217.8mm"
+ width="154mm">
+ <defs>
+ <g id="laplacian-matrix-base">
+ <g fill="Teal">
+ <rect x="-10" y="-10" width="4" height="4" />
+ <rect x="-6" y="-6" width="4" height="4" />
+ <rect x="-2" y="-2" width="4" height="4" />
+ <rect x="2" y="2" width="4" height="4" />
+ <rect x="6" y="6" width="4" height="4" />
+ </g>
+ <g stroke-width=".2" stroke="Teal">
+ <line x1="-6" x2="-6" y1="-10" y2="10" />
+ <line x1="-2" x2="-2" y1="-10" y2="10" />
+ <line x1="2" x2="2" y1="-10" y2="10" />
+ <line x1="6" x2="6" y1="-10" y2="10" />
+ <line y1="-6" y2="-6" x1="-10" x2="10" />
+ <line y1="-2" y2="-2" x1="-10" x2="10" />
+ <line y1="2" y2="2" x1="-10" x2="10" />
+ <line y1="6" y2="6" x1="-10" x2="10" />
+ </g>
+ <rect x="-10" y="-10" width="20" height="20" stroke="Teal" stroke-width=".2" fill="none" />
+ </g>
+ <g id="laplacian-matrix-1">
+ <rect x="-10" y="-10" width="20" height="20" stroke="none" fill="white" />
+ <g fill="PaleTurquoise">
+ <rect x="-6" y="-10" width="4" height="4" />
+ <rect x="2" y="-10" width="4" height="4" />
+ <rect x="-10" y="-6" width="4" height="4" />
+ <rect x="6" y="-6" width="4" height="4" />
+ <rect x="2" y="-2" width="4" height="4" />
+ <rect x="6" y="-2" width="4" height="4" />
+ <rect x="-10" y="2" width="4" height="4" />
+ <rect x="-2" y="2" width="4" height="4" />
+ <rect x="-6" y="6" width="4" height="4" />
+ <rect x="-2" y="6" width="4" height="4" />
+ </g>
+ <use xlink:href="#laplacian-matrix-base" />
+ </g>
+ <g id="laplacian-matrix-2">
+ <rect x="-10" y="-10" width="20" height="20" stroke="none" fill="white" />
+ <g fill="PaleTurquoise">
+ <rect x="-2" y="-10" width="4" height="4" />
+ <rect x="2" y="-6" width="4" height="4" />
+ <rect x="-10" y="-2" width="4" height="4" />
+ <rect x="-6" y="2" width="4" height="4" />
+ <rect x="6" y="2" width="4" height="4" />
+ <rect x="2" y="6" width="4" height="4" />
+ </g>
+ <use xlink:href="#laplacian-matrix-base" />
+ </g>
+ </defs>
+ <g id="page-rsms">
+ <rect x="10" y="10" width="70" height="140"
+ fill="white" />
+ <rect x="10" y="15" width="70" height="15"
+ fill="WhiteSmoke" />
+ <line x1="10" y1="15" x2="80" y2="15"
+ stroke="SlateGray" stroke-width="1" />
+ <text fill="DimGray" x="45" y="27" font-size="10" text-anchor="middle">
+ 1) RSMS
+ </text>
+ <line x1="10" y1="30" x2="80" y2="30"
+ stroke="SlateGray" stroke-width=".2" />
+ <rect x="10" y="10" width="70" height="140"
+ stroke="SlateGray" stroke-width="0.2" fill="none" />
+ <g stroke="black" stroke-width=".2">
+ <rect fill="WhiteSmoke" x="20" y="40" width="30" height="60" />
+ <line x1="40" x2="40" y1="40" y2="100" />
+ <line x1="20" x2="50" y1="60" y2="60" />
+ <line x1="20" x2="50" y1="80" y2="80" />
+ </g>
+ <g font-size="5" text-anchor="middle" fill="DimGray">
+ <text x="30" y="39"> $X$ </text>
+ <text x="45" y="39"> $Y$ </text>
+ <text x="65" y="39"> $L$ </text>
+ </g>
+ <use xlink:href="#laplacian-matrix-2" transform="translate (65 50) scale(0.9)" />
+ <use xlink:href="#laplacian-matrix-1" transform="translate (65 70) scale(0.9)" />
+ <use xlink:href="#laplacian-matrix-2" transform="translate (65 90) scale(0.9)" />
+ <g font-size="5" fill="DimGray">
+ <text x="20" y="112">
+ À chaque époque :
+ </text>
+ <text x="25" y="118">
+ 1 itération pour
+ </text>
+ <text x="25" y="124">
+ chaque minibatch
+ </text>
+ </g>
+ <line x1="22" x2="22" y1="114" y2="124" stroke="DimGray" stroke-width=".2" />
+ <rect x="15" y="130" width="60" height="15" fill="LavenderBlush" />
+ <line x1="15" x2="75" y1="130" y2="130" stroke="DimGray" stroke-width=".2" />
+ <text x="70" y="140" font-size="5" fill="DimGray" text-anchor="end">
+ Variables
+ </text>
+ <rect fill="none" stroke="black" stroke-width=".2" x="15" y="105" width="60" height="40" />
+ <polygon points="20,135 28,135 28,131 35,137.5 28,144 28,140 20,140" fill="white" stroke="maroon" stroke-width=".2" />
+ </g>
+
+ <g id="page-bootstrap">
+ <g stroke-width="0.2">
+ <rect x="120" y="40" width="80" height="140" fill="DimGray" stroke="black" />
+ <rect x="110" y="30" width="80" height="140" fill="white" stroke="SlateGray"/>
+ <rect x="100" y="20" width="80" height="140" fill="DimGray" stroke="black" />
+ <rect x="90" y="10" width="80" height="140" fill="white" stroke="SlateGray"/>
+ </g>
+ <rect x="90" y="10" width="80" height="140"
+ fill="white" />
+ <rect x="90" y="15" width="80" height="15"
+ fill="WhiteSmoke" />
+ <line x1="90" y1="15" x2="170" y2="15"
+ stroke="SlateGray" stroke-width="1" />
+ <text fill="DimGray" x="130" y="27" font-size="10" text-anchor="middle">
+ 2) LSMR
+ </text>
+ <line x1="90" y1="30" x2="170" y2="30"
+ stroke="SlateGray" stroke-width=".2" />
+ <g font-size="7" text-anchor="end">
+ <text x="175" y="158" fill="WhiteSmoke">
+ aRMSE trop élevée
+ </text>
+ <text x="185" y="168" fill="DimGray">
+ Sélectionné
+ </text>
+ </g>
+ <rect x="90" y="130" width="80" height="20" fill="LavenderBlush" />
+ <rect x="95" y="40" width="40" height="80" fill="WhiteSmoke" />
+
+ <use xlink:href="#laplacian-matrix-1" transform="translate (155 50) scale(0.9)" />
+ <g font-size="5" text-anchor="middle" fill="DimGray">
+ <text x="112.5" y="39"> $X$ </text>
+ <text x="130" y="39"> $Y$ </text>
+ <text x="155" y="39"> $L$ </text>
+ </g>
+ <text fill="DimGray" x="97" y="52" font-size="5">
+ Apprentissage
+ </text>
+ <text fill="DimGray" x="97" y="72" font-size="5">
+ Validation
+ </text>
+ <text fill="DimGray" x="97" y="92" font-size="5">
+ Hors du sac
+ </text>
+ <text fill="DimGray" x="97" y="112" font-size="5">
+ (Out Of Bag)
+ </text>
+ <g stroke="black" stroke-width=".2">
+ <rect x="95" y="40" width="40" height="80" fill="none" />
+ <line x1="95" y1="60" x2="135" y2="60" />
+ <line x1="95" y1="80" x2="135" y2="80" />
+ <line x1="125" y1="40" x2="125" y2="120" />
+ </g>
+ <line x1="90" x2="170" y1="130" y2="130" stroke="SlateGray" stroke-width=".2" />
+ <line x1="140" x2="140" y1="130" y2="150" stroke="SlateGray" stroke-width=".2" />
+ <line x1="90" x2="140" y1="140" y2="140" stroke="SlateGray" stroke-width=".2" />
+ <rect x="90" y="10" width="80" height="140"
+ stroke="SlateGray" stroke-width="0.2" fill="none" />
+
+ <rect x="140" y="70" width="30" height="50" fill="beige" />
+ <polygon fill="ivory" points="170,70 200,100 200,150 170,120" />
+ <polygon stroke="DarkKhaki" stroke-width="0.2" fill="none"
+ points="140,70 170,70 200,100 200,150 170,120 140,120" />
+ <g font-size="5" fill="DimGray">
+ <text x="145" y="80">
+ Faire
+ </text>
+ <text x="145" y="88">
+ varier :
+ </text>
+ <g text-anchor="end">
+ <text x="170" y="96">
+ - échan
+ </text>
+ <text x="170" y="104">
+ - hyper
+ </text>
+ </g>
+ <text transform="translate (170, 96) rotate (45)">
+ tillons
+ </text>
+ <text transform="translate(170, 104) rotate (45)">
+ paramètres
+ </text>
+ </g>
+ <line x1="170" y1="70" x2="170" y2="120" stroke="white" stroke-width=".2" />
+ <g font-size="5" text-anchor="middle">
+ <text x="115" y="138" fill="DimGray">
+ aRMSE
+ </text>
+ <text x="115" y="148" fill="DimGray">
+ OOB
+ </text>
+ <text x="155" y="143" fill="DimGray">
+ Modèle
+ </text>
+ </g>
+ <polyline points="70,138 85,138 85,37 100,37 98,35 100,37 98,39 100,37"
+ stroke-width="1"
+ stroke="CornflowerBlue"
+ fill="none"/>
+ </g>
+
+ <g id="page-aggregation">
+ <polygon points="10,160 80,160 110,190 110,290 10,290"
+ fill="white" />
+ <polygon points="10,165 85,165 100,180 10,180"
+ fill="WhiteSmoke" />
+ <line x1="10" y1="165" x2="85" y2="165"
+ stroke="SlateGray" stroke-width="1" />
+ <text fill="DimGray" x="50" y="177" font-size="10" text-anchor="middle">
+ 3) Stacking
+ </text>
+ <line x1="10" y1="180" x2="100" y2="180"
+ stroke="SlateGray" stroke-width=".2" />
+
+ <text fill="DimGray" x="20" y="188" font-size="5">
+ Par qualifier (indiv. pertinents) :
+ </text>
+
+ <rect x="15" y="190" width="30" height="40"
+ stroke="DarkOliveGreen" stroke-width=".2" fill="none" />
+ <g>
+ <rect x="22" y="197" width="5" height="23" fill="LavenderBlush" stroke="maroon" stroke-width=".2" />
+ <rect x="20" y="195" width="5" height="5" fill="white" stroke="SlateGray" stroke-width=".2" />
+ <rect x="20" y="200" width="5" height="18" fill="LavenderBlush" stroke="maroon" stroke-width=".2" />
+ <g font-size="5" text-anchor="middle" fill="DimGray">
+ <text x="22.5" y="200">?</text>
+ <text x="22.5" y="206">O</text>
+ <text x="22.5" y="212">O</text>
+ <text x="22.5" y="218">B</text>
+ </g>
+ <rect x="35.5" y="196" width="5" height="23" fill="WhiteSmoke" stroke="DimGray" stroke-width=".2" />
+ <g font-size="5" text-anchor="middle" fill="DimGray">
+ <text x="23.5" y="228">$\hat Y$</text>
+ <text x="38" y="228">$Y$</text>
+ </g>
+ </g>
+
+ <rect x="50" y="190" width="30" height="50"
+ stroke="DarkOliveGreen" stroke-width=".2" fill="none" />
+ <g>
+ <rect x="57" y="197" width="5" height="33" fill="LavenderBlush" stroke="maroon" stroke-width=".2" />
+ <rect x="55" y="195" width="5" height="5" fill="white" stroke="SlateGray" stroke-width=".2" />
+ <rect x="55" y="200" width="5" height="28" fill="LavenderBlush" stroke="maroon" stroke-width=".2" />
+ <rect x="70.5" y="196" width="5" height="33" fill="WhiteSmoke" stroke="DimGray" stroke-width=".2" />
+ <g font-size="5" text-anchor="middle" fill="DimGray">
+ <text x="58.5" y="238">$\hat Y$</text>
+ <text x="73" y="238">$Y$</text>
+ </g>
+ </g>
+
+ <text fill="DimGray" x="95" y="220" text-anchor="middle" font-size="10">
+ ...
+ </text>
+
+ <rect x="10" y="245" width="100" height="45" fill="LavenderBlush" />
+
+ <g stroke="DarkOliveGreen" stroke-width=".2">
+ <rect x="20" y="255" width="30" height="30"
+ fill="HoneyDew" />
+ <line x1="25" x2="25" y1="255" y2="285" />
+ <line x1="30" x2="30" y1="255" y2="285" />
+ <text x="40" y="275" font-size="5" text-anchor="middle">...</text>
+ </g>
+
+ <text font-size="5" fill="DimGray" x="80" y="275" text-anchor="middle">
+ $W$ : modèle
+ </text>
+
+ <g fill="none" stroke="DarkOliveGreen" stroke-width="1">
+ <polyline points="22.5,230 22.5,255 20.5,253 22.5,255 24.5,253 22.5,255" />
+ <polyline points="50,235 27.5,235 27.5,255 25.5,253 27.5,255 29.5,253 27.5,255" />
+ </g>
+
+ <polygon points="10,240 60,240 70,230 80,230 90,240 110,240 110,250 90,250 80,260 70,260 60,250 10,250"
+ stroke="DarkOliveGreen" stroke-width=".2" fill="honeydew" />
+ <text fill="DarkOliveGreen" font-size="5" text-anchor="middle" x="75" y="240">
+ Ridge
+ </text>
+ <text fill="DarkOliveGreen" font-size="5" x="60" y="247" text-anchor="middle">
+ (avec imputation par la moyenne)
+ </text>
+
+ <polygon points="10,160 80,160 110,190 110,290 10,290"
+ fill="none" stroke="SlateGray" stroke-width=".2" />
+ </g>
+
+ <g id="page-resultats">
+ <rect x="120" y="190" width="80" height="100" fill="white" />
+ <rect x="120" y="195" width="80" height="15" stroke="none" fill="WhiteSmoke" />
+
+ <text x="160" y="207" font-size="10" fill="DimGray" text-anchor="middle">
+ Sortie
+ </text>
+
+ <text x="125" y="230" font-size="5" fill="DimGray">
+ RSMS : variables
+ </text>
+
+ <text x="125" y="255" font-size="5" fill="DimGray">
+ LSMR : modèles bootstrap
+ </text>
+
+ <text x="125" y="280" font-size="5" fill="DimGray">
+ Stacking : modèle Ridge
+ </text>
+
+ <line x1="120" x2="200" y1="195" y2="195" stroke="SlateGray" stroke-width="1"/>
+ <line x1="120" x2="200" y1="210" y2="210" stroke="SlateGray" stroke-width=".2" />
+ <line x1="120" x2="200" y1="215" y2="215" stroke="SlateGray" stroke-width=".2" />
+ <line x1="120" x2="200" y1="240" y2="240" stroke="SlateGray" stroke-width=".2" />
+ <line x1="120" x2="200" y1="265" y2="265" stroke="SlateGray" stroke-width=".2" />
+ <rect x="120" y="190" width="80" height="100"
+ fill="none" stroke="SlateGray" stroke-width="0.2" />
+ </g>
+</svg>
diff --git a/images/lsmrrsmsinference.svg b/images/lsmrrsmsinference.svg
new file mode 100644
index 0000000..d4d96f3
--- /dev/null
+++ b/images/lsmrrsmsinference.svg
@@ -0,0 +1,475 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="150mm"
+ height="50mm"
+ viewBox="71 133 832 239"
+ version="1.1"
+ id="svg5016"
+ sodipodi:docname="Diagramme1.svg"
+ inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
+ <metadata
+ id="metadata5022">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs5020" />
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1080"
+ id="namedview5018"
+ showgrid="false"
+ inkscape:zoom="0.280633"
+ inkscape:cx="1016.6517"
+ inkscape:cy="-254.18323"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="g4890" />
+ <g
+ id="Arrière-plan" />
+ <g
+ id="g4848" />
+ <g
+ id="g4850" />
+ <g
+ id="g4852" />
+ <g
+ id="g4854" />
+ <g
+ id="g5014">
+ <g
+ id="g4862">
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-opacity:1"
+ d="M 81.191136,293.837 H 148.263 l -12.54004,38 H 70.176878 Z"
+ id="polygon4856"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <text
+ font-size="12.8"
+ style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sans-serif;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="106.05132"
+ y="320.49252"
+ id="text4860">
+ <tspan
+ x="106.05132"
+ y="320.49252"
+ id="tspan4858">POST</tspan>
+ </text>
+ </g>
+ <g
+ id="g4872">
+ <polygon
+ style="fill: #ffffff; fill-opacity: 1; stroke-opacity: 1; stroke-width: 2; stroke: #000000"
+ fill-rule="evenodd"
+ points="748.242,285.837 902.214,285.837 882.56,339.837 728.588,339.837 "
+ id="polygon4864" />
+ <text
+ font-size="12.8"
+ style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sans-serif;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="811.58362"
+ y="314.38007">
+ <tspan
+ x="811.58362"
+ y="314.38007"
+ id="tspan4866">Tonalité</tspan>
+ </text>
+ <text
+ font-size="12.8"
+ style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sans-serif;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="811.58362"
+ y="330.38007">
+ <tspan
+ x="811.58362"
+ y="330.38007"
+ id="tspan4868">multi-labels</tspan>
+ </text>
+ </g>
+ <g
+ id="g4890">
+ <polygon
+ style="fill: #ffffff; fill-opacity: 1; stroke-opacity: 1; stroke-width: 2; stroke: #000000"
+ fill-rule="evenodd"
+ points="633.727,264.044 689.121,312.837 633.727,361.63 578.333,312.837 "
+ id="polygon4874" />
+ <text
+ font-size="12.8"
+ style="fill: #000000; fill-opacity: 1; stroke: none;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal"
+ x="633.727"
+ y="316.737"
+ id="text4878">
+ <tspan
+ x="633.727"
+ y="316.737"
+ id="tspan4876">Stacking</tspan>
+ </text>
+ <path
+ style="fill: #ffffff; fill-opacity: 1; stroke-opacity: 1; stroke-width: 2; stroke: #000000"
+ fill-rule="evenodd"
+ d="M 552.427 148.117 C 584.947,138.617 601.207,135.45 633.727,135.45 C 666.247,135.45 682.507,138.617 715.027,148.117 L 715.027,198.783 C 682.507,208.283 666.247,211.45 633.727,211.45 C 601.207,211.45 584.947,208.283 552.427,198.783 L 552.427,148.117z"
+ id="path4880" />
+ <path
+ style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #000000"
+ d="M 552.427 148.117 C 584.947,157.617 601.207,160.783 633.727,160.783 C 666.247,160.783 682.507,157.617 715.027,148.117"
+ id="path4882" />
+ <text
+ font-size="12.7998"
+ style="font-style:normal;font-weight:normal;font-size:12.79979992px;font-family:sans-serif;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="633.72699"
+ y="183.40976"
+ id="text4888">
+ <tspan
+ x="633.72699"
+ y="183.40976"
+ id="tspan4884">Modèle</tspan>
+ </text>
+ <text
+ font-size="12.7998"
+ style="font-style:normal;font-weight:normal;font-size:12.79979992px;font-family:sans-serif;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="633.72699"
+ y="199.40976"
+ id="text4888">
+ <tspan
+ x="633.72699"
+ y="199.40976"
+ id="tspan4886">stacking</tspan>
+ </text>
+ </g>
+ <g
+ id="g4926">
+ <g
+ id="g4898">
+ <polygon
+ style="fill: #ffffff; fill-opacity: 1; stroke-opacity: 1; stroke-width: 2; stroke: #000000"
+ fill-rule="evenodd"
+ points="451.715,297.874 497.613,334.387 451.715,370.901 405.818,334.387 "
+ id="polygon4892" />
+ <text
+ font-size="12.8"
+ style="fill: #000000; fill-opacity: 1; stroke: none;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal"
+ x="451.715"
+ y="338.287"
+ id="text4896">
+ <tspan
+ x="451.715"
+ y="338.287"
+ id="tspan4894">LSMR</tspan>
+ </text>
+ </g>
+ <g
+ id="g4906">
+ <polygon
+ style="fill: #ffffff; fill-opacity: 1; stroke-opacity: 1; stroke-width: 2; stroke: #000000"
+ fill-rule="evenodd"
+ points="451.715,276.324 497.613,312.837 451.715,349.351 405.818,312.837 "
+ id="polygon4900" />
+ <text
+ font-size="12.8"
+ style="fill: #000000; fill-opacity: 1; stroke: none;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal"
+ x="451.715"
+ y="316.737"
+ id="text4904">
+ <tspan
+ x="451.715"
+ y="316.737"
+ id="tspan4902">LSMR</tspan>
+ </text>
+ </g>
+ <g
+ id="g4914">
+ <polygon
+ style="fill: #ffffff; fill-opacity: 1; stroke-opacity: 1; stroke-width: 2; stroke: #000000"
+ fill-rule="evenodd"
+ points="451.715,254.774 497.613,291.287 451.715,327.801 405.818,291.287 "
+ id="polygon4908" />
+ <text
+ font-size="12.8"
+ style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sans-serif;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="451.715"
+ y="300.11615"
+ id="text4912">
+ <tspan
+ x="451.715"
+ y="300.11615"
+ id="tspan4910">LSMR</tspan>
+ </text>
+ </g>
+ <path
+ style="fill: #ffffff; fill-opacity: 1; stroke-opacity: 1; stroke-width: 2; stroke: #000000"
+ fill-rule="evenodd"
+ d="M 365.565 148.117 C 400.025,138.617 417.255,135.45 451.715,135.45 C 486.175,135.45 503.405,138.617 537.865,148.117 L 537.865,198.783 C 503.405,208.283 486.175,211.45 451.715,211.45 C 417.255,211.45 400.025,208.283 365.565,198.783 L 365.565,148.117z"
+ id="path4916" />
+ <path
+ style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #000000"
+ d="M 365.565 148.117 C 400.025,157.617 417.255,160.783 451.715,160.783 C 486.175,160.783 503.405,157.617 537.865,148.117"
+ id="path4918" />
+ <text
+ font-size="12.7998"
+ style="font-style:normal;font-weight:normal;font-size:12.79979992px;font-family:sans-serif;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="451.715"
+ y="181.76672">
+ <tspan
+ x="451.715"
+ y="181.76672"
+ id="tspan4920">Modèles</tspan>
+ </text>
+ <text
+ font-size="12.7998"
+ style="font-style:normal;font-weight:normal;font-size:12.79979992px;font-family:sans-serif;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="451.715"
+ y="197.76672">
+ <tspan
+ x="451.715"
+ y="197.76672"
+ id="tspan4922">bootstrap</tspan>
+ </text>
+ </g>
+ <g
+ id="g4946">
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-opacity:1"
+ d="m 183.17656,287.837 149.52625,0 17.37119,25 -17.37119,25 -149.52625,0 -20.42256,-25 z"
+ id="path4928"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <text
+ font-size="12.8"
+ style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sans-serif;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="256.414"
+ y="313.17868"
+ id="text4934">
+ <tspan
+ x="256.414"
+ y="313.17868"
+ id="tspan4930">Reconnaissance</tspan>
+ </text>
+ <text
+ font-size="12.8"
+ style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sans-serif;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="256.414"
+ y="329.17868"
+ id="text4934">
+ <tspan
+ x="256.414"
+ y="329.17868"
+ id="tspan4932">des variables</tspan>
+ </text>
+ <path
+ style="fill: #ffffff; fill-opacity: 1; stroke-opacity: 1; stroke-width: 2; stroke: #000000"
+ fill-rule="evenodd"
+ d="M 168.914 148.117 C 203.914,138.617 221.414,135.45 256.414,135.45 C 291.414,135.45 308.914,138.617 343.914,148.117 L 343.914,198.783 C 308.914,208.283 291.414,211.45 256.414,211.45 C 221.414,211.45 203.914,208.283 168.914,198.783 L 168.914,148.117z"
+ id="path4936" />
+ <path
+ style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #000000"
+ d="M 168.914 148.117 C 203.914,157.617 221.414,160.783 256.414,160.783 C 291.414,160.783 308.914,157.617 343.914,148.117"
+ id="path4938" />
+ <text
+ font-size="12.7998"
+ style="font-style:normal;font-weight:normal;font-size:12.79979992px;font-family:sans-serif;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="256.414"
+ y="181.47302"
+ id="text4944">
+ <tspan
+ x="256.414"
+ y="181.47302"
+ id="tspan4940">Variables</tspan>
+ </text>
+ <text
+ font-size="12.7998"
+ style="font-style:normal;font-weight:normal;font-size:12.79979992px;font-family:sans-serif;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
+ x="256.414"
+ y="197.47302"
+ id="text4944">
+ <tspan
+ x="256.414"
+ y="197.47302"
+ id="tspan4942">sélectionnées</tspan>
+ </text>
+ </g>
+ <g
+ id="g4952">
+ <line
+ style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #000000"
+ x1="141.348"
+ y1="312.837"
+ x2="153.018"
+ y2="312.837"
+ id="line4948" />
+ <polygon
+ style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 2; stroke: #000000"
+ fill-rule="evenodd"
+ points="160.518,312.837 150.518,317.837 153.018,312.837 150.518,307.837 "
+ id="polygon4950" />
+ </g>
+ <g
+ id="g4958">
+ <line
+ style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #000000"
+ x1="350.073"
+ y1="312.837"
+ x2="396.082"
+ y2="312.837"
+ id="line4954" />
+ <polygon
+ style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 2; stroke: #000000"
+ fill-rule="evenodd"
+ points="403.582,312.837 393.582,317.837 396.082,312.837 393.582,307.837 "
+ id="polygon4956" />
+ </g>
+ <g
+ id="g4964">
+ <path
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
+ d="M 342.57075,302.26155 396.229,292.97198"
+ id="line4960"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <polygon
+ style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 2; stroke: #000000"
+ fill-rule="evenodd"
+ points="403.615,291.674 394.632,298.33 396.229,292.972 392.901,288.48 "
+ id="polygon4962" />
+ </g>
+ <g
+ id="g4970">
+ <path
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
+ d="M 342.33603,323.41344 396.229,332.702"
+ id="line4966"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <polygon
+ style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 2; stroke: #000000"
+ fill-rule="evenodd"
+ points="403.615,334 392.901,337.194 396.229,332.702 394.632,327.345 "
+ id="polygon4968" />
+ </g>
+ <g
+ id="g4976">
+ <line
+ style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #000000"
+ x1="497.613"
+ y1="291.287"
+ x2="576.225"
+ y2="303.733"
+ id="line4972" />
+ <polygon
+ style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 2; stroke: #000000"
+ fill-rule="evenodd"
+ points="583.632,304.906 572.973,308.281 576.225,303.733 574.537,298.404 "
+ id="polygon4974" />
+ </g>
+ <g
+ id="g4982">
+ <line
+ style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #000000"
+ x1="497.613"
+ y1="312.837"
+ x2="567.596"
+ y2="312.837"
+ id="line4978" />
+ <polygon
+ style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 2; stroke: #000000"
+ fill-rule="evenodd"
+ points="575.096,312.837 565.096,317.837 567.596,312.837 565.096,307.837 "
+ id="polygon4980" />
+ </g>
+ <g
+ id="g4988">
+ <line
+ style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #000000"
+ x1="497.613"
+ y1="334.387"
+ x2="576.225"
+ y2="321.941"
+ id="line4984" />
+ <polygon
+ style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 2; stroke: #000000"
+ fill-rule="evenodd"
+ points="583.632,320.768 574.537,327.271 576.225,321.941 572.973,317.394 "
+ id="polygon4986" />
+ </g>
+ <g
+ id="g4994">
+ <line
+ style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #000000"
+ x1="690.121"
+ y1="312.837"
+ x2="728.034"
+ y2="312.837"
+ id="line4990" />
+ <polygon
+ style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 2; stroke: #000000"
+ fill-rule="evenodd"
+ points="735.534,312.837 725.534,317.837 728.034,312.837 725.534,307.837 "
+ id="polygon4992" />
+ </g>
+ <g
+ id="g5000">
+ <line
+ style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #000000"
+ x1="256.414"
+ y1="211.45"
+ x2="256.414"
+ y2="278.101"
+ id="line4996" />
+ <polygon
+ style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 2; stroke: #000000"
+ fill-rule="evenodd"
+ points="256.414,285.601 251.414,275.601 256.414,278.101 261.414,275.601 "
+ id="polygon4998" />
+ </g>
+ <g
+ id="g5006">
+ <line
+ style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #000000"
+ x1="451.715"
+ y1="211.45"
+ x2="451.715"
+ y2="245.038"
+ id="line5002" />
+ <polygon
+ style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 2; stroke: #000000"
+ fill-rule="evenodd"
+ points="451.715,252.538 446.715,242.538 451.715,245.038 456.715,242.538 "
+ id="polygon5004" />
+ </g>
+ <g
+ id="g5012">
+ <line
+ style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #000000"
+ x1="633.727"
+ y1="211.45"
+ x2="633.727"
+ y2="254.308"
+ id="line5008" />
+ <polygon
+ style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 2; stroke: #000000"
+ fill-rule="evenodd"
+ points="633.727,261.808 628.727,251.808 633.727,254.308 638.727,251.808 "
+ id="polygon5010" />
+ </g>
+ </g>
+</svg>
diff --git a/images/nemenyi.R b/images/nemenyi.R
new file mode 100644
index 0000000..f7e4729
--- /dev/null
+++ b/images/nemenyi.R
@@ -0,0 +1,7 @@
+#!/usr/bin/env Rscript
+source (sprintf ("%s/images/lsmr_global_tuning.R", Sys.getenv ("ABS_TOP_SRCDIR")))
+print_win_lose_tie_plot ()
+filename <- Sys.getenv ("OUTPUT")
+svg (filename, width = 5, height = 5)
+cd_analysis ()
+dev.off ()
diff --git a/images/rsms_1.R b/images/rsms_1.R
new file mode 100644
index 0000000..df07a1d
--- /dev/null
+++ b/images/rsms_1.R
@@ -0,0 +1,69 @@
+load (sprintf ("%s/data/rsms_test.Rdata", Sys.getenv ("ABS_TOP_SRCDIR")))
+
+Sys.setlocale ("LC_ALL", "fr_FR.UTF-8")
+
+#' Print the graphs for the features.
+#' @return the graph.
+#' @export
+features_graph <- function () {
+ library ("magrittr")
+ data <- (test
+ %>% dplyr::filter (frac_labeled == 0.3,
+ frac_labels == 1,
+ algorithm %in% c ("formulas", "mifs", "rfs", "sfus"),
+ dataset %in% c ("atp1d", "atp7d", "edm", "enb", "oes10", "oes97", "osales", "scpf", "sf1", "sf2", "wq"),
+ !is.na (error))
+ %>% dplyr::mutate (algorithm = ifelse (algorithm == "formulas", "\\textbf{RSMS}", algorithm))
+ %>% dplyr::mutate (algorithm = ifelse (algorithm == "mifs", "MIFS", algorithm))
+ %>% dplyr::mutate (algorithm = ifelse (algorithm == "rfs", "RFS", algorithm))
+ %>% dplyr::mutate (algorithm = ifelse (algorithm == "sfus", "SFUS", algorithm))
+ %>% dplyr::select (dataset, algorithm, frac_features, error)
+ %>% dplyr::group_by (dataset, algorithm, frac_features)
+ %>% dplyr::summarize (n = dplyr::n (),
+ mean = mean (error),
+ sd = sd (error),
+ min = min (error),
+ max = max (error),
+ median = median (error),
+ q1 = quantile (error, 0.25),
+ q3 = quantile (error, 0.75))
+ %>% dplyr::ungroup ())
+ arrange <- function (...) {
+ gridExtra::grid.arrange (..., layout_matrix = rbind (
+ c (1, 2, 3),
+ c (4, 5, 6),
+ c (7, 8, 9),
+ c (10, 11, 11)
+ ))
+ }
+ do.call (arrange, lapply ((data
+ %>% dplyr::select (dataset)
+ %>% dplyr::distinct ())$dataset, function (dataset_name) {
+ with_legend <- (data
+ %>% dplyr::filter (dataset == dataset_name)
+ %>% dplyr::mutate (ymin = mean - sd, ymax = max + sd)
+ %>% dplyr::select (Algorithme = algorithm,
+ `Variables` = frac_features,
+ `aRMSE moyenne` = mean, ymin, ymax)
+ %>% ggplot2::ggplot (ggplot2::aes (x = `Variables`,
+ y = `aRMSE moyenne`,
+ color = Algorithme,
+ linetype = Algorithme))
+ + ggplot2::geom_line ()
+ + ggplot2::ggtitle (dataset_name)
+ + ggplot2::scale_x_continuous (labels = scales::percent)
+ + ggplot2::scale_color_manual (limits = c ("\\textbf{RSMS}", "MIFS", "SFUS", "RFS"),
+ values = c ("black", "#e69f00", "#56b4e9", "#009e73"))
+ + ggplot2::scale_linetype_manual (limits = c ("\\textbf{RSMS}", "MIFS", "SFUS", "RFS"),
+ values = c ("solid", "dashed", "longdash", "dotdash")))
+ if (dataset_name == "wq") {
+ with_legend
+ } else {
+ with_legend + ggplot2::theme (legend.position = "none")
+ }
+ }))
+}
+
+plot <- features_graph ()
+filename <- Sys.getenv ("OUTPUT")
+ggplot2::ggsave (filename, plot, device = "svg", width = 6, height = 8)
diff --git a/images/rsms_2.R b/images/rsms_2.R
new file mode 100644
index 0000000..8be2cf0
--- /dev/null
+++ b/images/rsms_2.R
@@ -0,0 +1,58 @@
+load (sprintf ("%s/data/rsms_test.Rdata", Sys.getenv ("ABS_TOP_SRCDIR")))
+
+Sys.setlocale ("LC_ALL", "fr_FR.UTF-8")
+
+#' Print the graphs for label selection
+#' @return the graph.
+#' @export
+labels_graph <- function () {
+ library ("magrittr")
+ data <- (test
+ %>% dplyr::filter (frac_labeled == 0.3,
+ frac_features == 0.3,
+ algorithm == "formulas",
+ dataset %in% c ("atp1d", "atp7d", "edm", "enb", "oes10", "oes97", "osales", "scpf", "sf1", "sf2", "wq"),
+ !is.na (error))
+ %>% dplyr::select (dataset, frac_labels, error)
+ %>% dplyr::group_by (dataset, frac_labels)
+ %>% dplyr::summarize (n = dplyr::n (),
+ mean = mean (error),
+ sd = sd (error),
+ min = min (error),
+ max = max (error),
+ median = median (error),
+ q1 = quantile (error, 0.25),
+ q3 = quantile (error, 0.75))
+ %>% dplyr::ungroup ())
+ arrange <- function (...) {
+ gridExtra::grid.arrange (..., layout_matrix = rbind (
+ c (1, 2, 3),
+ c (4, 5, 6),
+ c (7, 8, 9),
+ c (10, 11, 11)
+ ))
+ }
+ do.call (arrange, lapply ((data
+ %>% dplyr::select (dataset)
+ %>% dplyr::distinct ())$dataset, function (dataset_name) {
+ with_legend <- (data
+ %>% dplyr::filter (dataset == dataset_name)
+ %>% dplyr::mutate (ymin = mean - sd, ymax = max + sd)
+ %>% dplyr::select (`Labels sélectionnées` = frac_labels,
+ `aRMSE moyenne` = mean, ymin, ymax)
+ %>% ggplot2::ggplot (ggplot2::aes (x = `Labels sélectionnées`,
+ y = `aRMSE moyenne`))
+ + ggplot2::geom_line ()
+ + ggplot2::ggtitle (dataset_name)
+ + ggplot2::scale_x_continuous (labels = scales::percent))
+ if (dataset_name == "wq") {
+ with_legend
+ } else {
+ with_legend + ggplot2::theme (legend.position = "none")
+ }
+ }))
+}
+
+plot <- labels_graph ()
+filename <- Sys.getenv ("OUTPUT")
+ggplot2::ggsave (filename, plot, device = "svg", width = 6, height = 8)
diff --git a/images/rsms_3.R b/images/rsms_3.R
new file mode 100644
index 0000000..52a77e8
--- /dev/null
+++ b/images/rsms_3.R
@@ -0,0 +1,94 @@
+load (sprintf ("%s/data/rsms_test.Rdata", Sys.getenv ("ABS_TOP_SRCDIR")))
+
+Sys.setlocale ("LC_ALL", "fr_FR.UTF-8")
+
+#' Print the graphs for the interest of label selection
+#' @return the graph.
+#' @export
+with_labels_graph <- function () {
+ library ("magrittr")
+ lower_number <- tibble::tibble (
+ dataset =
+ c ("atp1d",
+ "atp7d",
+ "edm",
+ "enb",
+ "oes10",
+ "oes97",
+ "osales",
+ "scpf",
+ "sf1",
+ "sf2",
+ "wq"),
+ frac_labeled_restricted =
+ c (0.8,
+ 0.8,
+ 0.6,
+ 0.6,
+ 0.8,
+ 0.8,
+ 0.8,
+ 0.6,
+ 0.6,
+ 0.6,
+ 0.8))
+ data <- (test
+ %>% dplyr::filter (frac_labeled == 0.3,
+ algorithm == "formulas",
+ dataset %in% c ("atp1d", "atp7d", "edm", "enb", "oes10", "oes97", "osales", "scpf", "sf1", "sf2", "wq"),
+ !is.na (error))
+ %>% dplyr::inner_join (lower_number)
+ %>% dplyr::mutate (full = (frac_labels == 1),
+ restricted = (frac_labels == frac_labeled_restricted))
+ %>% dplyr::filter (full | restricted)
+ %>% dplyr::mutate (algorithm = ifelse (full, "RSMS (tous labels)", "RSMS (restreint)"))
+ %>% dplyr::select (dataset, frac_features, algorithm, error)
+ %>% dplyr::group_by (dataset, frac_features, algorithm)
+ %>% dplyr::summarize (n = dplyr::n (),
+ mean = mean (error),
+ sd = sd (error),
+ min = min (error),
+ max = max (error),
+ median = median (error),
+ q1 = quantile (error, 0.25),
+ q3 = quantile (error, 0.75))
+ %>% dplyr::ungroup ())
+ arrange <- function (...) {
+ gridExtra::grid.arrange (..., layout_matrix = rbind (
+ c (1, 2, 3),
+ c (4, 5, 6),
+ c (7, 8, 9),
+ c (10, 11, 11)
+ ))
+ }
+ do.call (arrange, lapply ((data
+ %>% dplyr::select (dataset)
+ %>% dplyr::distinct ())$dataset, function (dataset_name) {
+ with_legend <- (data
+ %>% dplyr::filter (dataset == dataset_name)
+ %>% dplyr::mutate (ymin = mean - sd, ymax = max + sd)
+ %>% dplyr::select (Algorithme = algorithm,
+ `Variables` = frac_features,
+ `aRMSE moyenne` = mean, ymin, ymax)
+ %>% ggplot2::ggplot (ggplot2::aes (x = `Variables`,
+ y = `aRMSE moyenne`,
+ color = Algorithme,
+ linetype = Algorithme))
+ + ggplot2::geom_line ()
+ + ggplot2::ggtitle (dataset_name)
+ + ggplot2::scale_x_continuous (labels = scales::percent)
+ + ggplot2::scale_color_manual (limits = c ("RSMS (restreint)", "RSMS (tous labels)"),
+ values = c ("black", "#e69f00", "#56b4e9", "#009e73"))
+ + ggplot2::scale_linetype_manual (limits = c ("RSMS (restreint)", "RSMS (tous labels)"),
+ values = c ("solid", "dashed", "longdash", "dotdash")))
+ if (dataset_name == "wq") {
+ with_legend
+ } else {
+ with_legend + ggplot2::theme (legend.position = "none")
+ }
+ }))
+}
+
+plot <- with_labels_graph ()
+filename <- Sys.getenv ("OUTPUT")
+ggplot2::ggsave (filename, plot, device = "svg", width = 6, height = 8)
diff --git a/images/rsms_4.R b/images/rsms_4.R
new file mode 100644
index 0000000..94045d2
--- /dev/null
+++ b/images/rsms_4.R
@@ -0,0 +1,42 @@
+load (sprintf ("%s/data/rsms_protocol_4.Rdata", Sys.getenv ("ABS_TOP_SRCDIR")))
+
+Sys.setlocale ("LC_ALL", "fr_FR.UTF-8")
+
+#' Print the convergence graphs
+#' @return the graphs
+#' @export
+convergence_graph <- function () {
+ library ("magrittr")
+ data <- (protocol_4
+ %>% dplyr::group_by (dataset, maxiter)
+ %>% dplyr::summarize (mloss = mean (loss),
+ sloss = sd (loss))
+ %>% dplyr::mutate (dataset,
+ `Nombre d'itérations` = maxiter,
+ `Coût` = mloss,
+ mini = mloss - sloss,
+ maxi = mloss + sloss))
+ arrange <- function (...) {
+ gridExtra::grid.arrange (..., layout_matrix = rbind (
+ c (1, 1, 2, 2, 3, 3),
+ c (4, 4, 5, 5, 6, 6),
+ c (7, 7, 8, 8, 9, 9),
+ c (10, 10, 10, 11, 11, 11)
+ ))
+ }
+ do.call (arrange, lapply (c ("atp1d", "atp7d", "edm", "enb", "oes10", "oes97", "osales", "scpf", "sf1", "sf2", "wq"), function (dataset_name) {
+ (data
+ %>% dplyr::filter (dataset == dataset_name)
+ %>% ggplot2::ggplot (ggplot2::aes (x = `Nombre d'itérations`,
+ y = `Coût`,
+ ymin = mini,
+ ymax = maxi))
+ + ggplot2::geom_line ()
+ + ggplot2::geom_ribbon (alpha = 0.2)
+ + ggplot2::ggtitle (dataset_name))
+ }))
+}
+
+plot <- convergence_graph ()
+filename <- Sys.getenv ("OUTPUT")
+ggplot2::ggsave (filename, plot, device = "svg", width = 6, height = 8)
diff --git a/images/twomoons.R b/images/twomoons.R
new file mode 100755
index 0000000..c825abd
--- /dev/null
+++ b/images/twomoons.R
@@ -0,0 +1,50 @@
+#!/usr/bin/env Rscript
+t <- seq (0, 1, length.out = 101)
+labeled <- c (rep (0, 100), 1)
+upper_x <- cos (t * pi) + 0.5
+upper_y <- sin (t * pi)
+lower_x <- -upper_x
+lower_y <- -upper_y
+
+`%>%` <- magrittr::`%>%`
+
+data <- (tibble::tibble (x = upper_x, y = upper_y,
+ label = c (rep ("unlabeled", 100), "+"),
+ `semi-supervised solution` = "+")
+ %>% rbind (tibble::tibble (x = lower_x, y = lower_y,
+ label = c (rep ("unlabeled", 100), "-"),
+ `semi-supervised solution` = "-"))
+ %>% dplyr::mutate (noise_x = 0.1 * rnorm (dplyr::n ()),
+ noise_y = 0.1 * rnorm (dplyr::n ()))
+ %>% dplyr::mutate (x = x + noise_x, y = y + noise_y)
+ %>% dplyr::mutate (`naive solution` = ifelse (x <= 0, "+", "-")))
+
+scales <- function (plot) {
+ (plot
+ + ggplot2::scale_size_manual (values = c ("unlabeled" = 1, "+" = 3, "-" = 3))
+ + ggplot2::scale_shape_manual (values = c ("+" = 16, "-" = 17, "unlabeled" = 3))
+ + ggplot2::scale_color_manual (values = c ("+" = "#E69F00", "-" = "#56B4E9", "unlabeled" = "#009E73"))
+ + ggplot2::theme_void ()
+ + ggplot2::theme(legend.position="none")
+ + ggplot2::coord_fixed ())
+}
+
+question <- ((data
+ %>% ggplot2::ggplot (ggplot2::aes (x = x, y = y, shape = label, color = label, size = label))
+ + ggplot2::geom_point ())
+ %>% scales ())
+
+naive_answer <- ((data
+ %>% ggplot2::ggplot (ggplot2::aes (x = x, y = y, shape = `naive solution`, color = `naive solution`))
+ + ggplot2::geom_point ()
+ + ggplot2::geom_vline (xintercept = 0))
+ %>% scales ())
+
+semi_supervised_answer <- ((data
+ %>% ggplot2::ggplot (ggplot2::aes (x = x, y = y, shape = `semi-supervised solution`, color = `semi-supervised solution`))
+ + ggplot2::geom_point ())
+ %>% scales ())
+
+plot <- gridExtra::arrangeGrob (question, gridExtra::arrangeGrob (naive_answer, semi_supervised_answer, ncol = 2), nrow = 2)
+filename <- Sys.getenv ("OUTPUT")
+ggplot2::ggsave (filename, plot, device = "svg", width = 3.5, height = 3.5)
diff --git a/images/wilcoxon.R b/images/wilcoxon.R
new file mode 100644
index 0000000..2d197e2
--- /dev/null
+++ b/images/wilcoxon.R
@@ -0,0 +1,6 @@
+#!/usr/bin/env Rscript
+source (sprintf ("%s/images/lsmr_global_tuning.R", Sys.getenv ("ABS_TOP_SRCDIR")))
+print_win_lose_tie_plot ()
+plot <- print_win_lose_tie_plot ()
+filename <- Sys.getenv ("OUTPUT")
+ggplot2::ggsave (filename, plot, device = "svg", width = 5, height = 5)
diff --git a/manuscrit.html b/manuscrit.html
new file mode 100644
index 0000000..24b5061
--- /dev/null
+++ b/manuscrit.html
@@ -0,0 +1,9309 @@
+<?xml version="1.0" encoding="utf-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:m="http://planete-kraus.eu/ns/manuscrit"
+ xmlns:h="http://h4sp.planete-kraus.eu/ns/h4sp"
+ xmlns:b="http://h4sp.planete-kraus.eu/ns/bibliography"
+ xmlns:alg="http://h4sp.planete-kraus.eu/ns/algorithm"
+ xml:lang="fr">
+ <head>
+ <title>
+ Apprentissage semi-supervisé pour la régression multi-labels :
+ Application à l’annotation automatique de pneumatiques.
+ </title>
+ <m:author email="vivien@planete-kraus.eu">
+ Vivien <h:small-caps>Kraus</h:small-caps>
+ </m:author>
+ <m:page-de-garde>
+ <m:numéro-ordre-nnt>2021LYSE1052</m:numéro-ordre-nnt>
+ <m:page-de-garde-titre>Thèse de doctorat de l’université de Lyon</m:page-de-garde-titre>
+ <m:l-université>l’Université Claude Bernard Lyon 1</m:l-université>
+ <m:école-doctorale>École Doctorale ED512 <br/> Informatique et Mathématiques (InfoMaths)</m:école-doctorale>
+ <m:spécialité>Informatique</m:spécialité>
+ <m:date-soutenance>12/03/2021</m:date-soutenance>
+ <m:jury>
+ <m:membre grade="Professeur"
+ affiliation="Université de Lorraine"
+ rôle="Rapporteur">
+ Mme Marianne <h:small-caps>Clausel</h:small-caps>
+ </m:membre>
+ <m:membre grade="Professeur"
+ affiliation="Université Clermont-Auvergne"
+ rôle="Rapporteur">
+ M. Engelbert <h:small-caps>Mephu Nguifo</h:small-caps>
+ </m:membre>
+ <m:membre grade="Professeur"
+ affiliation="Université Lyon 1"
+ rôle="Examinateur">
+ M. Hamamache <h:small-caps>Kheddouci</h:small-caps>
+ </m:membre>
+ <m:membre grade="Professeur"
+ affiliation="Université de Nantes"
+ rôle="Examinatrice">
+ Mme Pascale <h:small-caps>Kuntz</h:small-caps>
+ </m:membre>
+ <m:membre grade="Maître de conférences"
+ affiliation="Université d’Évry"
+ rôle="Examinatrice">
+ Mme Farida <h:small-caps>Zehraoui</h:small-caps>
+ </m:membre>
+ <m:membre grade="MCF-HDR"
+ affiliation="Université Lyon 1"
+ rôle="Directeur de thèse">
+ M. Khalid <h:small-caps>Benabdeslem</h:small-caps>
+ </m:membre>
+ <m:membre grade="Responsable R&amp;D"
+ affiliation="Lizeo IT"
+ rôle="Invité">
+ M. Bruno <h:small-caps>Canitia</h:small-caps>
+ </m:membre>
+ </m:jury>
+ </m:page-de-garde>
+ </head>
+ <body>
+ <m:résumé>
+ <p>
+ Avec l’avènement et le développement rapide des technologies
+ numériques, les données sont devenues à la fois un bien
+ précieux et très abondant. Cependant, avec une telle
+ profusion, se posent des questions relatives à la qualité et
+ l'étiquetage de ces données. En effet, à cause de
+ l’augmentation des volumes de données disponibles, alors que
+ le coût de l'étiquetage par des experts humains reste très
+ important, il est de plus en plus nécessaire de pouvoir
+ renforcer l’apprentissage semi-supervisé grâce l'exploitation
+ des données non-labellisées. Ce problème est d’autant plus
+ marqué dans le cas de l’apprentissage multi-labels, et en
+ particulier pour la régression, où chaque unité statistique
+ est guidée par plusieurs cibles différentes, qui prennent la
+ forme de scores numériques.
+ </p>
+ <p>
+ C'est dans ce cadre fondamental, que s'inscrit cette
+ thèse. Tout d'abord, nous commençons par proposer une méthode
+ d’apprentissage pour la régression semi-supervisée, que nous
+ mettons à l’épreuve à travers une étude expérimentale
+ détaillée. Grâce à cette nouvelle méthode, nous présentons une
+ deuxième contribution, plus adaptée au contexte
+ multi-labels. Nous montrons également son efficacité par une
+ étude comparative, sur des jeux de données issues de la
+ littérature. Par ailleurs, la dimensionnalité du problème
+ demeure toujours la difficulté de l'apprentissage automatique,
+ et sa réduction suscite l'intérêt de plusieurs chercheurs dans
+ la communauté. Une des tâches majeures répondant à cette
+ problématique est la sélection de variables, que nous
+ proposons d'étudier ici dans un cadre complexe:
+ semi-supervisé, multi-labels et pour la régression.
+ </p>
+ </m:résumé>
+ <m:mots-clés>
+ <m:mot-clé>apprentissage semi-supervisé</m:mot-clé>
+ <m:mot-clé>apprentissage multi-labels</m:mot-clé>
+ <m:mot-clé>régression</m:mot-clé>
+ <m:mot-clé>régularisation Laplacienne</m:mot-clé>
+ <m:mot-clé>sélection de variables</m:mot-clé>
+ <m:mot-clé>sélection de labels</m:mot-clé>
+ <m:mot-clé>optimisation</m:mot-clé>
+ </m:mots-clés>
+ <m:abstract xml:lang="en">
+ <p>
+ With the advent and rapid growth of digital technologies, data
+ has become a precious asset as well as plentiful. However,
+ with such an abundance come issues about data quality and
+ labelling. Because of growing numbers of available data
+ volumes, while human expert labelling is still important, it
+ is more and more necessary to reinforce semi-supervised
+ learning with the exploitation of unlabeled data. This problem
+ is all the more noticeable in the multi-label learning
+ framework, and in particular for regression, where each
+ statistical unit is guided by many different targets, taking
+ the form of numerical scores.
+ </p>
+ <p>
+ This thesis focuses on this fundamental framework. First, we
+ begin by proposing a method for semi-supervised regression
+ learning, that we challenge through a detailed experimental
+ study. Thanks to this new method, we present a second
+ contribution, more fitted to the multi-label framework. We
+ also show its efficiency with a comparative study on
+ literature data sets. Furthermore, the problem dimension is
+ always a pain point of machine learning, and reducing it
+ sparks the interest of many researchers. Feature selection is
+ one of the major tasks addressing this problems, and we
+ propose to study it here in a complex framework: for
+ semi-supervised, multi-label regression.
+ </p>
+ <p>
+ Finally, an experimental validation is proposed on a real
+ problem about automatic annotation of tires, to tackle the
+ needs expressed by the industrial partner of this thesis.
+ </p>
+ </m:abstract>
+ <m:keywords xml:lang="en">
+ <m:keyword>semi-supervised learning</m:keyword>
+ <m:keyword>multi-label learning</m:keyword>
+ <m:keyword>regression</m:keyword>
+ <m:keyword>Laplacian regularization</m:keyword>
+ <m:keyword>feature selection</m:keyword>
+ <m:keyword>label selection</m:keyword>
+ <m:keyword>optimization</m:keyword>
+ </m:keywords>
+ <h:tableofcontents />
+ <h:listoffigures />
+ <h:listoftables />
+ <h:listofalgorithms />
+ <h1>Introduction générale</h1>
+ <h2>Contexte et motivation</h2>
+ <p>
+ L'apprentissage automatique est une discipline de l'intelligence
+ artificielle qui consiste à extraire à partir de données
+ complexes, des connaissances utiles pour la prise de décision
+ dans différents domaines d'application. Ces données peuvent
+ êtres présentées sous différentes formes : observations, objets,
+ transactions, signaux, graphes, textes, etc.
+ </p>
+ <p>
+ L'apprentissage automatique à partir des données vise à extraire
+ des connaissances directement à partir des observations que l'on
+ peut effectuer de l'environnement. Selon le cadre d'application,
+ les observations peuvent être très différentes. Il peut s'agir
+ de textes et d'images, par exemple, afin d'effectuer de la
+ classification de documents textuels ou de la reconnaissance
+ d'images.
+ </p>
+ <p>
+ Dans ce contexte, le principe général consiste à modéliser une
+ fonction statistique qui nous permet de résoudre le problème
+ abordé. Cette modélisation est jugée pertinente si elle permet
+ de généraliser la décision à de nouvelles formes de données
+ inconnues au modèle, a priori.
+ </p>
+ <p>
+ Dans le cadre de cette thèse, la modélisation que nous cherchons
+ à mettre en œuvre se présente sous la forme <h:eq>y = f
+ (x)</h:eq> où <h:eq>x</h:eq> représente les variables
+ explicatives du problème, par exemple les mots employés dans un
+ texte. <h:eq>y</h:eq> représente la variable cible à expliquer,
+ appelée aussi cible ou label, c'est-à-dire celle que l'on
+ cherche à expliquer : le ou les thèmes du document textuel.
+ </p>
+ <p>
+ Pour trouver cette fonction <h:eq>f</h:eq>, il y a plusieurs
+ régimes d'application. Si la variable cible est complètement
+ connue (pour toutes les observations), il s'agit d'apprentissage
+ supervisé. Si elle est inconnue, il s'agit d'apprentissage non
+ supervisé. Dans le cas qui nous intéresse, elle n'est que
+ partiellement connue, ce qui définit l'apprentissage
+ semi-supervisé.
+ </p>
+ <p>
+ Selon le type d'apprentissage envisagé, nous pouvons utiliser un
+ certain nombre d'algorithmes, c'est-à-dire une fonction qui à
+ partir des données construit le modèle <h:eq>f</h:eq>. Dans le
+ cadre qui nous intéresse ici, l'algorithme consiste à minimiser
+ une fonction de coût, en cherchant le modèle parmi une certaine
+ classe de fonctions. La fonction de coût accumule donc les
+ erreurs commises sur l'ensemble du jeu de données. En la
+ minimisant, l'objectif est d'obtenir le modèle le plus adapté à
+ la distribution des données.
+ </p>
+ <p>
+ Par ailleurs, en apprentissage automatique, l'extraction de
+ variables permet de synthétiser l'information contenue dans les
+ caractéristiques du problème, de façon à en obtenir de nouvelles
+ où chaque observation est décrite différemment. Cela permet
+ d'effectuer une réduction de dimension. D'autre part, la
+ sélection de variables est un cas particulier, pour lequel
+ chaque variable obtenue est une variable de description de
+ l'observation, mais seules les variables pertinentes sont
+ sélectionnées. La sélection de variables a donc un avantage
+ considérable sur l'extraction de variables, puisqu'elle permet
+ d'avoir un modèle plus interprétable. Par exemple, dans le cas
+ de l'apprentissage à partir de données textuelles, elle permet
+ de sélectionner le champ lexical du thème qui nous intéresse, ce
+ qui est en soi un apport de connaissances.
+ </p>
+ <p>
+ La performance des algorithmes d'apprentissage en
+ classification, régression ou sélection de variables, s'évalue
+ sur les données n'ayant pas servi à la construction du
+ modèle. Si la fonction résultante <h:eq>f</h:eq> est performante
+ sur ces données, elle permettra de généraliser la connaissance,
+ et ainsi conduire à une décision fiable. Principalement, on
+ distingue deux obstacles qui s'opposent à la généralisation de
+ la fonction de décision : le <emph>sous-apprentissage</emph>,
+ pour lequel <h:eq>f</h:eq> ignore l'information utile des
+ données, et le <emph>sur-apprentissage</emph>, qui donne trop
+ d'importance au bruit dans les données. Le sous-apprentissage
+ est assez simple à détecter, puisque la fonction <h:eq>f</h:eq>
+ n'est pas performante sur les données connues.
+ </p>
+ <p>
+ Il est parfois possible de contrer l'effet du sur-apprentissage,
+ en introduisant une régularisation explicite dans l'algorithme
+ préconisé. Ainsi, celui-ci minimise l'erreur accumulée sur
+ l'ensemble des données, mais tente également de minimiser la
+ complexité du modèle sous-jacent. Une certaine définition de la
+ complexité du modèle informe le choix de la régularisation
+ employée.
+ </p>
+ <p>
+ Selon la nature de la variable cible, différents algorithmes
+ peuvent être envisagés. Dans le cas de la régression, cette
+ variable est de nature continue, contrairement à la
+ classification dans laquelle elle est discrète. De plus, dans le
+ cas d'un apprentissage multi-labels, l'espace de cette variable
+ cible s'élargit et rejoint celui des variables explicatives dans
+ toute sa complexité liée à la corrélation, au bruit et à la
+ difficulté à modéliser la fonction de décision avec de multiples
+ cibles, simultanément. C'est enfin, dans ce cadre complexe, que
+ s'inscrit l'aspect fondamental de cette thèse.
+ </p>
+ <p>
+ Sur l'aspect applicatif, cette thèse s’inscrit dans le cadre
+ d’une convention CIFRE entre le laboratoire LIRIS et la société
+ Lizeo IT du groupe Lizeo <h:fn>Cette thèse fait l'objet d'une
+ "Convention Industrielle de Formation par la Recherche" (CIFRE)
+ proposée par l’Agence Nationale de la Recherche Technique
+ (ANRT). Ce mode de financement consiste en un partenariat entre
+ une entreprise, ici Lizeo IT du groupe Lizeo et une université
+ (ici, l'université Claude Bernard Lyon 1 , UCBL).</h:fn>. En
+ effet, dans le cadre de ses activités, l'entreprise récolte de
+ nombreux documents textuels issus de multiples sources et
+ décrivant les qualités des pneumatiques. Chacune de ces
+ caractéristiques représente un score d'appréciation continu
+ (sous forme d'une note) : ce sont donc des variables cible,
+ réelles. La connaissance extraite de ces données d'appréciation
+ sont d'une très grande importance pour les manufacturiers et les
+ distributeurs, mais l'annotation manuelle est très délicate,
+ puisqu'elle requiert des connaissances vis-à-vis des produits,
+ et coûteuse puisqu'elle doit s'effectuer sur plusieurs critères
+ différents. Par conséquent, l'apprentissage doit s'inscrire
+ dans le cadre semi-supervisé pour la régression multi-labels.
+ </p>
+ <h2>Contributions</h2>
+ <p>
+ Tout d'abord, nous avons commencé à aborder le problème de la
+ régression dans le cadre mono-label. Pour ce faire, nous nous
+ sommes fondés sur deux algorithmes représentatifs de l'état de
+ l'art : <emph>SSSL</emph> (Simple algorithm for Semi-supevised
+ Learning, <h:cite href="ji_simple_2012"/>) et celui de la
+ régularisation Laplacienne
+ <h:cite href="belkin_manifold_2006"/>. <emph>SSSL</emph>
+ effectue une régression simple après un changement d'espace des
+ données ; nous proposons de reprendre ce changement d'espace et
+ d'apporter une régularisation Laplacienne à la régression, pour
+ obtenir l'algorithme <emph>Laplacian-regularized Simple
+ Semi-Supervised Learning</emph>, ou <emph>LapS3L</emph>.
+ </p>
+ <p>
+ Nous avons proposé par la suite une adaptation
+ de <emph>LapS3L</emph> pour l'apprentissage multi-labels,
+ <emph>Laplacian-based Semi-supervised Multi-regression</emph>,
+ ou <emph>LSMR</emph>. L'idée principale de cette extension
+ consiste à imposer, au travers d'une régularisation, que les
+ labels similaires doivent être modélisés de manière similaire.
+ </p>
+ <p>
+ Nous avons également développé un algorithme de sélection de
+ variables multi-labels et semi-supervisé,
+ appelé <emph>RSMS</emph> pour <emph>Robust Semi-supervised
+ Multi-label feature Selection for regression</emph>. En effet,
+ dans le cas de l'apprentissage multi-labels, la sélection de
+ variables propose de sélectionner les variables utiles pour tous
+ les labels, simultanément. Cet algorithme de sélection de
+ variables introduit l'idée que la sélection de labels permet de
+ guider la sélection de variables.
+ </p>
+ <p>
+ Enfin, nous étions confrontés à un jeu de données textuel pour
+ la résolution d'un problème réel, qui consiste à évaluer
+ l'appréciation de diverses propriétés associées à des
+ pneumatiques dans des commentaires d'internautes. C'est la
+ raison pour laquelle nous avons développé un démonstrateur en
+ situation permettant d'adapter nos algorithmes ainsi développés
+ aux contingences de cette application à forte valeur ajoutée
+ pour l'entreprise.
+ </p>
+ <h2>Organisation du manuscrit</h2>
+ <p>
+ L'organisation de ce manuscrit suit l'ordre chronologique de nos
+ propositions. Dans le chapitre qui suit, nous dresserons un état
+ de l'art sur l'apprentissage semi-supervisé et multi-labels, en
+ s'intéressant également à la sélection de variables. Ensuite,
+ nous présenterons <emph>LapS3L</emph>
+ (<emph>Laplacian-regularised Simple Semi-Supervised
+ Learning</emph>), en décrivant les travaux utilisés, l'approche
+ proposée, l'algorithme d'optimisation retenu et l'étude
+ expérimentale mise en œuvre. Le chapitre 4 se consacrera à la
+ deuxième contribution, <emph>LSMR</emph> (<emph>Laplacian-based
+ semi-supervised multi-regression</emph>) qui est son extension
+ dans le cadre multi-labels. Le chapitre 5
+ présentera <emph>RSMS</emph> (<emph>Robust Semi-supervised
+ Multi-label feature Selection for regression</emph>), pour
+ répondre à la problématique de la sélection de variables, dans
+ le cadre semi-supervisé et multi-labels. Finalement, le chapitre
+ 6 présentera l'application de nos travaux sur un jeu de données
+ réel, pour répondre à la problématique de l'entreprise sur
+ l'annotation automatique à partir de grandes masses de données
+ sur les pneumatiques. Enfin, nous conclurons ce rapport dans le
+ dernier chapitre avec un bilan sur les contributions proposées
+ et les résultats obtenus via les différentes expérimentations
+ menées durant cette thèse. Nous discuterons aussi quelques
+ propositions d'amélioration en guise de perspectives à court et
+ à moyen termes.
+ </p>
+ <h2>Notations</h2>
+ <p>
+ Les notations utilisées dans la suite de ce document sont
+ rappelées ici.
+ </p>
+ <p>
+ Voici les opérateurs employés :
+ </p>
+ <ul>
+ <li><h:eq>M'</h:eq> désigne la transposée de
+ lamatrice <h:eq>M</h:eq> ;</li>
+ <li><h:eq>\bar v</h:eq> désigne la moyenne d'un
+ vecteur <h:eq>v</h:eq> ;</li>
+ <li><h:eq>M \otimes P</h:eq> désigne le produit de Kronecker
+ de <h:eq>M</h:eq> par <h:eq>P</h:eq> ;</li>
+ <li><h:eq>M \succeq 0</h:eq> ou <h:eq>M \in S_N^{+}
+ (\mathbb{R})</h:eq> signifie que <h:eq>M</h:eq> est une
+ matrice symétrique réelle semi-définie positive.</li>
+ </ul>
+ <p>
+ Les notations suivantes sont employées pour la dimension du
+ problème d'apprentissage :
+ </p>
+ <ul>
+ <li><h:eq>n_l</h:eq> : le nombre d'individus labellisés de
+ l'ensemble d'apprentissage ;</li>
+ <li><h:eq>N</h:eq> : le nombre total d'individus, y compris ceux
+ non labellisés ;</li>
+ <li><h:eq>n_t</h:eq> : le nombre d'individus de test ;</li>
+ <li><h:eq>d</h:eq> : la dimension de l'espace des individus, ou
+ le nombre de variables ;</li>
+ <li><h:eq>m</h:eq> : le nombre de labels ;</li>
+ <li><h:eq>c</h:eq> : le nombre de classes pour un
+ classifieur ;</li>
+ <li><h:eq>o</h:eq> : le nombre de pseudo-labels ;</li>
+ <li><h:eq>s</h:eq> : le nombre de valeurs propres considérées,
+ par ordre croissant.</li>
+ </ul>
+ <p>
+ Nous utilisons ces notations pour écrire une fonction objectif :
+ </p>
+ <ul>
+ <li><h:eq>\alpha > 0</h:eq>, <h:eq>\beta >
+ 0</h:eq>, <h:eq>\gamma > 0</h:eq>, <h:eq>\delta > 0</h:eq> :
+ régulariseurs ;</li>
+ <li><h:eq>b \in \mathbb{R}^{m}</h:eq> : le vecteur de biais pour
+ l'apprentissage de régression ;</li>
+ <li><h:eq>B \in \mathbb{R}^{o, m}</h:eq> : le facteur à droite
+ dans la décomposition du modèle ;</li>
+ <li><h:eq>\Gamma</h:eq> : les coefficients du modèle SSSL ;</li>
+ <li><h:eq>D, D_s</h:eq> : la matrice de degré du graphe des
+ individus (l'indice <h:eq>s</h:eq> sert à la démarquer
+ de <h:eq>D_m</h:eq>) ;</li>
+ <li><h:eq>D_m</h:eq> : la matrice de degré du graphe des
+ labels ;</li>
+ <li><h:eq>D_W</h:eq>, <h:eq>D_B</h:eq> : matrices diagonales
+ pour la relaxation lisse de la norme <h:eq>l_{2, 1}</h:eq>
+ et <h:eq>l_{1, 2}</h:eq> ;</li>
+ <li><h:eq>\epsilon > 0</h:eq> : paramètre de la fonction de coût
+ de l'algorithme SVM (<emph>Support Vector Machine</emph>), ou
+ notation pour un nombre strictement positif pouvant être choisi
+ arbitrairement proche de 0 ;</li>
+ <li><h:eq>J \in \mathbb{R}^{N, N}</h:eq> : matrice diagonale
+ indicatrice des individus labellisés ;</li>
+ <li><h:eq>L \in \mathbb{R}^{N, N}</h:eq>, <h:eq>L_s</h:eq> : la
+ matrice Laplacienne du graphe des individus ;</li>
+ <li><h:eq>L_m \in \mathbb{R}^{m, m}</h:eq> : la matrice
+ Laplacienne du graphe des labels ;</li>
+ <li><h:eq>M \in \mathbb{R}^{N, N}</h:eq> : la matrice
+ d'adjacence du graphe des individus ;</li>
+ <li><h:eq>M_m \in \mathbb{R}^{m, m}</h:eq> : la matrice
+ d'adjacence du graphe des labels ;</li>
+ <li><h:eq>P, Q</h:eq> : deux matrices décomposant le
+ modèle <h:eq>W = P + Q</h:eq> ou <h:eq>W = P Q</h:eq> ;</li>
+ <li><h:eq>\mathcal{R}</h:eq> : lorsqu'une régularisation
+ quelconque s'applique sur un modèle <h:eq>W</h:eq>, nous la
+ noterons <h:eq>\mathcal{R} (W)</h:eq> ;</li>
+ <li><h:eq>tr</h:eq> : fonction calculant la trace d'une matrice
+ (la somme des valeurs de sa diagonale) ;</li>
+ <li><h:eq>V \in \mathbb{R}^{N, o}</h:eq> : une matrice de
+ pseudo-labels ;</li>
+ <li><h:eq>V_l \in \mathbb{R}^{n_l, o}</h:eq> : les lignes
+ de <h:eq>V</h:eq> correspondant aux individus labellisés ;</li>
+ <li><h:eq>\mathcal{V}</h:eq> : les individus du jeu
+ d'apprentissage pour SSSL ;</li>
+ <li><h:eq>\mathcal{V}_t</h:eq> : le jeu de test pour SSSL ;</li>
+ <li><h:eq>w \in \mathbb{R}^d</h:eq> : le modèle, sous forme de
+ vecteur de coefficients, pour un apprentissage mono-label ;</li>
+ <li><h:eq>W \in \mathbb{R}^{d, m}</h:eq> : le modèle pour un
+ apprentissage multi-labels ;</li>
+ <li><h:eq>y \in \mathbb{R}^{n_l}</h:eq> : le vecteur de labels
+ (pour de la régression mono-label) ;</li>
+ <li><h:eq>Y \in \mathbb{R}^{n, m}</h:eq> : la matrice de
+ labels. De dimension <h:eq>N \times m</h:eq>, elle contient des
+ lignes de valeur non spécifiée pour les individus non
+ labellisés. De dimension <h:eq>n_l \times m</h:eq>, il ne s'agit
+ que des individus labellisés ;</li>
+ <li><h:eq>\hat Y \in \mathbb{R}^{n_t, m}</h:eq> : la sortie du
+ modèle pour la prédiction des labels d'un ensemble
+ de <h:eq>n_t</h:eq> individus ;</li>
+ <li><h:eq>\xi</h:eq>, <h:eq>\xi^{*}</h:eq> : paramètres de marge
+ pour l'algorithme SVR (<emph>Support Vector
+ Regression</emph>) ;</li>
+ <li><h:eq>X \in \mathbb{R}^{N, d}</h:eq> la matrice de données
+ servant pour l'apprentissage ;</li>
+ <li><h:eq>X_l \in \mathbb{R}^{n_l, d}</h:eq> les lignes
+ de <h:eq>X</h:eq> correspondant aux individus labellisés.</li>
+ </ul>
+ <p>
+ Certains algorithmes utilisent un noyau. Les notations associées
+ sont :
+ </p>
+ <ul>
+ <li><h:eq>\mathcal{H}_{\kappa}</h:eq> : espace de Hilbert à
+ noyau reproduisant ;</li>
+ <li><h:eq>K \in \mathbb{R}^{N, N}</h:eq> : application de la
+ fonction de noyau à chaque paire d'individus ;</li>
+ <li><h:eq>K_b \in \mathbb{R}^{N, n_t}</h:eq> : application de la
+ fonction de noyau à chaque paire (individu d'apprentissage,
+ individu de test) ;</li>
+ <li><h:eq>\kappa \colon \mathcal{X} \times \mathcal{X} \to
+ \mathbb{R}</h:eq>, une fonction de noyau ;</li>
+ <li><h:eq>\sigma > 0</h:eq> : l'hyperparamètre de la RBF
+ (/Radial Basis Function/) ;</li>
+ <li><h:eq>U \in \mathbb{R}^{N, s}</h:eq> : les vecteurs propres
+ de la matrice de noyau <h:eq>K</h:eq>.</li>
+ </ul>
+ <p>
+ Pour décrire un algorithme, nous utilisons les notations
+ suivantes :
+ </p>
+ <ul>
+ <li><h:eq>M^{(0)}</h:eq> désigne une valeur initiale avant
+ itérations ;</li>
+ <li><h:eq>\mathbf{1}</h:eq> : un vecteur dont toutes les
+ composantes sont égales à 1 ;</li>
+ <li><h:eq>C \in \mathbb{R}^{m, o}</h:eq> : l'indicatrice des
+ clusters, vaut 1 si <h:eq>m</h:eq> est dans le
+ cluster <h:eq>o</h:eq> ;</li>
+ <li><h:eq>C_W</h:eq>, <h:eq>C_V</h:eq>, <h:eq>C_B</h:eq> : la
+ constante de Lipschitz de la fonction de gradient vis-à-vis
+ de <h:eq>W</h:eq>, <h:eq>V</h:eq> et <h:eq>B</h:eq> ;</li>
+ <li><h:eq>\mathcal{C}</h:eq> : un cluster ;</li>
+ <li><h:eq>f, h</h:eq> : une fonction de prédiction, prend en
+ entrée un individu ou un ensemble d'individus et retourne les
+ valeurs de tous les labels pour ces individus ;</li>
+ <li><h:eq>i</h:eq> : indice d'itération d'individu ;</li>
+ <li><h:eq>I</h:eq> : la matrice identité ;</li>
+ <li><h:eq>j</h:eq> : indice d'itération de variables ;</li>
+ <li><h:eq>k</h:eq> : indice d'itération de labels, ou nombre de
+ plus proches voisins ;</li>
+ <li><h:eq>l</h:eq> : indice d'itération de pseudo-labels ;</li>
+ <li><h:eq>\hat L_N</h:eq> : l'opérateur d'évaluation d'une
+ fonction de prédiction ;</li>
+ <li><h:eq>\left(\hat \lambda\right)_{i = 1}^N</h:eq> les valeurs
+ propres de <h:eq>\hat L_N</h:eq> ;</li>
+ <li><h:eq>\mathrm{min}</h:eq>, <h:eq>\mathrm{max}</h:eq> :
+ minimum et maximum d'un ensemble de valeurs ;</li>
+ <li><h:eq>\mathcal{O}</h:eq> : notation pour la complexité
+ temporelle ou spatiale ;</li>
+ <li><h:eq>p</h:eq> : indice de la norme de Minkowski ;</li>
+ <li><h:eq>\left(\phi\right)_{i = 1}^ N</h:eq> les fonctions
+ propres de <h:eq>\hat L_N</h:eq> ;</li>
+ <li><h:eq>\rho (M)</h:eq> désigne le rayon spectral
+ de <h:eq>M</h:eq>, c'est-à-dire sa plus grande valeur
+ propre ;</li>
+ <li><h:eq>\mathcal {S} \subset \{1, ..., m\}</h:eq> les labels
+ sélectionnés ;</li>
+ <li><h:eq>\sigma_i(W)</h:eq> : la <h:eq>i</h:eq><sup>ième</sup>
+ valeur propre de <h:eq>W</h:eq> ;</li>
+ <li><h:eq>x_i,\quad i = \{1 ... N\}</h:eq> : un individu de
+ l'ensemble d'apprentissage ;</li>
+ <li><h:eq>{x_l}_i,\quad i = \{1 ... n_l\}</h:eq> : un individu
+ labellisé de l'ensemble d'apprentissage ;</li>
+ <li><h:eq>z</h:eq> : le vecteur de label pour SSSL ;</li>
+ <li><h:eq>\hat z</h:eq> : la prédiction pour SSSL.</li>
+ </ul>
+ <p>
+ Enfin, <h:eq>\mathcal{X}</h:eq> désigne l’ensemble
+ d’apprentissage ; dans tous les cas étudiés il s’agit d’un
+ espace réel de dimension <h:eq>d</h:eq>.
+ </p>
+ <p>
+ Nous rappelons également les normes utilisées :
+ </p>
+ <ul>
+ <li>la norme de Minkowski, pour un
+ indice <h:eq>p</h:eq> : <h:eq>\left\|x\right\|_{p} =
+ \left(\sum_{i = 1}^n \left|x\right|^p\right)^{\frac 1
+ p}</h:eq> ;</li>
+ <li>la norme <h:eq>l_2</h:eq>, cas particulier pour <h:eq>p =
+ 2</h:eq> : <h:eq>\left\|x\right\|_{2} = \sqrt{\sum_{i = 1}^n
+ \left|x\right|^2}</h:eq> ;</li>
+ <li>la norme <h:eq>l_1</h:eq>, autre cas particulier
+ pour <h:eq>p = 1</h:eq> : <h:eq>\left\|x\right\|_1 = \sum_{i =
+ 1}^n \left|x\right|</h:eq> ;</li>
+ <li>la norme matricielle <h:eq>l_{p, q}</h:eq> pour deux indices
+ de Minkowski, est la norme <h:eq>q</h:eq> du vecteur constitué
+ des normes <h:eq>p</h:eq> de chacune des lignes de la
+ matrice ;</li>
+ <li>la norme <h:eq>l_{2, 1}</h:eq> s'écrit
+ donc : <h:eq>\left\|W\right\|_{2, 1} = \sum_{j = 1} ^ d
+ \left\|W_{j, .}\right\|_2</h:eq> ;</li>
+ <li>la norme <h:eq>l_{1, 1}</h:eq>
+ s'écrit : <h:eq>\left\|W\right\|_{1, 1} = \sum_{j = 1} ^ d
+ \left\|W_{j, .}\right\|_1</h:eq> ;</li>
+ <li>la norme <h:eq>l_{1, 2}</h:eq> est la norme <h:eq>l_{2,
+ 1}</h:eq> de la transposée ;</li>
+ <li>la norme <h:eq>l_{\infty, 1}</h:eq>
+ s'écrit : <h:eq>\left\|W\right\|_{\infty, 1} = \sum_{j = 1}^d
+ \mathrm{max}_k |W_{j, k}|</h:eq> ;</li>
+ <li>la norme de Frobenius <h:eq>l_{2, 2}</h:eq>
+ s'écrit : <h:eq>\left\|W\right\|_F = \sqrt{\sum_{j = 1}^d
+ \sum_{k = 1} ^ m W_{j, k} ^ 2}</h:eq> ;</li>
+ <li>la norme <h:eq>l_{2, 1 - 2}</h:eq> est la différence entre
+ la norme <h:eq>l_{2, 1}</h:eq> et la norme de Frobenius ;</li>
+ <li>la norme trace s'écrit : <h:eq>\left\|W\right\|_{*} =
+ \sqrt{tr \left(W' W\right)} = \sum_{i = 1} ^ m \sigma_i
+ (W)</h:eq>, si <h:eq>\sigma_i (W)</h:eq> est
+ la <h:eq>i</h:eq><sup>ième</sup> valeur propre
+ de <h:eq>W</h:eq>.</li>
+ </ul>
+ <h1 short="État de l’art">État de l’art : Régression semi-supervisée multi-labels</h1>
+ <h:résumé-chapitre>
+ <p>
+ Dans ce chapitre, nous dressons un état de l'art de
+ l'apprentissage de régression semi-supervisée et multi-labels.
+ </p>
+ <p>
+ Pour l'apprentissage semi-supervisé, nous détaillons diverses
+ approches qui peuvent utiliser les données non
+ labellisées. Nous commençons par les approches de pénalisation
+ utilisant la régularisation Laplacienne, puis son adaptation
+ dans le cadre de l'algorithme SVM, ainsi que les méta-méthodes
+ semi-supervisées : <emph>self-training</emph>
+ et <emph>co-training</emph>. Nous nous intéressons également à
+ la sélection de variables pour l'apprentissage semi-supervisé.
+ </p>
+ <p>
+ Nous nous concentrons ensuite sur la régression
+ multi-labels. On peut également traiter le problème de
+ régression multi-labels grâce à des méta-méthodes, mais aussi
+ des régularisations spéciales conçues pour l'apprentissage
+ multi-labels. Nous terminons ce chapitre par un exposé de la
+ sélection de variables multi-labels.
+ </p>
+ </h:résumé-chapitre>
+ <h2>Régression semi-supervisée</h2>
+ <p>
+ Dans cette section, nous nous intéressons à la notion de
+ régression semi-supervisée. L'apprentissage semi-supervisé est
+ un sujet de recherche important. Le but est de tirer profit de
+ données non labellisées en plus des données labellisées, dans le
+ cas relativement fréquent où labelliser des données est très
+ coûteux, car ce processus nécessite la collaboration d'un
+ expert, alors que dans le même temps de grandes masses de
+ données non labellisées sont disponibles.
+ </p>
+ <p>
+ Les problèmes de régression peuvent aussi être traités dans ce
+ contexte d'apprentissage semi-supervisé. Ce cas dans lequel la
+ variable cible est continue suscite un intérêt différent du cas,
+ beaucoup plus fréquent, où la variable cible est discrète
+ (classification binaire ou multiple). Ainsi, de nombreuses
+ approches en apprentissage semi-supervisé sont d'abord pensées
+ pour une tâche de classification, ce qui parfois rend leur
+ adaptation plus difficile.
+ </p>
+ <h3>Apprentissage semi-supervisé</h3>
+ <p>
+ L'objectif de l'apprentissage semi-supervisé est d'exploiter les
+ données non labellisées, disponibles en abondance, pour
+ améliorer les performances en généralisation de
+ l'algorithme. Par exemple, prenons le cas du jeu de données
+ 2-lunes (<emph>two moons</emph>, figure
+ <h:ref href="#fig-twomoons" />). Dans ce jeu de données (en
+ haut), il n’y a que deux points labellisés. En ignorant les
+ points non labellisés, la classification donnerait le résultat
+ en bas à gauche, alors que le résultat en bas à droite semble
+ plus naturel.
+ </p>
+ <figure>
+ <img src="images/twomoons.svg" />
+ <figcaption id="fig-twomoons">
+ Le jeu de données <emph>two moons</emph>
+ </figcaption>
+ </figure>
+ <p>
+ Ce problème de classification binaire semi-supervisée est assez
+ inintéressant au premier abord, puisqu'il ne propose qu'un seul point
+ par classe. Dans ce cas, n'importe quel algorithme de classification
+ binaire peut obtenir une erreur résiduelle nulle en traçant une zone
+ de séparation entre les deux points.
+ </p>
+ <p>
+ Cependant, le résultat n'est pas très intuitif. On s'attendrait
+ à ce que chacune des deux branches du jeu de données utilise la
+ même étiquette de manière cohérente, en utilisant la
+ justification suivante : dans les zones de points à haute
+ densité, toutes les étiquettes devraient être les mêmes.
+ </p>
+ <p>
+ Si le résultat de classification est différent, on ne peut
+ cependant pas affirmer qu'il sera meilleur. Cependant, comme
+ nous le verrons plus tard, certaines connaissances a priori de
+ cette nature peuvent donner de meilleurs résultats
+ expérimentaux.
+ </p>
+ <p>
+ Selon <h:cite href="chapelle_semi-supervised_2006" />, il est
+ nécessaire de satisfaire plusieurs hypothèses pour améliorer la
+ performance de l'apprentissage, rappelées ici.
+ </p>
+ <p>
+ L'hypothèse de <emph>régularité semi-supervisée</emph> affirme
+ que la prédiction doit être plus lisse dans les zones à haute
+ densité que dans les zones à basse densité. Dans notre exemple
+ ci-dessus, les deux lunes sont des zones à haute densité ; la
+ prédiction ne doit donc pas varier rapidement dans cette
+ zone. En revanche, entre les deux formes lunaires se trouve une
+ zone à faible densité, où la prédiction peut très abruptement
+ basculer entre négatif et positif.
+ </p>
+ <p>
+ L'hypothèse de <emph>clusterisation</emph> affirme que si les
+ données se divisent en groupes, alors la prédiction doit être la
+ même sur tout le groupe. C'est principalement cette hypothèse
+ que nous aurions utilisée pour définir le résultat attendu de la
+ figure <h:ref href="#fig-twomoons" />. Ce n'est pas exactement
+ la même chose que l'hypothèse de régularité. En effet, elle
+ n'exprime rien quant à la zone de séparation, et les
+ regroupements ne sont pas nécessairement les zones à plus haute
+ densité.
+ </p>
+ <p>
+ Finalement, l'hypothèse de <emph>manifold</emph> affirme que les
+ données vivent en réalité dans un espace de plus faible
+ dimension. C'est en effet le cas des données de la figure : on
+ pourrait paramétrer cet espace par un réel unique, qui
+ indiquerait sur quelle lune on se trouve et à quelle position.
+ </p>
+ <p>
+ L'intérêt d'un algorithme de régression semi-supervisée réside
+ donc dans le fait qu'il soit capable de tirer avantage de ces
+ hypothèses, au moyen par exemple de connaissances a priori
+ injectées dans le modèle. Dans la suite, nous allons voir
+ quelques exemples d'algorithmes qui utilisent ces hypothèses.
+ </p>
+ <h4>Notations</h4>
+ <p>
+ Pour garder une certaine cohérence dans la liste des méthodes
+ évoquées, nous définissons ici les notations employées pour
+ modéliser un problème d'apprentissage semi-supervisé.
+ </p>
+ <h5>Notations générales</h5>
+ <p>
+ Le problème d'apprentissage semi-supervisé consiste à apprendre
+ une fonction de prédiction, <h:eq>f</h:eq>, à partir des
+ données. Ces données sont modélisées comme des
+ points <h:eq>\left(x_i\right)_{i = 1} ^ N</h:eq> dans un
+ espace <h:eq>\mathcal{X}</h:eq>. Dans le cas des problèmes de
+ régression, on considèrera uniquement que les
+ individus <h:eq>\left(x_i\right)_{i = 1} ^ N</h:eq> sont des
+ vecteurs dans un espace <h:eq>\mathbb{R}^d</h:eq>,
+ où <h:eq>d</h:eq> est la dimension de l'espace. La fonction de
+ prédiction retourne un nombre réel, dans le cadre de la
+ régression. On a donc :
+ </p>
+ <h:equation-x>
+ f \colon \mathcal{X} \to \mathbb{R}
+ </h:equation-x>
+ <p>
+ Parmi cet ensemble d'apprentissage semi-supervisé, on peut en
+ extraire un sous-ensemble supervisé constitué de paires
+ <h:eq>\left({x_l}_i, y_i\right)_{i = 1} ^ {n_l} \in \mathbb{R} ^
+ d \times \mathbb{R}</h:eq>. En pratique, l'ensemble supervisé
+ constitue généralement les <h:eq>n_l</h:eq> premiers individus
+ de l'ensemble total.
+ </p>
+ <p>
+ Dans le cas linéaire, la fonction <h:eq>f</h:eq> est paramétrée
+ par un modèle noté <h:eq>w \in \mathbb{R} ^ d</h:eq>, et
+ optionnellement par un biais <h:eq>b \in \mathbb{R}</h:eq>. Le
+ problème d'optimisation consiste donc à trouver la valeur
+ de <h:eq>w</h:eq> (et <h:eq>b</h:eq>) minimisant le coût. La
+ fonction <h:eq>f</h:eq> s'écrit alors :
+ </p>
+ <h:equation-x>
+ x \mapsto \sum_{j = 1} ^ d x_j w_j + b
+ </h:equation-x>
+ <p>
+ Dans le cas d'un apprentissage à noyau, on définit une fonction
+ </p>
+ <h:equation-x>
+ \kappa \colon \mathcal{X} \times \mathcal{X} \mapsto \mathbb{R}
+ </h:equation-x>
+ <p>
+ qui agit sur une paire d'individus. La fonction <h:eq>f</h:eq>
+ dépend donc de l'ensemble
+ d'apprentissage <h:eq>\left(x_i\right)_{i = 1}^N</h:eq>, et elle
+ adopte la forme suivante :
+ </p>
+ <h:equation-x>
+ x \mapsto \sum_{i = 1} ^ N \kappa (x_i, x) w_i + b
+ </h:equation-x>
+ <h5>Notations matricielles</h5>
+ <p>
+ Pour la notation matricielle, on note <h:eq>X \in \mathbb{R} ^
+ {N, d}</h:eq> la matrice de données, de sorte que pour tout
+ individu d'apprentissage <h:eq>i \in \{1, ...,
+ N\}</h:eq>, <h:eq>X_{i, .} = x_i</h:eq>. De la même façon, on
+ introduit <h:eq>X_l \in \mathbb{R} ^ {n_l, d}</h:eq> et <h:eq>y
+ \in \mathbb{R} ^ n_l</h:eq> pour l'ensemble labellisé des
+ données. Dans certains cas, les opérations sur <h:eq>y</h:eq>
+ sont plus communément décrites en utilisant une notation
+ matricielle, c'est-à-dire en considérant la
+ matrice-colonne <h:eq>Y \in \mathbb{R}^{n_l, 1}</h:eq> telle que
+ pour tout <h:eq>1 \leq i \leq n_l</h:eq>,
+ <h:eq>Y_{i, 1} = y_i</h:eq>. On peut reprendre cette notation
+ pour la valeur de la prédiction : pour un certain ensemble
+ d'apprentissage, comprenant <h:eq>n_t</h:eq> individus, on
+ obtient une matrice <h:eq>\hat Y \in \mathbb{R}^{n_t, 1}</h:eq>.
+ </p>
+ <h3>Approches de régression semi-supervisée</h3>
+ <p>
+ Nous allons présenter maintenant les approches les plus
+ importantes pour l'apprentissage semi-supervisé en général, et
+ plus particulièrement la régression semi-supervisée. En effet,
+ l'apprentissage semi-supervisé concentre principalement des
+ travaux de classification. Certains peuvent être directement
+ adaptés au cadre de la régression, même si d'autres utilisent
+ des normalisations ou des régularisations qui ne font sens que
+ pour un problème de classification. Enfin, certains sont
+ spécifiques à la régression.
+ </p>
+ <h4>Régression Laplacienne</h4>
+ <p>
+ Cette famille d'approches est très employée pour les problèmes
+ d'apprentissage semi-supervisé, et permet de traiter
+ indifféremment des problèmes de régression et des problèmes de
+ classification. De plus, la simplicité de l'idée qu'elle
+ développe lui procure une notoriété supplémentaire.
+ </p>
+ <h5>Champs gaussiens et fonctions harmoniques</h5>
+ <p>
+ L'idée développée par cette approche se résume en deux points
+ <h:cite href="zhu_semi-supervised_nodate" />) :
+ </p>
+ <ol>
+ <li>
+ La prédiction sur l'ensemble labellisé doit correspondre aux
+ valeurs de labels de l'apprentissage ;
+ </li>
+ <li>
+ Si deux individus sont proches (dans un sens à définir), alors
+ la prédiction pour ces deux individus doit être similaire.
+ </li>
+ </ol>
+ <p>
+ Tout d'abord, il faut indiquer dans quel sens deux individus
+ sont proches. À partir de la matrice de données <h:eq>X</h:eq>,
+ on construit un graphe, où chaque individu correspond à un nœud,
+ et dans lequel deux individus sont reliés si la distance est
+ suffisamment faible (ou si la similitude est suffisamment
+ élevée). Dans la pratique, lorsque l'on trouve une approche qui
+ mobilise un graphe des individus, la similarité retenue est
+ presque toujours donnée au travers d'un noyau gaussien, aussi
+ appelé <emph>radial basis function</emph> (<emph>RBF</emph>,
+ <h:cite href="zhu_semi-supervised_nodate" />,
+ <h:cite href="doquire_graph_2013" />,
+ <h:cite href="alalga_soft-constrained_2016" />,
+ <h:cite href="sousa_kernelized_nodate" />, par exemple) : si
+ deux individus <h:eq>i</h:eq> et <h:eq>j</h:eq> ont pour
+ caractéristiques <h:eq>x_i</h:eq> et <h:eq>x_j</h:eq>, la
+ similarité <h:eq>M_{ij} \in \mathbb{R}</h:eq> s'exprime par :
+ </p>
+ <h:equation>
+ M_{ij} = \mathrm{exp} \left(\frac {- \left\|x_i -
+ x_j\right\|_2^2} {2 \sigma ^ 2}\right)
+ </h:equation>
+ <p>
+ Ce qui introduit un hyperparamètre à fixer a priori, <h:eq>2
+ \sigma^2 > 0</h:eq>, qui est aussi parfois
+ noté <h:eq>\gamma</h:eq>, ou <h:eq>4 t</h:eq>
+ (<h:cite href="belkin_manifold_2006" />). La
+ matrice <h:eq>M</h:eq> ainsi créée est souvent
+ appelée <h:eq>W</h:eq> pour désigner les poids du graphe.
+ </p>
+ <p>
+ Dans les cas où les données sont en grande dimension, par
+ exemple pour la classification de textes
+ (<h:cite href="liu_semi-supervised_2006" />), la RBF ne peut pas
+ s'appliquer directement, à cause de sa dépendance à la norme
+ <h:eq>l_2</h:eq>, qui peut difficilement distinguer des
+ distances entre individus en grande dimension. Par conséquent,
+ on peut la remplacer par la similarité cosinus :
+ </p>
+ <h:equation>
+ M_{ij} = \frac {\left&lt;x_i, x_j\right>} {\left\|x_i\right\| \left\|x_j\right\|}
+ </h:equation>
+ <p>
+ Cette matrice <h:eq>M</h:eq> est généralement rendue
+ parcimonieuse (<emph>sparse</emph>), pour faciliter les calculs
+ quand le nombre d'individus est très élevé. En ce sens, on
+ affecte souvent à 0 la valeur de <h:eq>M_{ij}</h:eq>
+ si <h:eq>i</h:eq> et <h:eq>j</h:eq> sont trop éloignés,
+ c'est-à-dire si <h:eq>x_i</h:eq> n'est pas un des <h:eq>k</h:eq>
+ plus proches voisins de <h:eq>x_j</h:eq> et
+ réciproquement <h:eq>x_j</h:eq> n'est pas non plus l'un
+ des <h:eq>k</h:eq> plus proches voisins
+ de <h:eq>x_i</h:eq>. (par exemple,
+ <h:cite href="gunopulos_constrained_2011" /> ou
+ <h:cite href="zhang_semi-supervised_2009" />).
+ </p>
+ <p>
+ Dans tous les cas, on s'assure que la matrice <h:eq>M</h:eq>
+ soit symétrique.
+ </p>
+ <p>
+ Minimiser l'écart de prédiction entre deux individus proches
+ revient en fait à minimiser :
+ </p>
+ <h:equation>
+ \sum_{i_1 = 1}^N \sum_{i_2 = 1} ^ N M_{i_1 i_2} \left\|\hat
+ y_{i_1} - \hat y_{i_2}\right\|_2^2
+ </h:equation>
+ <p>
+ En développant le carré, on obtient :
+ </p>
+ <h:equation>
+ \sum_{i_1 = 1} ^ N \sum_{i_2 = 1} ^ N M_{i_1 i_2} \hat y_{i_1} ^
+ 2 + \sum_{i_1 = 1} ^ N \sum_{i_2 = 1} ^ N M_{i_1 i_2} \hat
+ y_{i_2} ^ 2 - 2 \sum_{i_1 = 1} ^ N \sum_{i_2 = 1} ^ N M_{i_1
+ i_2} \hat y_{i_1} \hat y_{i_2}
+ </h:equation>
+ <p>
+ En utilisant le fait que la matrice <h:eq>M</h:eq> est
+ symétrique, on peut le ramener à :
+ </p>
+ <h:equation>
+ 2 \sum_{i = 1} ^ N \sum_{j = 1} ^ N M_{ij} \hat y_{i} ^ 2 - 2
+ \sum_{i_1 = 1} ^ N \sum_{i_2 = 1} ^ N M_{i_1 i_2} \hat y_{i_1}
+ \hat y_{i_2}
+ </h:equation>
+ <p>
+ qui se simplifie en :
+ </p>
+ <h:equation>
+ 2 \sum_{i = 1} ^ N \left (\sum_{j = 1} ^ N M_{ij}\right) \hat
+ y_i ^ 2 - 2 tr\left(\hat Y' M \hat Y\right)
+ </h:equation>
+ <p>
+ Ceci fait apparaître la somme de chaque ligne de <h:eq>M</h:eq>,
+ que l'on écrit dans une matrice diagonale <h:eq>D</h:eq> (de
+ « degré », c'est-à-dire contenant sur la diagonale le degré de
+ chaque nœud du graphe) :
+ </p>
+ <h:equation-x>
+ D = \mathrm{diag} (M \mathbf{1})
+ </h:equation-x>
+ <p>
+ Le problème revient donc à minimiser :
+ </p>
+ <h:equation>
+ tr\left(\hat Y' (D - M) \hat Y\right)
+ </h:equation>
+ <p>
+ ce qui fait apparaître tout naturellement la matrice Laplacienne
+ du graphe, <h:eq>L = D - M</h:eq>. En rajoutant la contrainte
+ concernant la prédiction sur l'ensemble labellisé, on obtient le
+ problème :
+ </p>
+ <h:mini id="gfhf">
+ <h:variables>\hat Y \in \mathbb{R}^{n, 1}</h:variables>
+ <h:objective>tr \left(\hat Y' L \hat Y\right)</h:objective>
+ <h:add-constraint>
+ <h:left>
+ \forall 1 \leq i \leq n,\quad}{\hat Y_{i} = Y_i
+ </h:left>
+ </h:add-constraint>
+ </h:mini>
+ <p>
+ Ce problème d'optimisation est convexe, à condition que la
+ matrice <h:eq>L</h:eq> soit semi-définie positive. Il est
+ généralement employé pour des problèmes de classification
+ multi-classes (<h:cite href="sousa_kernelized_nodate" />), ce
+ qui demande une autre forme de normalisation pour la
+ matrice <h:eq>L</h:eq>, de façon à avoir des prédictions
+ positives et de somme 1. Pour des problèmes de régression, nous
+ utiliserons principalement la normalisation la plus simple
+ (<h:eq>L = D - M</h:eq>, <h:cite href="mifs" />).
+ </p>
+ <p>
+ Ce problème fait partie de la famille de problèmes
+ <emph>transductifs</emph>. Un problème d'apprentissage
+ transductif permet d'obtenir une prédiction pour les individus
+ non labellisés de l'ensemble d'apprentissage, cependant il est
+ impossible de généraliser à de nouveaux cas.
+ </p>
+ <h5>Régularisation Laplacienne LapRLS</h5>
+ <p>
+ Le problème précédent d'apprentissage transductif peut se
+ traduire en problème d'apprentissage inductif
+ semi-supervisé. Résoudre un tel problème permet d'obtenir un
+ modèle qui peut être utilisé pour obtenir une prédiction à
+ partir de n'importe quel point de la distribution des données.
+ </p>
+ <p>
+ L'algorithme LapRLS (<h:cite href="belkin_manifold_2006" />)
+ peut être interprété comme une extension de l'algorithme
+ précédent. Avec les notations suivantes :
+ </p>
+ <ul>
+ <li>
+ <h:eq>X \in \mathbb{R}^{N, d}</h:eq> désigne la matrice de
+ données ;
+ </li>
+ <li>
+ <h:eq>X_l \in \mathbb{R}^{n, d}</h:eq> désigne le
+ sous-ensemble labellisé de cette matrice ;
+ </li>
+ <li>
+ <h:eq>W \in \mathbb{R}^{d, 1}</h:eq> désigne le modèle ;
+ </li>
+ </ul>
+ <p>
+ la prédiction s'écrit tout simplement :
+ </p>
+ <h:equation>
+ f \colon X \mapsto \hat Y = X W
+ </h:equation>
+ <p>
+ Si l'on se concentre sur le problème de régression, on peut
+ réécrire l'équation <h:ref href="#gfhf" /> en :
+ </p>
+ <h:mini>
+ <h:variables>W \in \mathbb{R}^{d, 1}</h:variables>
+ <h:objective>\mathrm{tr} \left((XW)' L (XW)\right)</h:objective>
+ <h:add-constraint>
+ <h:left>
+ \forall 1 \leq i \leq n}{(X_l W)_{i} = Y_i
+ </h:left>
+ </h:add-constraint>
+ </h:mini>
+ <p>
+ Cette formulation n'est pas complète, car il n'est pas possible
+ de résoudre la contrainte. Cependant, on peut utiliser une
+ régression à la place, aux moindres carrés (<emph>Least
+ Squares</emph>) : en introduisant un régulariseur <h:eq>\beta >
+ 0</h:eq>, le problème se transforme donc en :
+ </p>
+ <h:mini id="lapls">
+ <h:variables>W \in \mathbb{R}^{d, 1}</h:variables>
+ <h:objective>
+ \left\|X_l W - Y\right\|_F^2 + \beta \mathrm{tr} \left((XW)' L
+ (XW)\right)
+ </h:objective>
+ </h:mini>
+ <p>
+ Dans les cas où il est question d'apprentissage avec des données
+ à haute dimension, c'est-à-dire où <h:eq>d > N</h:eq>, la
+ régression aux moindres carrés ne fonctionne pas
+ correctement. En effet, le modèle contient trop de paramètres,
+ qui ne peuvent pas être déterminés par l'algorithme. Pour
+ pallier ce problème, on introduit généralement un terme de
+ régularisation supplémentaire, dit régularisation Ridge ou
+ Tikhonov : en introduisant un hyperparamètre supplémentaire,
+ <h:eq>\alpha > 0</h:eq>, on obtient :
+ </p>
+ <h:mini id="laprls">
+ <h:variables>W \in \mathbb{R}^{d, 1}</h:variables>
+ <h:objective>
+ \left\|X_l W - Y\right\|_F^2 + \alpha \left\|W\right\|_F^2 +
+ \beta \mathrm{tr} \left((XW)' L (XW)\right)
+ </h:objective>
+ </h:mini>
+ <p>
+ Ces deux formulations (<h:ref href="#lapls" /> et
+ <h:ref href="#laprls" />) sont la base de nombreux algorithmes
+ d'apprentissage semi-supervisé. Le problème
+ <h:ref href="#laprls" /> peut notamment être résolu avec une
+ solution analytique :
+ </p>
+ <h:equation>
+ W = [(X_l' X_l + \alpha I + \beta X'LX]^{-1} X_l' Y
+ </h:equation>
+ <p>
+ Cette résolution de système linéaire nécessite un temps de
+ calcul en <h:eq>\mathcal{O} (N ^ 2 d ^ 3)</h:eq>, ce qui est
+ considérable. Pour les approches effectuant une descente de
+ gradient, le gradient se calcule en :
+ </p>
+ <h:equation>
+ \nabla_W \mathcal {L} = 2 X_l' [X_l W - Y] + 2 \alpha W + 2
+ \beta X'LXW
+ </h:equation>
+ <p>
+ Dans les cas où la dimension <h:eq>d</h:eq> est plus grande que
+ le nombre d'individus <h:eq>N</h:eq>, le théorème de
+ représentation (<h:cite href="belkin_manifold_2006" />) nous
+ permet d'introduire une fonction à noyau <h:eq>\kappa \colon
+ \mathbb{R}^d \times \mathbb{R} ^ d \to \mathbb{R}</h:eq> et de
+ ne considérer comme variables que les interactions entre un
+ individu et le jeu d'apprentissage. On applique donc la
+ fonction <h:eq>\kappa</h:eq> entre tous les individus de
+ l'ensemble d'apprentissage (à gauche et à droite), ce qui donne
+ une matrice <h:eq>K \in \mathbb{R}^{N, N}</h:eq>. La solution
+ fait intervenir une inversion de la matrice <h:eq>K</h:eq>, ce
+ qui n'est pas recommandable du fait de sa dimension (<h:eq>N
+ \times N</h:eq>). On voit rarement cette approche appliquée dans
+ les travaux récents, puisque selon l'hypothèse de
+ l'apprentissage semi-supervisé, on dispose d'un grand nombre
+ d'individus non labellisés.
+ </p>
+ <h4>Algorithme LapSVM</h4>
+ <p>
+ L'algorithme SVR est une adaptation de SVM pour la régression
+ <h:cite href="drucker1997support" />. Le SVM a été lui-même
+ adapté au cadre semi-supervisé avec le <emph>SVM
+ transductif</emph>, d'une part, et avec une régression
+ Laplacienne d'autre part
+ (<h:cite href="chapelle_optimization_2008" />,
+ <h:cite href="bennett_semi-supervised_1998" />). Cependant, la
+ régularisation Laplacienne peut aussi s'utiliser avec les SVM en
+ régression (<h:cite href="chen2012laplacian" />).
+ </p>
+ <p>
+ Dans ce cas, on utilise la fonction de
+ coût <h:eq>\epsilon</h:eq>-insensible, où <h:eq>\epsilon</h:eq>
+ est un hyperparamètre, en combinaison de la matrice Laplacienne
+ d'un graphe que l'on aura calculé de la même façon qu'à la
+ section précédente.
+ </p>
+ <p>
+ On peut donc définir le problème d'apprentissage du LapSVM en
+ introduisant une marge supérieure <h:eq>\xi</h:eq> et une marge
+ inférieure <h:eq>\xi^{*}</h:eq> pour chaque point labellisé, et
+ en pénalisant les modèles qui donnent une prédiction hors de ces
+ marges.
+ </p>
+ <h:mini id="lapsvr">
+ <h:variables>W \in \mathbb{R}^{d, 1}, \xi, \xi^*</h:variables>
+ <h:objective>
+ \left\|W\right\|_F^2 + \alpha \sum_{i = 1} ^ {n_l} \left(\xi_i
+ + \xi_i^{*}\right) + \beta \mathrm{tr} \left(W'X'LXW\right)
+ </h:objective>
+ <h:add-constraint>
+ <h:left>\forall 1 \leq i \leq n_l,\quad</h:left>
+ <h:right>X_{i}W \leq Y_{i} + \epsilon + \xi_i</h:right>
+ </h:add-constraint>
+ <h:add-constraint>
+ <h:left>\forall 1 \leq i \leq n_l,\quad</h:left>
+ <h:right>X_{i}W \geq Y_{i} - \epsilon - \xi_i^*</h:right>
+ </h:add-constraint>
+ <h:add-constraint>
+ <h:left>\forall 1 \leq i \leq n_l,\quad</h:left>
+ <h:right>\xi_i \geq 0 \land \xi_i^* \geq 0</h:right>
+ </h:add-constraint>
+ </h:mini>
+ <p>
+ On constate que la modification du SVM pour la régression
+ apportée pour inclure cet algorithme dans le cadre
+ semi-supervisé revient exactement à ajouter un terme de
+ régularisation Laplacienne.
+ </p>
+ <p>
+ Par ailleurs, une modification, nommée LapESVR
+ (<h:cite href="chen2012laplacian" />), introduit une nouvelle variable,
+ <h:eq>V</h:eq>, qui fait office <emph>d'embedding</emph> de
+ labels intermédiaires, d'où le nom de
+ l'algorithme. Concrètement, on introduit un nouvel
+ hyperparamètre <h:eq>\gamma</h:eq>, et on cherche à résoudre
+ simultanément les contraintes suivantes :
+ </p>
+ <ol>
+ <li>
+ Les valeurs du label <h:eq>Y</h:eq> sont bien reconstruites
+ par <h:eq>V</h:eq> sur l'ensemble labellisé ;
+ </li>
+ <li>
+ Si deux individus sont proches, la valeur des lignes
+ de <h:eq>V</h:eq> doit aussi être proche ;
+ </li>
+ <li>
+ Le modèle permet de bien reconstruire <h:eq>V</h:eq> avec la
+ fonction de coût <h:eq>\epsilon</h:eq>-insensible.
+ </li>
+ </ol>
+ <p>
+ Il s'agit donc de résoudre le problème suivant :
+ </p>
+ <h:mini id="lapesvr">
+ <h:variables>W \in \mathbb{R}^{d, 1}, \xi, \xi^*, V</h:variables>
+ <h:objective>
+ \left\|W\right\|_F^2 + \alpha \sum_{i = 1} ^ n \left(\xi_i +
+ \xi_i^{*}\right) + \beta \mathrm{tr} \left(W'X'LXW\right)
+ </h:objective>
+ <h:break-objective>
+ + \gamma \mathrm{tr} \left((V - Y)'J(V - Y)\right)
+ </h:break-objective>
+ <h:add-constraint>
+ <h:left>\forall 1 \leq i \leq n,\quad</h:left>
+ <h:right>X_{i}W \leq V_{i} + \epsilon + \xi_i</h:right>
+ </h:add-constraint>
+ <h:add-constraint>
+ <h:left>\forall 1 \leq i \leq n,\quad</h:left>
+ <h:right>X_{i}W \geq V_{i} - \epsilon - \xi_i^*</h:right>
+ </h:add-constraint>
+ <h:add-constraint>
+ <h:left>\forall 1 \leq i \leq n,\quad</h:left>
+ <h:right>\xi_i \geq 0 \land \xi_i^* \geq 0</h:right>
+ </h:add-constraint>
+ </h:mini>
+ <p>
+ Avec la matrice diagonale <h:eq>J</h:eq> qui fait office
+ d'indicatrice des individus labellisés :
+ </p>
+ <ul>
+ <li>
+ hors de la diagonale, elle vaut 0 : <h:eq>\forall i \neq j,
+ J_{ij} = 0</h:eq>
+ </li>
+ <li>
+ sur la diagonale, elle indique les <h:eq>n</h:eq> premiers
+ individus : <h:eq>\forall i, J_{ii} = [i \leq n]</h:eq>
+ </li>
+ </ul>
+ <h4>Méta-algorithmes de régression semi-supervisée</h4>
+ <p>
+ Parmi les approches d'apprentissage semi-supervisé, on trouve
+ aussi des méta-méthodes qui fonctionnent à partir d'un
+ apprentissage supervisé.
+ </p>
+ <h5>Self-training</h5>
+ <p>
+ Le <emph>self-training</emph> est un algorithme d'apprentissage
+ semi-supervisé relativement simple <h:cite href="selftraining"
+ />. Étant donné un régresseur de base, <h:eq>h \colon
+ \mathcal{X} \to \mathbb{R}</h:eq>, on obtient un modèle
+ semi-supervisé en itérant l'algorithme suivant :
+ </p>
+ <ol>
+ <li>
+ Faire un apprentissage de <h:eq>h</h:eq> sur l'ensemble
+ labellisé (<h:eq>X_l</h:eq>, <h:eq>Y</h:eq>) ;
+ </li>
+ <li>
+ Obtenir une prédiction sur la partie non
+ supervisée : <h:eq>\hat Y \gets h (X)</h:eq> ;
+ </li>
+ <li id="self-pain-point">
+ Sélectionner les indices des prédictions pour lesquelles la
+ confiance est la plus grande, <h:eq>i</h:eq>. Si la confiance
+ est trop faible pour tous les points non labellisés, arrêter
+ l'algorithme ;
+ </li>
+ <li>
+ Transférer <h:eq>X_{i.}, \hat Y_{i.}</h:eq> depuis l'ensemble
+ non labellisé vers l'ensemble labellisé.
+ </li>
+ </ol>
+ <p>
+ Cet algorithme n'est pas complètement spécifié, il reste à
+ définir comment l'étape <h:ref href="#self-pain-point" /> est
+ implémentée. Pour certains classifieurs, comme la régression
+ logistique <h:cite href="cramer2002origins" /> ou le SVM, il est
+ possible d'utiliser les scores d'appartenance à une classe.
+ </p>
+ <p>
+ Dans le cas d'un apprentissage pour la classification, on peut
+ également utiliser une méthode ensembliste pour remplacer
+ <h:eq>h</h:eq>. Dans ce cas, <h:eq>h</h:eq> est composé d'un
+ ensemble <h:eq>\left(h_i\right)_{i = 1} ^ c</h:eq> de
+ classifieurs, ce qui permet de définir pour un point de
+ l'ensemble non-labellisé <h:eq>x</h:eq> la prédiction comme
+ étant la classe majoritaire de l'ensemble <h:eq>\left\{h_i
+ (x)\right\}_{i = 1} ^ c</h:eq>. En ce qui concerne la confiance
+ dans la prédiction, on peut considérer l'entropie.
+ </p>
+ <p>
+ Dans le cas de la régression, on ne peut pas utiliser d'approche
+ fournissant directement un score de confiance. On peut cependant
+ utiliser des méthodes ensemblistes, similaires au cas de
+ classification <h:cite href="levatic_self_training_2017"
+ />. Dans ce cas, un ensemble de régresseurs est utilisé à la
+ place de <h:eq>h</h:eq>. Chaque régresseur donne une prédiction
+ pour chaque individu non labellisé. La prédiction
+ de <h:eq>h</h:eq> correspond à la moyenne des prédictions de
+ chacun des régresseurs, et la confiance est calculée à partir de
+ la variance des prédictions des régresseurs. Lorsque la variance
+ augmente, la confiance diminue.
+ </p>
+ <p>
+ Cette mesure de confiance est particulièrement intéressante
+ parce qu'il est possible d'utiliser n'importe quel régresseur
+ pour les <h:eq>\left(h_i\right)_i</h:eq>. Par conséquent, cette
+ méthode permet de construire un algorithme d'apprentissage
+ semi-supervisé ensembliste à partir d'un algorithme de
+ régression supervisée <emph>quelconque</emph>.
+ </p>
+ <p>
+ Les auteurs dans <h:cite href="levatic_self_training_2017" />
+ définissent aussi une autre mesure de confiance, qui ne
+ s'applique que dans le cas d'une forêt aléatoire. Dans ce cas,
+ il est possible de suivre le parcours d'un individu à travers
+ chacun des arbres. Si deux individus aboutissent à la même
+ feuille pour un certain nombre d'arbres, on peut considérer
+ qu'ils sont voisins. Étant donné que chaque régresseur de
+ l'ensemble a été entraîné à partir d'un jeu d'apprentissage
+ différent, sélectionné par échantillonnage avec remise, pour
+ chaque régresseur, il existe des points de l'ensemble labellisé
+ qui n'ont en fait pas servi pour l'entraîner : ce sont les
+ exemples « hors du lot » d'apprentissage (<emph>Out of
+ bag</emph>). Pour évaluer la confiance d'un point de l'ensemble
+ d'apprentissage, on peut sélectionner les individus de
+ l'ensemble d'apprentissage proches, et pour chacun de ces
+ voisins labellisés, évaluer l'erreur de régression des
+ régresseurs qui n'ont pas utilisé ce point pour
+ l'entraînement. On obtient donc une estimation de l'erreur pour
+ chacun des points de l'ensemble d'apprentissage non labellisé,
+ qui est l'opposé de la confiance accordée à la prédiction pour
+ ce point.
+ </p>
+ <p>
+ Il est nécessaire de définir un critère d'arrêt pour
+ l'algorithme. En effet, si celui-ci se poursuit jusqu'à
+ épuisement du jeu d'apprentissage non-labellisé, il est possible
+ que la performance se dégrade. On choisit donc généralement un
+ seuil de confiance, en-dessous duquel on ne considèrera pas un
+ point de l'ensemble non labellisé. On peut également conserver
+ un ensemble de validation sur lequel évaluer chaque itération de
+ l'algorithme, et l'arrêter en cas de dégradation de
+ performance. <h:cite href="levatic_self_training_2017" />
+ propose ansi de réutiliser les points <emph>out-of-bag</emph>
+ pour évaluer la performance de l'algorithme.
+ </p>
+ <p>
+ Le méta-algorithme <emph>self training</emph> peut être vu comme
+ étant <emph>transductif</emph>, puisque l'algorithme ne peut pas
+ généraliser la prédiction à un nouveau point. En effet, si un
+ point est ajouté dans l'ensemble non labellisé, l'ordre de
+ sélection peut changer à partir d'un certain point, et toutes
+ les prédictions et sélections suivantes seront modifiées.
+ </p>
+ <p>
+ En revanche, si le régresseur <h:eq>h</h:eq> (ou les
+ <h:eq>\left(h_i\right)_{i = 1} ^ c</h:eq>) sont inductifs, il
+ peut être utilisé tel quel pour effectuer une prédiction sur de
+ nouveaux individus. Ceci doit être considéré pour une
+ application d'un algorithme de <emph>self-training</emph>, mais
+ les études expérimentales n'ont pas besoin de s'y intéresser.
+ </p>
+ <p>
+ Le self-training est une méthode qui utilise les prédictions
+ d'un algorithme pour renforcer le jeu d'apprentissage de ce même
+ algorithme. En conséquence, il souffre d'un problème de biais de
+ confirmation <h:cite href="arazo_pseudo-labeling_nodate" />, ce
+ qui peut dégrader significativement les performances dans des
+ cas similaires.
+ </p>
+ <h5>Co-training</h5>
+ <p>
+ Le <emph>co-training</emph> <h:cite href="blum_combining_1998"
+ /> peut être vu comme une extension de l'algorithme de
+ <emph>self-training</emph>. Pour éviter de renforcer les erreurs
+ de l'algorithme à chaque itération, on introduit une certaine
+ forme de variabilité. Traditionnellement, l'ensemble des
+ variables est séparé en deux « vues » différentes. Par exemple,
+ une page web peut être décrite par le texte qui y figure, mais
+ aussi par les liens qui s'y trouvent. Chacune des vues est donc
+ un ensemble de variables. Les vues doivent être suffisantes pour
+ obtenir une classification des pages web, mais l'information ne
+ doit pas être répétée.
+ </p>
+ <p>
+ Une modification simple de l'algorithme de co-training peut
+ avoir lieu. Pour rappel, on dispose d'un classifieur de base
+ <h:eq>h</h:eq>. Les deux vues sont séparées en <h:eq>X_1</h:eq>
+ et <h:eq>X_2</h:eq> ; se rapporter à la figure
+ <h:ref href="#fig-multi-vues"/>.
+ </p>
+ <figure>
+ <img src="images/fig-multi-vues.svg" />
+ <figcaption id="fig-multi-vues">
+ Apprentissage semi-supervisé multi-vues pour
+ le <emph>co-training</emph>
+ </figcaption>
+ </figure>
+ <p>
+ Le principal consiste à :
+ </p>
+ <ol>
+ <li>
+ Faire un apprentissage d'une première instance du classifieur,
+ <h:eq>h_1</h:eq>, de <h:eq>{X_l}_1</h:eq> vers <h:eq>Y</h:eq> ;
+ </li>
+ <li>
+ Effectuer la prédiction pour l'ensemble non labellisé :
+ prédire <h:eq>\hat Y_1</h:eq> à partir de <h:eq>X1</h:eq> avec
+ le classifieur <h:eq>h_1</h:eq>, et <h:eq>\hat Y_2</h:eq> à
+ partir de <h:eq>X2</h:eq> avec le
+ classifieur <h:eq>h_2</h:eq>. Calculer également la confiance
+ dans la prédiction pour les deux algorithmes ;
+ </li>
+ <li>
+ Augmenter l'ensemble d'apprentissage du
+ classifieur <h:eq>h_2</h:eq> avec les prédictions les plus
+ confiantes de <h:eq>h_1</h:eq>, et vice versa.
+ </li>
+ </ol>
+ <p>
+ Visuellement, on peut se fier à la figure
+ <h:ref href="#fig-co-training" /> à titre d'exemple
+ illustratif. En haut à gauche, le début d’une itération montre
+ que certains individus sont labellisés pour les
+ régresseurs <h:eq>h_1</h:eq> et <h:eq>h_2</h:eq> (en blanc), et
+ d’autres non (en gris). En haut à droite, chaque régresseur
+ effectue une prédiction, et on retient celles de confiance
+ maximale. En bas à gauche, les valeurs prédites sont
+ communiquées à l’autre régresseur. En bas à droite, les nouveaux
+ individus sont labellisés.
+ </p>
+ <figure>
+ <img src="images/fig-co-training.svg" />
+ <figcaption id="fig-co-training">
+ Apprentissage semi-supervisé avec le <emph>co-training</emph>
+ </figcaption>
+ </figure>
+ <p>
+ En ce qui concerne l'adaptation à la régression, on trouve
+ principalement l'algorithme <emph>COREG</emph>
+ <h:cite href="zhou_semi-supervised_2005"/>, qui, au lieu
+ d'utiliser plusieurs vues pour entraîner deux instances
+ différentes de l'algorithme, utilise deux algorithmes
+ différents. Il s'agit de régresseurs aux plus proches voisins,
+ avec deux indices de Minkowski différents : <h:eq>p = 1</h:eq>
+ et <h:eq>p = 2</h:eq>. C'est-à-dire que les deux régresseurs
+ produisent une moyenne des labels des <h:eq>k</h:eq> plus
+ proches voisins, le premier avec la distance <h:eq>l_1</h:eq>,
+ le second avec la distance <h:eq>l_2</h:eq>.
+ </p>
+ <p>
+ Pour évaluer la certitude de la prédiction d'un des régresseurs,
+ l'algorithme vérifie si l'erreur de régression locale diminue en
+ ajoutant le point. Pour ce faire, on sélectionne <h:eq>k</h:eq>
+ voisins du point considéré dans l'ensemble d'apprentissage
+ labellisé, et on apprend une nouvelle instance du régresseur
+ <h:eq>h_i</h:eq>, <h:eq>h_i'</h:eq>, mais uniquement sur ce
+ voisinage agrémenté du point considéré. En comparant les résidus
+ de <h:eq>h_i</h:eq> et <h:eq>h_i'</h:eq> sur les voisins
+ labellisés, on peut savoir si ajouter le point augmentera ou pas
+ les performances locales de l'algorithme.
+ </p>
+ <p>
+ Il est à noter que cet algorithme fonctionne grâce au fait que
+ les régresseurs sont des <h:eq>k</h:eq>-NN (<h:eq>k</h:eq> plus
+ proches voisins). En effet, il faut effectuer un apprentissage à
+ chaque itération, et à chaque point non encore labellisé.
+ </p>
+ <h3>
+ Sélection de variables pour l'apprentissage semi-supervisé
+ </h3>
+ <p>
+ La sélection de variables consiste à étudier l'ensemble des
+ variables du jeu de données et à n'en retenir qu'un petit
+ nombre. Il y a plusieurs avantages à effectuer une sélection de
+ variables, surtout dans les applications à grande dimension (par
+ exemple, des applications textuelles) :
+ </p>
+ <ol>
+ <li>
+ La dimension du problème est réduite, ce qui permet
+ d'appliquer d'autres algorithmes ;
+ </li>
+ <li>
+ Le modèle est plus interprétable, c'est-à-dire que la
+ connaissance extraite par l'apprentissage est compréhensible
+ par l'être humain.
+ </li>
+ </ol>
+ <p>
+ En ce qui concerne l'apprentissage semi-supervisé, il existe
+ plusieurs méthodes de sélection de variables qui permettent de
+ tirer profit de la présence d'individus non labellisés dans le
+ jeu d'apprentissage.
+ </p>
+ <p>
+ L'évaluation de variable est une approche de sélection de
+ variables qui donne un score à chacune des variables. Pour en
+ effectuer la sélection, il suffit donc simplement de ne
+ conserver que les variables dont le score est le plus élevé.
+ </p>
+ <p>
+ Le cadre d'apprentissage semi-supervisé appelle bien souvent la
+ construction d'un graphe et son exploitation au travers de la
+ matrice Laplacienne. Pour l'évaluation des variables, on dispose
+ du <emph>score Laplacien</emph>
+ <h:cite href="he_laplacian_nodate"/>. La construction du graphe
+ utilise encore une fois le même procédé : les <h:eq>k</h:eq>
+ plus proches voisins (symétriques) sont reliés dans un graphe,
+ et on affecte à l'arête entre ces voisins un poids calculé à
+ partir de la fonction RBF. Une fois la matrice
+ d'adjacence <h:eq>M</h:eq> obtenue, on calcule la matrice de
+ degré <h:eq>D</h:eq> comme étant la diagonale de la somme des
+ lignes (ou des colonnes) de <h:eq>M</h:eq>, et on utilise
+ toujours la normalisation <h:eq>L = D - M</h:eq>.
+ </p>
+ <p>
+ Notons <h:eq>X^j</h:eq> la colonne <h:eq>j</h:eq> de la matrice
+ <h:eq>X</h:eq>. Ainsi, <h:eq>X^j</h:eq> contient les données de
+ la <h:eq>j</h:eq><sup>ième</sup> variable.
+ </p>
+ <p>
+ Une première étape consiste à normaliser chaque variable afin
+ d'en retirer la moyenne une fois appliquée sur le graphe :
+ </p>
+ <h:equation>
+ \tilde{X}^j \gets X^j - \frac {\sum_{i = 1} ^ N X_{ij} D_{ii}}
+ {\sum_{i = 1}^N D_{ii}}
+ </h:equation>
+ <p>
+ Ainsi, pour chaque variable <h:eq>X^j</h:eq>, le score Laplacien
+ est égal à :
+ </p>
+ <h:equation>
+ \frac {\left(\tilde{X}^j\right)'L\tilde{X}^j}
+ {\left(\tilde{X}^j\right)'D\tilde{X}^j}
+ </h:equation>
+ <p>
+ Cette méthode permet donc d'effectuer une sélection de variables
+ non supervisée.
+ </p>
+ <p>
+ L'utilisation du score Laplacien peut aussi être détourné pour
+ une sélection de variables semi-supervisée. Des travaux
+ (<h:cite href="barkia_semi-supervised_2011"/>,
+ <h:cite href="alalga_soft-constrained_2016"/>,
+ <h:cite href="zhao_semi-supervised_2007"/>,
+ <h:cite href="benabdeslem_efficient_2014"/>,
+ <h:cite href="hindawi_local--global_2013"/>) se sont concentrés
+ sur les approches en classification ; cependant on peut aussi
+ l'utiliser pour des applications de régression. L'algorithme
+ SSLS <h:cite href="doquire_graph_2013"/> se sert de la
+ définition du score Laplacien non-supervisé, ainsi que d'une
+ adaptation de ce score pour la régression supervisée, pour
+ fournir un score semi-supervisé.
+ </p>
+ <p>
+ Le score Laplacien supervisé pour la régression est très
+ similaire au score Laplacien non supervisé : on commence par
+ construire un graphe des individus, labellisés cette fois, mais
+ au lieu de considérer la distance entre individus selon leurs
+ variables, on considère la distance entre leurs labels. Ainsi,
+ on obtient une matrice <h:eq>M^{\mathrm{sup}}</h:eq> définie
+ pour une paire d'indices d'individus labellisés <h:eq>i, j \leq
+ n_l</h:eq> :
+ </p>
+ <h:equation>
+ M^{\mathrm{sup}}_{i, j} = \mathrm{exp} \left(\frac{- \left(y_i -
+ y_j\right)^2} {2 \sigma^2}\right)
+ </h:equation>
+ <p>
+ Ce graphe peut aussi être rendu <emph>sparse</emph> en ne
+ sélectionnant que les arêtes les plus fortes. Le score
+ semi-supervisé consiste donc à combiner ces deux formulations
+ pour obtenir le graphe suivant :
+ </p>
+ <h:equation>
+ M^{\mathrm{semi}}_{i, j} =
+ \begin{cases}
+ \alpha M_{i, j} ^ {\mathrm{sup}}, &amp; i, j \leq n \\
+ M_{i, j}, &amp; i > n \vee j > n
+ \end{cases}
+ </h:equation>
+ <p>
+ avec <h:eq>M</h:eq> le score Laplacien non supervisé vu plus
+ haut, et <h:eq>\alpha</h:eq> un nouvel hyperparamètre qui permet
+ de donner plus ou moins d'importance à l'utilisation des
+ individus labellisés par rapport aux individus non labellisés.
+ </p>
+ <h2>Régression multi-labels</h2>
+ <p>
+ L'apprentissage multi-tâches consiste à réutiliser un modèle ou
+ une partie d'un modèle afin de résoudre plusieurs tâches
+ d'apprentissage simultanément. C'est un cadre très utilisé dans
+ l'apprentissage à base de données textuelles, car les
+ différentes tâches d'apprentissage sont reliées. Dans
+ <h:cite href="collobert2008unified"/>, l'apprentissage
+ multi-tâches s'effectue en réutilisant certaines couches du
+ modèle dans un réseau de neurones profond.
+ </p>
+ <p>
+ La régression multi-labels est un cas particulier de la
+ régression multi-tâches. Dans le cadre de la régression
+ multi-labels, toutes les tâches sont continues et à une
+ dimension. La prédiction pour un individu consiste en exactement
+ une valeur pour chacun des labels. Cette distinction peut être
+ comprise en comparant un jeu de données multi-tâches très
+ utilisé, <emph>schools</emph>
+ <h:cite href="argyriou2008spectral"/>, et un jeu de données
+ multi-labels, <emph>sarcos</emph> <h:cite href="sarcos"/>.
+ </p>
+ <p>
+ Le jeu de données <emph>schools</emph> est une agrégation des
+ résultats d'élèves différents dans des écoles différentes ; pour
+ chaque école, la variable cible est la note de l'élève, et les
+ variables consistent en des constantes par école et des
+ variables descriptives de l'élève. Tous les élèves sont décrits
+ dans le même espace de variables, on peut donc considérer le
+ problème comme multi-tâches. Cependant, chaque élève n'est
+ inscrit que dans une seule école, il est donc impossible de
+ considérer ce jeu de données comme multi-tâches.
+ </p>
+ <p>
+ En comparaison, <emph>sarcos</emph> est tiré d'un robot, dont on
+ a mesuré les positions, vitesses et accélérations des
+ articulations, et dont on cherche à prédire les moments aux
+ articulations. Cette fois-ci, il s'agit d'un jeu de données
+ multi-labels puisque chaque mesure donne une valeur pour tous
+ les labels.
+ </p>
+ <p>
+ L'apprentissage multi-labels a concerné historiquement des
+ problèmes de classification binaire, il faut donc faire
+ attention à ne pas le confondre avec la classification
+ multi-classes. Dans l'apprentissage multi-labels, on suppose que
+ les labels partagent de l'information. On peut notamment
+ s'intéresser à la corrélation entre labels.
+ </p>
+ <h3>Métriques de régression multi-labels</h3>
+ <p>
+ Il y a différentes façons d'évaluer un algorithme de régression
+ multi-labels. On cherche en effet à comparer les résultats de la
+ prédiction, <h:eq>\hat Y \in \mathbb{R}^{d, m}</h:eq>, avec les
+ vraies valeurs, <h:eq>Y \in \mathbb{R}^{d, m}</h:eq>.
+ </p>
+ <p>
+ On note :
+ </p>
+ <ul>
+ <li>
+ la moyenne du label <h:eq>1 \leq k \leq m</h:eq> : <h:eq>\bar
+ Y_k</h:eq> ;
+ </li>
+ <li>
+ la matrice moyenne, <h:eq>\bar Y \in \mathbb{R}^{n_t,
+ m}</h:eq>, définie par : <h:eq>\bar Y_{i, k} = \left[\bar
+ Y_k\right]_{i, k}</h:eq>.
+ </li>
+ </ul>
+ <p>
+ Les métriques usuelles de régression mono-label peuvent être
+ réutilisées pour définir des métriques multi-labels. Pour
+ rappel, on trouve :
+ </p>
+ <ul>
+ <li>
+ la <emph>RMSE</emph>, pour <emph>root of mean of squared
+ error</emph>, i.e. la racine de l'erreur quadratique moyenne ;
+ </li>
+ <li>
+ la <emph>MAE</emph>, pour <emph>mean absolute error</emph>,
+ i.e. erreur absolue moyenne ;
+ </li>
+ <li>
+ les métriques relatives : <emph>RRSE</emph> pour <emph>root of
+ relative squared error</emph>, i.e. racine de l'erreur
+ quadratique relative, et <emph>rae</emph> pour <emph>root of
+ absolute error</emph>, i.e. racine de l'erreur absolue. Ces
+ métriques expriment le rapport entre la métrique associée à
+ la prédiction et la métrique associée à la prédiction
+ constante de la moyenne du label ;
+ </li>
+ <li>
+ le coefficient de corrélation <emph>CC</emph> entre <h:eq>\hat
+ Y_{.1}</h:eq> et <h:eq>Y_{.1}</h:eq>.
+ </li>
+ </ul>
+ <p>
+ L'extension de ces métriques en multi-labels consiste à définir
+ une métrique <emph>moyenne</emph> ou <emph>macro</emph>, et une
+ métrique <emph>micro</emph>. La métrique moyenne, préfixée par
+ un « a » pour <emph>average</emph>, consiste à calculer la
+ métrique sur tous les labels et à en retenir la moyenne. La
+ métrique micro, préfixée par un « µ », consiste à mettre bout à
+ bout les labels pour appliquer la métrique mono-label.
+ </p>
+ <p>
+ En ce qui concerne la métrique <emph>MAE</emph>, il n'y a pas de
+ différence, puisqu'on peut intervertir l'ordre des
+ sommations. On ne conservera donc que la <emph>aMAE</emph>.
+ </p>
+ <h:equation>
+ \begin{aligned}
+ \mathbf{\mathrm{aRMSE}} &amp;= \frac 1 m \sum_{k = 1} ^ m \sqrt{\frac 1 n_t \sum_{i = 1} ^ {n_t} \left(\hat Y_{i, k} - Y_{i, k}\right) ^ 2} &amp;
+ \mathrm{\mu{}RMSE} &amp;= \sqrt{\frac 1 {n_t m} \sum_{i, k = 1} ^ {n_t, m} \left(\hat Y_{i, k} - Y_{i, k}\right) ^ 2} \\
+ \mathrm{aMAE} &amp;= \frac 1 {n_t m} \sum_{i, k = 1} ^ {n_t, m} \left|\hat Y_{i, k} - Y_{i, k}\right| &amp;\quad&amp;\quad \\
+ \mathrm{aRRSE} &amp;= \frac 1 m \sum_{k = 1} ^ m \sqrt {\frac {\sum_{i = 1} ^ {n_t} \left(\hat Y_{i, k} - Y_{i, k}\right) ^ 2} {\sum_{i = 1} ^ {n_t} \left(\bar Y_{k} - Y_{i, k}\right) ^ 2}} &amp;
+ \mathrm{\mu{}RRSE} &amp;= \sqrt {\frac {\sum_{i, k = 1} ^ {n_t, m} \left(\hat Y_{i, k} - Y_{i, k}\right)^2} {\sum_{i, k = 1} ^ {n_t, m} \left(\bar Y_{k} - Y_{i, k}\right)^2}} \\
+ \mathrm{aRAE} &amp;= \frac 1 m \sum_{k = 1} ^ m \frac {\sum_{i = 1} ^ {n_t} \left|\hat Y_{i, k} - Y_{i, k}\right|} {\sum_{i = 1} ^ {n_t} \left|\bar Y_{k} - Y_{i, k}\right|} &amp;
+ \mathrm{\mu{}RAE} &amp;= \frac {\sum_{i, k = 1} ^ {n_t, m} \left| \hat Y_{i, k} - Y_{i, k}\right|} {\sum_{i, k = 1} ^ {n_t, m} \left| \bar Y_{k} - Y_{i, k}\right|} \\
+ \mathrm{aCC} &amp;= \frac 1 m \sum_{k = 1} ^ m \frac {\sum_{i = 1} ^ {n_t} \left(\hat Y_{i, k} - \bar {\hat Y}_{k}\right) \left(Y_{i, k} - \bar Y_{k}\right)} {\left\|\hat Y_{., k} - \bar {hat Y}_{k}\right\| \left\|Y_{., k} - \bar Y_{k}\right\|} &amp;
+ \mathrm{\mu{}CC} &amp;= \frac {\mathrm{tr} \left(\left(\hat Y - \bar {\hat Y}\right)'\left(Y - \bar Y\right)\right)} {\left\|\hat Y - \bar {\hat Y}\right\|_F \left\|Y - \bar Y\right\|_F}
+ \end{aligned}
+ </h:equation>
+ <p>
+ Parmi toutes ces métriques, la <emph>aRMSE</emph> est la plus
+ employée.
+ </p>
+ <h3>Chaînes de régresseurs pour l'apprentissage multi-labels</h3>
+ <p>
+ Nous allons commencer par étudier les approches algorithmiques
+ qui permettent de convertir un régresseur mono-label en
+ régresseur multi-labels
+ <h:cite href="spyromitros_xioufis_multi_target_2016"/>.
+ </p>
+ <h4><emph>Stacking</emph> pour la régression multi-labels</h4>
+ <p>
+ Pour réutiliser l'information des labels, l'approche de
+ transformation la plus populaire est l'empilement de régresseurs
+ (<emph>stacking</emph>). Dans ce contexte, un régresseur est
+ entraîné pour chaque label. On obtient un nouvel espace de
+ description des individus, en combinant les variables du jeu
+ d'apprentissage et les valeurs des labels. Un deuxième ensemble
+ de régresseurs est entraîné, ce qui permet d'effectuer une
+ prédiction en deux temps tout en conservant de l'information
+ entre tous les labels.
+ </p>
+ <h4>Chaînes de régresseurs</h4>
+ <p>
+ Il est possible de développer cette approche. Pour construire
+ une chaîne de régresseurs, il faut sélectionner un ordre des
+ labels, puis pour chacun, entraîner un régresseur pour obtenir
+ une prédiction pour ce label à partir de l'ensemble des
+ variables ainsi que l'ensemble des prédictions pour les labels
+ précédemment sélectionnés. La prédiction se fait dans le même
+ ordre, en utilisant les prédictions précédentes. On obtient
+ l'algorithme <emph>RCC</emph> pour chaîne de régresseurs
+ corrigée (<emph>regressor chains corrected</emph>, la correction
+ venant du fait que chaque étape effectue une prédiction à partir
+ des prédictions et non des labels).
+ </p>
+ <h4>Chaînes de régresseurs ensemblistes</h4>
+ <p>
+ Cette méthode ne donne pas le même résultat selon l'ordre de
+ sélection des labels. C'est un problème, car la prédiction pour
+ le premier label ne peut pas s'appuyer sur la prédiction des
+ autres : il est de fait traité comme un problème mono-label. Ce
+ problème est résolu en prenant plusieurs ordres différents, et
+ en effectuant une prédiction ensembliste, où la valeur prédite
+ pour chaque label est la moyenne des valeurs prédites par chaque
+ ordre de sélection.
+ </p>
+ <h3>Approches portant sur la régularisation multi-labels</h3>
+ <p>
+ En ce qui concerne les approches de régression, l'optimisation
+ de méthodes de régularisation multi-labels pose un problème
+ supplémentaire par rapport à la régression mono-label. En effet,
+ si l'on veut appliquer une simple régularisation Ridge en
+ multi-labels, la solution est simple à calculer :
+ </p>
+ <h:equation>
+ W = [X' X + \alpha I] ^ {-1} X' Y
+ </h:equation>
+ <p>
+ Malheureusement, en ajoutant des régularisations relatives aux
+ labels, par exemple en remplaçant le terme Ridge
+ par <h:eq>\alpha \left\|WA\right\|</h:eq> avec <h:eq>A</h:eq>
+ une matrice quelconque, on obtient :
+ </p>
+ <h:equation>
+ \left[[X' X] \otimes I_m + \alpha I_d \otimes [A A']\right] ^{-1} X' Y
+ </h:equation>
+ <p>
+ où <h:eq>I_m</h:eq> (<h:eq>I_d</h:eq>) est la matrice identité
+ de dimension <h:eq>m</h:eq> (<h:eq>d</h:eq>) et <h:eq>\_ \otimes
+ \_</h:eq> désigne le produit de Kronecker. La dimension du
+ système à résoudre n'est donc plus <h:eq>d \times d</h:eq>, mais
+ bien <h:eq>d \times d \times m \times m</h:eq>, et on ne peut
+ plus se satisfaire de solution analytique au problème.
+ </p>
+ <h4>MALSAR (Multi task Learning via structural regularization)</h4>
+ <p>
+ MALSAR <h:fn><a href="https://github.com/jiayuzhou/MALSAR">https://github.com/jiayuzhou/MALSAR</a></h:fn>
+ est une implémentation d'un ensemble de méthodes partageant
+ l'utilisation d'une fonction objectif régularisée pour traiter
+ le problème multi-labels. L'optimisation se fait toujours par
+ descente de gradient accélérée, ce qui résout le problème de
+ complexité soulevé plus haut.
+ </p>
+ <h4>Lasso par groupe</h4>
+ <p>
+ La régularisation du Lasso par groupe, <emph>group lasso</emph>
+ <h:cite href="argyriou_multitask_nodate"/>, utilise l'hypothèse
+ suivante :
+ </p>
+ <blockquote>
+ Parmi l'ensemble des variables du problème, seul un certain
+ nombre d'entre elles sont utiles pour la prédiction simultanée
+ de tous les labels.
+ </blockquote>
+ <p>
+ Pour utiliser cette hypothèse, le Lasso
+ <h:cite href="tibshirani1996regression"/>, ou
+ régularisation <h:eq>l_1</h:eq>, est un bon candidat. En effet,
+ si l'on considère le problème suivant :
+ </p>
+ <h:mini>
+ <h:variables>w \in \mathbb{R}^{d}</h:variables>
+ <h:objective>
+ \left\|Xw - y\right\|_2^2 + \alpha \left\|w\right\|_1
+ </h:objective>
+ </h:mini>
+ <p>
+ La solution, en fonction de la valeur de <h:eq>\alpha</h:eq>,
+ sera plus ou moins <emph>sparse</emph>, c'est-à-dire que le
+ modèle <h:eq>w</h:eq> aura un certain nombre de composantes
+ entièrement nulles. Plus précisément, l'optimisation de ce
+ problème par descente de gradient proximal nous indique que la
+ solution se situe à une distance <h:eq>l_1</h:eq> de
+ <h:eq>\alpha^{-1}</h:eq> de l'origine. Si le problème a deux
+ dimensions, une grande valeur de <h:eq>\alpha</h:eq> laisse une
+ plus grande partie de l'espace menant à une solution où l'une
+ des coordonnées du modèle est nulle, cf figure
+ <h:ref href="#fig-lasso"/>.
+ </p>
+ <figure>
+ <img src="images/lasso.svg" />
+ <figcaption id="fig-lasso">
+ Comparaison de modèles pour Lasso : lorsque le régulariseur
+ <h:eq>\alpha</h:eq> est grand, les zones dans lesquelles le
+ modèle perd une composante sont plus étendues.
+ </figcaption>
+ </figure>
+ <p>
+ Pour l'apprentissage multi-labels, l'extension du lasso retenue
+ est le lasso par groupe
+ <h:cite href="argyriou_multitask_nodate"/>. En effet, on suppose
+ que tous les labels peuvent être prédits à partir d'un
+ sous-ensemble des variables. On souhaite donc appliquer une
+ régularisation équivalente, en n'appliquant la régularisation
+ que sur les <emph>lignes</emph> de <h:eq>W</h:eq>. On obtient
+ donc le problème <h:ref href="#mtfl"/> :
+ </p>
+ <h:mini id="mtfl">
+ <h:variables>W \in \mathbb{R}^{d, m}</h:variables>
+ <h:objective>
+ \left\|XW - Y\right\|_F^2 + \alpha \sum_{j = 1} ^ d \left\|W_{j.}\right\|_2
+ </h:objective>
+ </h:mini>
+ <p>
+ La norme ainsi obtenue est notée <h:eq>\left\|W\right\|_{2,
+ 1}</h:eq>.
+ </p>
+ <p>
+ Cette formulation utilise la norme <h:eq>l_{2,1}</h:eq>. Il est
+ possible d'utiliser d'autres normes pour obtenir un résultat
+ comparable. L'algorithme nommé <emph>Dirty Model</emph>
+ <h:cite href="jalali_dirty_nodate"/> utilise deux termes pour la
+ régularisation, afin de pouvoir traiter à la fois les cas où
+ l'on peut réutiliser les mêmes variables pour tous les labels,
+ et ceux où il faut un modèle différent par label. Le modèle
+ s'exprime de la façon suivante <h:ref href="#dirty"/> :
+ </p>
+ <h:mini id="dirty">
+ <h:variables>W = P + Q, P \in \mathbb{R} ^ {d, m}, Q \in \mathbb{R} ^ {d, m}</h:variables>
+ <h:objective>
+ \left\|X (P + Q) - Y\right\|_F^2 + \alpha \left\|P\right\|_{1, 1} + \beta \left\|Q\right\|_{\infty, 1}
+ </h:objective>
+ </h:mini>
+ <p>
+ Pour plus de clarté, on utilise la notation
+ <h:eq>\left\|Q\right\|_{\infty, 1}</h:eq> et pas la notation
+ employée dans l'article original
+ <h:cite href="jalali_dirty_nodate"/>.
+ </p>
+ <p>
+ En sélectionnant les hyperparamètres <h:eq>\alpha</h:eq>
+ et <h:eq>\beta</h:eq>, il est possible de traiter mieux plus de
+ cas que le problème <h:ref href="#mtfl"/>. Le modèle se
+ décompose donc en deux termes, comme le montre la figure
+ <h:ref href="#fig-dirty"/>.
+ </p>
+ <figure>
+ <img src="images/dirty.svg" />
+ <figcaption id="fig-dirty">
+ Un régresseur produit par le <emph>dirty model</emph>
+ </figcaption>
+ </figure>
+ <h4>Régularisation Laplacienne multi-labels</h4>
+ <p>
+ La régularisation Laplacienne évoquée tout au long de ce
+ document peut également être utilisée pour une régularisation
+ multi-labels <h:cite href="malsar"/>. En effet, si l'on
+ considère que chaque label correspond à un nœud d'un graphe, on
+ peut définir une arête entre deux labels comme la similarité
+ entre ces deux labels. Pour cela, si l'on considère deux labels
+ quelconques, on peut comparer pour chaque individu les valeurs
+ assignées à ces deux labels. On peut ensuite agréger le résultat
+ sur tous les individus. Concrètement, la construction du graphe
+ se fait en utilisant non pas <h:eq>X</h:eq> comme pour
+ l'utilisation semi-supervisée,
+ mais <h:eq>Y_l'</h:eq>. L'hypothèse que l'on souhaite mettre en
+ œuvre peut être résumée de la façon suivante :
+ </p>
+ <blockquote>
+ Si deux labels sont similaires, les valeurs du modèle pour ces
+ deux labels doivent être similaires.
+ </blockquote>
+ <p>
+ On peut donc utiliser la fonction objectif suivante :
+ </p>
+ <h:mini id="srmtl">
+ <h:variables>W \in \mathbb{R}^{d, m}</h:variables>
+ <h:objective>
+ \left\|X W - Y\right\|_F^2 + \alpha \mathrm{tr} (W L_m W')
+ </h:objective>
+ </h:mini>
+ <p>
+ Cette régularisation est utilisée dans l'algorithme GLOCAL
+ <h:cite href="zhu_multilabel_2017"/>, qui part du principe que
+ les données peuvent être partitionnées en sous-ensembles dans
+ lesquels la corrélation entre labels est différente.
+ </p>
+ <h4>Régularisation sur le rang</h4>
+ <p>
+ L'hypothèse selon laquelle les labels partagent de l'information
+ peut aussi se traduire par une contrainte sur le rang (des
+ colonnes) du modèle <h:eq>W</h:eq>. En effet, si l'on considère
+ que le modèle <h:eq>W</h:eq> s'écrit comme un produit <h:eq>P
+ \times Q</h:eq>, avec deux matrices <h:eq>P \in \mathbb{R}^{d,
+ o}</h:eq> et <h:eq>Q \in \mathbb{R}^{o, m}</h:eq>, alors le
+ modèle est de rang au plus <h:eq>o</h:eq>, et on peut constater
+ que l'information contenue dans <h:eq>P</h:eq> est réutilisée
+ pour tous les labels.
+ </p>
+ <p>
+ Dans la pratique, cette idée se traduit par une régularisation
+ sur la norme trace de la matrice <h:eq>W</h:eq>
+ <h:cite href="rank"/>.
+ </p>
+ <h:equation>
+ \left\|W\right\|_{*} = \sqrt{tr \left(W' W\right)} = \sum_{i = 1} ^ m \sigma_i (W)
+ </h:equation>
+ <p>
+ où <h:eq>\left(\sigma_i (W)\right)_{i = 1} ^ m</h:eq> désigne
+ l'ensemble des valeurs propres de la
+ matrice <h:eq>W</h:eq>. Dans ce cas, le problème s'écrit :
+ </p>
+ <h:mini>
+ <h:variables>W \in \mathbb{R}^{d, m}</h:variables>
+ <h:objective>
+ \left\|XW - Y\right\|_F^2 + \alpha \left\|W\right\|_{*}
+ </h:objective>
+ </h:mini>
+ <h4>Classification des labels</h4>
+ <p>
+ L'approche <emph>CMTL</emph> pour <emph>clustered multi-task
+ learning</emph> propose de faire une classification des labels,
+ à partir de l'algorithme des <h:eq>k</h:eq>-moyennes. Selon
+ <h:cite href="zha_spectral_nodate"/>, si l'on a <h:eq>o</h:eq>
+ clusters de labels, en supposant que les clusters sont
+ <h:eq>\left(\mathcal{C}_{l}\right)_{l = 1}^o</h:eq>, dont chacun
+ est de taille <h:eq>n_l</h:eq>, et l'indicatrice des clusters se
+ nomme <h:eq>C \in \mathbb{R}^{k, m}</h:eq> telle que :
+ </p>
+ <h:equation>
+ C_{k l} =
+ \begin{cases}
+ \frac 1 {\sqrt{n_l}}, &amp; k \in \mathbb{\mathcal{C}_l} \\
+ 0, &amp; k \notin \mathbb{\mathcal{C}_l}
+ \end{cases}
+ </h:equation>
+ <p>
+ on peut écrire le coût de la façon suivante :
+ </p>
+ <h:equation>
+ \sum_{l = 1}^o \sum_{k \in \mathcal{C}_{l}} \left\|W_{.k} - \frac 1 {n_l} \sum_{k' \in \mathcal{C}_l} W_{.k}\right\|_2^2 \\
+= \mathrm{tr} \left(W' W\right) - \mathrm{tr} \left(C'W'WC\right)
+ </h:equation>
+ <p>
+ En relaxant la définition de <h:eq>C</h:eq> pour avoir
+ simplement <h:eq>C' C = I</h:eq>, le problème
+ des <h:eq>k</h:eq>-moyennes devient :
+ </p>
+ <h:mini>
+ <h:variables>C \in \mathbb{R}^{m, o}</h:variables>
+ <h:objective>
+ \mathrm{tr} \left(W'W\right) - \mathrm{tr} \left(C'W'WC\right)
+ </h:objective>
+ <h:add-constraint>
+ <h:left>
+ C'C = I
+ </h:left>
+ </h:add-constraint>
+ </h:mini>
+ <p>
+ À partir de cette formulation, il est possible de construire une
+ fonction objectif multi-labels <h:cite href="cmtl"/> :
+ </p>
+ <h:mini>
+ <h:variables>W \in \mathbb{R}^{d, m}, C \in \mathbb{R}^{m, o}</h:variables>
+ <h:objective>
+ \left\|XW - Y\right\|_F^2 + \alpha \left(\mathrm{tr} \left(W'W\right) - \mathrm{tr} \left(C'W'WC\right)\right) + \beta \left\|W\right\|_F^2
+ </h:objective>
+ <h:add-constraint>
+ <h:left>
+ C'C = I
+ </h:left>
+ </h:add-constraint>
+ </h:mini>
+ <p>
+ La formulation n'étant pas convexe, elle n'est pas
+ satisfaisante. <h:cite href="cmtl"/> propose donc de
+ poser <h:eq>M = CC'</h:eq>, <h:eq>\eta = \frac \beta
+ \alpha</h:eq>, pour obtenir la fonction objectif suivante :
+ </p>
+ <h:mini>
+ <h:variables>W \in \mathbb{R}^{d, m}, M \in \mathbb{R}^{m, m}</h:variables>
+ <h:objective>
+ \left\|XW - Y\right\|_F^2 + \alpha \eta \left(1 + \eta\right) \mathrm{tr} \left(W \left(\eta I + M \right)^{-1}W'\right)
+ </h:objective>
+ <h:add-constraint><h:left>M \succeq 0</h:left></h:add-constraint>
+ <h:add-constraint><h:left>I - M \succeq 0</h:left></h:add-constraint>
+ <h:add-constraint><h:left>\mathrm{tr} \left(M\right) = o</h:left></h:add-constraint>
+ </h:mini>
+ <p>
+ La notation <h:eq>M \succeq 0</h:eq> signifie que <h:eq>M</h:eq>
+ est une matrice réelle symétrique semi-définie positive.
+ </p>
+ <h4>Régularisation non-convexe avec une norme plafonnée</h4>
+ <p>
+ Jusqu'à présent, toutes les fonctions objectifs que nous avons
+ décrites sont convexes, ou convexes selon chacune de leurs
+ variables. Cependant, on peut également envisager des
+ régularisations non convexes. On n'obtient en général pas de
+ garantie de convergence, mais les résultats expérimentaux sont
+ souvent suffisamment importants pour qu'il ne soit pas possible
+ d’ignorer ces approches.
+ </p>
+ <p>
+ La norme <h:eq>l_1</h:eq> plafonnée
+ <h:cite href="cappedl1,msmtfl"/> consiste simplement à
+ régulariser certaines <emph>lignes</emph> du
+ modèle <h:eq>W</h:eq> avec la norme <h:eq>l_1</h:eq>, mais pas
+ toutes. Les lignes ayant des valeurs importantes ne sont pas
+ régularisées. Ce n'est pas la même chose que la
+ norme <h:eq>l_{2, 1}</h:eq> vue précédemment : ici,
+ l'application de la norme pour une variable régularisée signifie
+ qu'il n'y aura que quelques labels utilisant cette variable.
+ </p>
+ <p>
+ Le problème s'écrit de la façon suivante :
+ </p>
+ <h:mini>
+ <h:variables>W \in \mathbb{R}^{d, m}</h:variables>
+ <h:objective>
+ \left\|XW - Y\right\|_F^2 + \alpha \sum_{j = 1} ^ d \mathrm{min} \left(\left\|W_{j.}\right\|_1, \beta\right)
+ </h:objective>
+ </h:mini>
+ <p>
+ Ce problème n'est pas convexe ; il peut cependant être relaxé
+ pour être résolu itérativement, en utilisant plusieurs étapes
+ (d'où son nom). À chaque itération, on détermine les lignes pour
+ lesquelles la régularisation s'applique, en calculant la norme
+ <h:eq>l_1</h:eq> du modèle à l'itération précédente. Puis on
+ résout le problème en appliquant la régularisation uniquement
+ sur ces lignes.
+ </p>
+ <p>
+ La relaxation converge vers la solution du problème non convexe,
+ sous certaines conditions <h:cite href="msmtfl"/>.
+ </p>
+ <p>
+ En ce qui concerne la régularisation sur le rang, il est aussi
+ possible de traiter un problème de norme plafonnée
+ <h:cite href="msmtflrank"/>. Le problème s'écrit alors :
+ </p>
+ <h:mini>
+ <h:variables>W \in \mathbb{R}^{d, m}</h:variables>
+ <h:objective>
+ \left\|XW - Y\right\|_F^2 + \alpha \sum_{k = 1}^m \mathrm{min} \left(\sigma_k\left(W\right), \beta\right)
+ </h:objective>
+ </h:mini>
+ <p>
+ La notation <h:eq>\sigma_k (W)</h:eq> désigne
+ la <h:eq>k</h:eq><sup>ième</sup> valeur propre
+ de <h:eq>W</h:eq>. Si l'on suit le même processus de relaxation
+ que pour MSMTFL <h:cite href="msmtfl"/>, la régularisation ne
+ doit s'appliquer que sur les plus petites valeurs propres. Si
+ l'on note <h:eq>s</h:eq> le nombre de valeurs propres
+ supérieures à <h:eq>\beta</h:eq>,
+ et <h:eq>\left\|W\right\|_{s^{-}}</h:eq> la somme des valeurs
+ propres de <h:eq>W</h:eq>, sauf les <h:eq>s</h:eq> premières,
+ chaque itération résout le problème suivant :
+ </p>
+ <h:mini>
+ <h:variables>W \in \mathbb{R}^{d, m}</h:variables>
+ <h:objective>
+ \left\|XW - Y\right\|_F^2 + \alpha \left\|W\right\|_{s^{-}}
+ </h:objective>
+ </h:mini>
+ <p>
+ Cette norme peut en fait se réécrire comme la norme trace, moins
+ un terme calculé à partir de la décomposition en valeurs propres
+ du modèle à l'itération précédente, en tronquant la
+ décomposition à <h:eq>s</h:eq> termes. C'est un problème
+ convexe, mais avec un terme non lisse (la norme trace), qui peut
+ être résolu de la même manière que la régularisation trace
+ seule.
+ </p>
+ <h3>Semi-Supervised Multi-Task Regression, avec contraintes</h3>
+ <p>
+ L'algorithme <emph>SSMTR</emph>
+ <h:cite href="zhang_semi-supervised_2009"/> est une approche non
+ linéaire, utilisant un noyau, permettant de traiter le problème
+ de régression semi-supervisée en multi-labels. Il s'agit d'une
+ extension de la régression multi-labels
+ semi-supervisée <emph>SMTR</emph>, présentée également
+ dans <h:cite href="zhang_semi-supervised_2009"/>.
+ </p>
+ <p>
+ Dans <emph>SMTR</emph>, chaque label est traité séparément par
+ un apprentissage à noyau, mais les paramètres des noyaux pour
+ tous les labels sont issus de la même distribution. C'est une
+ façon de réutiliser de l'information entre labels. L'extension
+ au cadre semi-supervisé vise à définir pour chaque label un
+ graphe d'individus, en déduire la matrice Laplacienne et
+ l'utiliser en complément du noyau multi-labels.
+ </p>
+ <p>
+ Bien qu'une matrice Laplacienne soit calculée pour chaque label,
+ l'inférence du modèle évite de calculer un produit de
+ Kronecker. En revanche, cette extension correspond bien à la
+ régression Laplacienne mono-label classique : une fois le jeu de
+ données non labellisé utilisé pour apprendre le modèle, il est
+ éliminé et ne sert plus pour la
+ prédiction. <h:cite href="zhang_semi-supervised_2009"/> propose
+ donc d'ajouter deux types de contraintes :
+ </p>
+ <ol>
+ <li>
+ La prédiction pour un individu est supérieure à la prédiction
+ pour un autre individu (avec une marge) ;
+ </li>
+ <li>
+ Un écart de prédiction entre deux individus doit être
+ supérieur à un écart de prédiction entre deux autres
+ individus.
+ </li>
+ </ol>
+ <p>
+ L'inférence devient plus délicate, mais donne de meilleurs
+ résultats pour les jeux de données évoqués
+ précédemment <emph>sarcos</emph> et <emph>schools</emph>.
+ </p>
+ <h3>Le problème de sélection de variables multi-labels</h3>
+ <p>
+ Dans un problème d'apprentissage multi-labels, la sélection de
+ variables a un sens légèrement plus précis : on doit trouver un
+ sous-ensemble des variables qui permet d'obtenir une bonne
+ prédiction pour <emph>tous</emph> les labels
+ simultanément. Ainsi, on peut difficilement généraliser les
+ approches de sélection de variables mono-label directement au
+ multi-labels. Par exemple, l'utilisation du score Laplacien
+ supervisé, utilisé dans <emph>SSLS</emph>
+ <h:cite href="doquire_graph_2013"/> permet de faire de la
+ sélection de variables pour plusieurs labels, mais ne correspond
+ pas vraiment au problème de sélection de variables
+ multi-labels. En effet, la construction du graphe supervisé met
+ en relation les individus de l'ensemble d'apprentissage dont la
+ distance dans l'espace des labels est faible. La sélection de
+ variables consiste donc en une sélection <emph>moyenne</emph>
+ pour les différents labels, et elle n'est pas conçue pour
+ traiter tous les labels en même temps.
+ </p>
+ <p>
+ De la même façon, une adaptation naïve du Lasso en multi-labels
+ ne permet pas de résoudre le problème de sélection de variables
+ multi-labels. En effet, si l'on cherche à résoudre le problème
+ suivant :
+ </p>
+ <h:mini id="mtl">
+ <h:variables>W \in \mathbb{R}^{d, m}</h:variables>
+ <h:objective>
+ \left\|X W - Y\right\|_F^2 + \alpha \sum_{j = 1} ^ d \sum_{k = 1} ^ m \left|W_{jk}\right|
+ </h:objective>
+ </h:mini>
+ <p>
+ On obtiendra une matrice <h:eq>W</h:eq> sparse, mais ce n'est
+ pas suffisant : il se peut que chaque label demande un
+ sous-ensemble différent de variables. Il faut que tous les
+ labels partagent un même sous-ensemble de variables.
+ </p>
+ <h4>Utilisation du Lasso par groupe</h4>
+ <p>
+ Pour pallier ce problème, il faut utiliser une version un peu
+ moins naïve du Lasso. En construisant un modèle
+ linéaire <h:eq>W</h:eq>, les lignes correspondent aux
+ coefficients pour une variable et les colonnes correspondent aux
+ coefficients pour un label. Ainsi, si l'on veut pouvoir exprimer
+ tous les labels avec un petit nombre de variables, il faut que
+ la matrice <h:eq>W</h:eq> ait un petit nombre de lignes non
+ nulles. Il faut donc appliquer une régularisation de type Lasso
+ sur les lignes de <h:eq>W</h:eq>, c'est-à-dire un lasso par
+ groupe. On retrouve donc directement
+ l'algorithme <emph>JFS</emph>
+ <h:cite href="argyriou_multitask_nodate"/>.
+ </p>
+ <h4>
+ Régularisation <h:eq>l_{2,1 - 2}</h:eq> non convexe pour la
+ sélection de variables
+ </h4>
+ <p>
+ Si l'on examine la norme <h:eq>l_{2,1}</h:eq> pour un modèle à 2
+ variables et 1 label, on obtient la figure
+ <h:ref href="#fig-l21"/> haut. On constate que la valeur de la
+ fonction de coût est plus faible si l'une des coordonnées du
+ modèle est nulle, et elle est globalement minimale si les deux
+ coordonnées sont nulles. C'est utile pour la sélection de
+ variables, puisque l'optimisation du problème pourra éliminer
+ l'une des deux variables. Cependant, <h:cite href="l21m2"/>
+ propose une amélioration pour la sélection de variables
+ multi-labels, en utilisant la différence entre la
+ norme <h:eq>l_{2, 1}</h:eq> et la norme <h:eq>l_2</h:eq>. Les
+ effets de cette régularisation sont très parlants pour un modèle
+ à 2 variables (figure <h:ref href="#fig-l21"/> bas) : le coût
+ est exactement nul dès que l'une des variables est éliminée.
+ </p>
+ <figure>
+ <img src="images/l21m2.svg" />
+ <figcaption id="fig-l21">
+ Norme <h:eq>l_{2, 1}</h:eq> et <h:eq>l_{2, 1 - 2}</h:eq> d’un
+ modèle à 2 variables et 1 label.
+ </figcaption>
+ </figure>
+ <p>
+ Ce problème n'est pas convexe, cependant il est possible de
+ l'optimiser en relaxant la partie non convexe par le plan
+ tangent à chaque itération.
+ </p>
+ <h4>Multi-Labels Informed Feature Selection</h4>
+ <p>
+ Pour les problèmes de sélection de variables, il n'est pas
+ toujours pertinent d'obtenir de bons résultats en
+ régression. Ceci débloque une opportunité pour utiliser des
+ variables latentes. C'est l'approche développée par l'algorithme
+ <emph>MIFS</emph>, pour <emph>Multi-Labels Informed Feature
+ Selection</emph> <h:cite href="mifs"/>. Elle se fonde sur
+ plusieurs hypothèses, qui sont intégrées dans une même fonction
+ objectif.
+ </p>
+ <p>
+ Tout d'abord, <emph>MIFS</emph> propose une abstraction des
+ labels. Concrètement, il faut sélectionner un nombre de labels
+ latents, <h:eq>1 \leq o \leq m</h:eq>, et introduire une matrice
+ de pseudo-labels <h:eq>V \in \mathbb{R}^{n, o}</h:eq> ainsi
+ qu'une matrice <h:eq>B \in \mathbb{R}^{o, m}</h:eq> de sorte à
+ substituer <h:eq>VB</h:eq> à <h:eq>Y</h:eq>, et à proposer un
+ apprentissage de <h:eq>V</h:eq> :
+ </p>
+ <h:mini>
+ <h:variables>
+ W \in \mathbb{R}^{d, o}, V \in \mathbb{R}^{n, o}, B \in \mathbb{R}^{o, m}
+ </h:variables>
+ <h:objective>
+ \left\|XW - V\right\|_F^2 + \alpha \left\|Y - VB\right\|_F^2
+ </h:objective>
+ </h:mini>
+ <p>
+ Ensuite, une régularisation Laplacienne introduit l'hypothèse
+ suivante : pour chaque pseudo-label, deux individus proches ont
+ des valeurs proches. Enfin, la régularisation sur les lignes de
+ la matrice <h:eq>W</h:eq> permet d'obtenir un modèle sparse par
+ ligne, ce qui permet de guider la sélection de variables.
+ </p>
+ <h:mini>
+ <h:variables>
+ W \in \mathbb{R}^{d, o}, V \in \mathbb{R}^{n, o}, B \in \mathbb{R}^{o, m}
+ </h:variables>
+ <h:objective>
+ \left\|XW - V\right\|_F^2 + \alpha \left\|Y - VB\right\|_F^2 + \beta \mathrm{tr} \left(V'LV\right) + \gamma \left\|W\right\|_{2, 1}
+ </h:objective>
+ </h:mini>
+ <p>
+ La fonction objectif est convexe en chacune de ces variables ;
+ l'algorithme MIFS choisit une optimisation alternée pour
+ l'optimisation.
+ </p>
+ <h1 short="LapS3L">Régression Laplacienne semi-supervisée</h1>
+ <h:résumé-chapitre>
+ <p>
+ Dans ce chapitre, nous présentons notre première contribution
+ sur la régression semi-supervisée utilisant une version
+ régularisée de l'algorithme <emph>SSSL</emph>
+ <h:cite href="ji_simple_2012"/>. Nous commençons par décrire
+ les travaux liés, puis nous décrivons l'approche proposée,
+ après quoi nous montrerons à travers deux études
+ expérimentales l'apport de notre proposition.
+ </p>
+ <p>
+ L'algorithme <emph>SSSL</emph> de base consiste en deux étapes
+ distinctes : un changement d'espace non supervisé, puis une
+ régression simple dans ce nouvel espace. Nous proposons
+ d'emprunter la même idée du changement d'espace original, mais
+ en adoptant une régularisation Laplacienne dans le nouvel
+ espace ainsi obtenu.
+ </p>
+ </h:résumé-chapitre>
+ <h2>Introduction</h2>
+ <p>
+ À cause de la prolifération des données partiellement
+ labellisées, l'apprentissage automatique a connu des
+ développements majeurs dans le contexte semi-supervisé
+ <h:cite href="chapelle_semi-supervised_2006"/>. Cette tendance
+ est due d'une part à la difficulté de la tâche de labellisation,
+ et d'autre part au coût associé lorsque la labellisation est
+ possible. L'apprentissage semi-supervisé est un cas particulier
+ de l'apprentissage faiblement labellisé
+ <h:cite href="li_convex_2013"/>, qui consiste en général en
+ l'apprentissage d'une fonction objectif à partir de données
+ contenant à la fois des individus labellisés et des individus
+ non-labellisés. Ces situations peuvent être abordées par deux
+ classes d'approches : l'une fondée sur la propagation des
+ labels, dans le but d'utiliser des méthodes supervisées
+ <h:cite href="zhu_semi-supervised_nodate"/>, et l'autre fondée
+ sur la transformation des données labellisées en contraintes à
+ intégrer dans un processus non-supervisé de clustering
+ <h:cite href="basu_constrained_2009"/>. Nous nous concentrons
+ sur la première classe d'approches, avec un défi particulier :
+ il s'agit d'apprendre à partir d'un petit sous-ensemble
+ supervisé, en comparaison de l'ensemble non supervisé. Dans ce
+ contexte semi-supervisé, la littérature a connu une extension
+ significative depuis les vingt dernières années, en particulier
+ pour la classification, grâce à des approches populaires comme
+ le self-training <h:cite href="chapelle_semi-supervised_2006"/>,
+ le co-training <h:cite href="blum_combining_1998"/>, le SVM
+ transductif ou S<sup>3</sup>VM
+ <h:cite href="joachims1999transductive,bennett1999semi"/>, les
+ approches fondées sur des graphes
+ <h:cite href="blum_learning_2001"/> et des approches génératives
+ <h:cite href="nigam2000text"/>. Dans ce paradigme particulier,
+ les problèmes de régression ont aussi suscité l'intérêt de
+ plusieurs travaux de recherche que nous pouvons citer de façon
+ non exhaustive. Les approches sont diverses : fondées sur la
+ régression linéaire
+ <h:cite href="azriel_semi-supervised_2016,ji_simple_2012"/>,
+ logistique <h:cite href="amini_semi-supervised_2002"/>, ou
+ Laplacienne
+ <h:cite href="cai_semi-supervised_2006,belkin_manifold_2006"/> ;
+ d'autres approches sont fondées sur le co-training
+ <h:cite href="zhou_semi-supervised_nodate"/> ; ou fonctionnent
+ avec des contraintes spécifiques liées à l'ordre de préférence
+ des données non labellisées
+ <h:cite href="zhu_semi-supervised_nodate"/> ou leur distribution
+ géométrique dans des espaces de haute dimension
+ <h:cite href="ryan_semi-supervised_2015,moscovich_minimax-optimal_nodate"/>.
+ </p>
+ <h2>Travaux liés</h2>
+ <p>
+ L'algorithme SSSL (<emph>Simple algorithm for Semi-Supervised
+ Learning</emph>) <h:cite href="ji_simple_2012"/> se décompose
+ en deux étapes simples :
+ </p>
+ <ol>
+ <li>
+ Extraction de variables non supervisée au moyen d'une k-PCA
+ (<emph>kernel PCA</emph>, ACP avec un noyau) ;
+ </li>
+ <li>
+ Apprentissage supervisé dans ce nouvel espace.
+ </li>
+ </ol>
+ <p>
+ Sous certaines hypothèses vis-à-vis des données, il est possible
+ de garantir que dans la classe de fonctions recherchée,
+ l'algorithme fournit une fonction ayant une erreur de régression
+ minimale (à une constante près), cette erreur de généralisation
+ théorique restant inférieure à ce que l'on obtiendrait sans les
+ individus non labellisés. Ces hypothèses portent sur :
+ </p>
+ <ul>
+ <li>
+ l'erreur de régression minimale sur la classe de recherche des
+ fonctions ;
+ </li>
+ <li>
+ la distribution des valeurs propres de la matrice de noyau ;
+ </li>
+ <li>
+ les vecteurs propres de cette matrice ;
+ </li>
+ <li>
+ le nombre d'individus non labellisés.
+ </li>
+ </ul>
+ <p>
+ L'algorithme <emph>SSSL</emph> permet de rechercher une fonction
+ de prédiction qui puisse s'écrire de la manière
+ suivante. Si <h:eq>N</h:eq> désigne le nombre d'individus y
+ compris les non labellisés de l'ensemble d'apprentissage,
+ et <h:eq>x_i \in \mathcal{X}</h:eq> désigne le
+ <h:eq>i</h:eq><sup>ième</sup> individu de l'ensemble
+ d'apprentissage, on définit une fonction de noyau <h:eq>\kappa
+ \colon \mathcal{X} \times \mathcal{X} \to \mathbb{R}</h:eq>. On
+ peut également définir la fonction <h:eq>\hat L_N</h:eq>
+ suivante :
+ </p>
+ <h:equation>
+ \hat L_N \colon
+ \begin{array}{ccc}
+ \left(\mathcal{X} \to \mathbb{R}\right) &amp;\to&amp; \left(\mathcal{X} \to \mathbb{R}\right) \\
+ f &amp;\mapsto&amp; x \mapsto \frac 1 N \sum_{i = 1} ^ N \kappa (x_i, x) f (x_i)
+ \end{array}
+ </h:equation>
+ <p>
+ On note les valeurs propres de cet opérateur linéaire
+ <h:eq>\left(\hat \lambda\right)_{k = 1} ^ {N}</h:eq> et ses
+ fonctions propres <h:eq>\left(\phi\right)_{k = 1} ^ N</h:eq>. La
+ fonction de prédiction est recherchée comme une combinaison
+ linéaire des <h:eq>s \leq N</h:eq> fonctions propres ayant la
+ plus grande valeur propre :
+ </p>
+ <h:equation>
+ f \colon x \mapsto \sum_{k = 1} ^ s \Gamma_{k} \hat \phi_{k} (x)
+ </h:equation>
+ <p>
+ Les coefficients <h:eq>\Gamma</h:eq> peuvent être obtenus tout
+ simplement par une régression aux moindres carrés, c'est-à-dire
+ en minimisant l'erreur de régression (<h:eq>z</h:eq> désigne le
+ vecteur de labels pour les individus labellisés) :
+ </p>
+ <h:mini>
+ <h:variables>\Gamma \in \mathbb{R}^{d}</h:variables>
+ <h:objective>\left\|f (x) - z\right\|_2^2</h:objective>
+ </h:mini>
+ <p>
+ Par conséquent, les valeurs propres elles-mêmes de <h:eq>\hat
+ L_N</h:eq> ne sont pas utilisées.
+ </p>
+ <p>
+ La régularisation Laplacienne que nous utilisons
+ <h:cite href="belkin_manifold_2006"/> ne considère pas les
+ labels des données, ce qui permet d'utiliser tous les individus,
+ y compris ceux de l'ensemble non-supervisé. À partir de leurs
+ similarités dans l'espace des variables, un graphe est
+ construit. Les nœuds sont les individus, et les arêtes indiquent
+ des individus similaires. La régularisation consiste à indiquer
+ que les individus similaires doivent avoir des valeurs de la
+ variable cible similaires, en minimisant le terme suivant :
+ </p>
+ <h:equation>
+ \sum_{i, j\mathrm{~similaires}} (f (x_i) - f (x_j)) ^ 2
+ </h:equation>
+ <h2>Approche proposée : <emph>LapS3L</emph></h2>
+ <p>
+ Bien que le changement d'espace introduit
+ par <emph>SSSL</emph>(présenté ci-dessus) permette de mieux
+ traiter certains problèmes de régression semi-supervisée
+ <h:cite href="ji_simple_2012"/>, elle n'utilise pas les mêmes
+ hypothèses que la régularisation Laplacienne. Dans le cas
+ général, il n'est pas possible de conclure à la proximité de
+ deux individus dans l'espace extrait à partir de deux individus
+ proches dans l'espace réel. Nous proposons donc de réguler
+ l'apprentissage en introduisant l'hypothèse suivante :
+ </p>
+ <blockquote>
+ Si deux individus sont proches dans l'espace réel, alors l'écart
+ de prédiction doit être faible.
+ </blockquote>
+ <p>
+ Nous proposons une nouvelle approche, fondée sur cette
+ hypothèse, que nous appelons <emph>LapS3L</emph>, pour
+ <emph>Laplacian-regularized Simple algorithm for Semi-Supervised
+ Learning</emph>. Nous décrivons dans ce qui suit, ses
+ différentes étapes.
+ </p>
+ <h3>Changement d'espace</h3>
+ <p>
+ En reprenant le cadre de l'algorithme <emph>SSSL</emph>, il est
+ possible de tisser un parallèle entre la décomposition en
+ valeurs et fonctions propres de <h:eq>\hat L_N</h:eq> et la
+ décomposition en valeurs propres et vecteurs propres de la
+ matrice noyau. Ce parallèle permet d'obtenir un algorithme
+ d'apprentissage en deux temps : obtention des vecteurs propres
+ de la matrice noyau, puis obtention de ses coefficients.
+ </p>
+ <p>
+ Tout d'abord, cette matrice notée <h:eq>K \in S_N^{+}
+ (\mathbb{R})</h:eq> est définie comme l'application symétrique
+ de la fonction <h:eq>\kappa</h:eq> entre chaque individu de
+ l'ensemble d'apprentissage :
+ </p>
+ <h:equation>
+ \forall i, j \in \{1, ..., N\}, \quad K_{i, j} = \kappa (x_i, x_j)
+ </h:equation>
+ <p>
+ L'analyse des vecteurs propres de <h:eq>K</h:eq> permet
+ d'obtenir une matrice de vecteurs propres <h:eq>U \in
+ \mathbb{R}^{N, s}</h:eq>, dont les colonnes sont unitaires. On
+ peut donc poser le changement de variables suivant :
+ </p>
+ <h:equation>
+ X \gets K' U
+ </h:equation>
+ <p>
+ Dans ce changement de variables, chaque ligne de la
+ matrice <h:eq>X</h:eq> correspond à un individu de l'ensemble
+ d'apprentissage. Chaque colonne correspond à une variable
+ extraite. Le nombre de variables extraites est compris entre 1
+ et <h:eq>N</h:eq>. Par conséquent, dans le cas où la matrice de
+ données est plus longue que large, on peut avoir <h:eq>s >
+ d</h:eq>. Pour les applications où les données sont en grande
+ dimension, comme par exemple pour les données textuelles,
+ d'images ou génétiques, ce n'est pas un problème. Dans les
+ autres cas, la réduction de dimensionnalité ne peut s'opérer que
+ si la valeur de l'hyperparamètre <h:eq>s</h:eq> est relativement
+ faible.
+ </p>
+ <p>
+ Puisque les lignes de <h:eq>X</h:eq> sont aussi les lignes
+ de <h:eq>\mathcal{V}</h:eq>, il est possible de ne conserver que
+ les lignes correspondant aux individus labellisés. On obtient
+ ainsi une sous-matrice <h:eq>X_l \in \mathbb{R}^{n, s}</h:eq>.
+ </p>
+ <h3>Régression régularisée</h3>
+ <p>
+ Dans la deuxième partie de l'algorithme, l'implémentation
+ consiste à effectuer une régression simple à partir de ces
+ nouvelles variables. On obtient donc une liste de <h:eq>s</h:eq>
+ coefficients, <h:eq>w</h:eq>.
+ </p>
+ <h:mini id="reg-sssl">
+ <h:variables>w \in \mathbb{R}^s</h:variables>
+ <h:objective>\left\|{X_l}w - z\right\|_2^2</h:objective>
+ </h:mini>
+ <p>
+ Dans le cas où la fonction <h:eq>\kappa</h:eq> est en fait le
+ produit scalaire, la formulation de la régression dans le nouvel
+ ensemble de variables <h:eq>X</h:eq>, <h:ref href="#reg-sssl"/>,
+ montre qu'il n'y a pas de solution dans le cas où <h:eq>s >
+ d</h:eq>. L'extraction de variables permet donc dans ce cas une
+ réduction de dimensionnalité. Dans le cas général, cette
+ remarque ne tient pas. Par exemple, pour n'importe quel
+ hyperparamètre <h:eq>\sigma</h:eq> du noyau RBF :
+ </p>
+ <h:equation>
+ \kappa \colon (x_i, x_j) \mapsto e^{-\frac {\left\|x_i - x_j\right\|_2^2} {2 \sigma ^ 2}}
+ </h:equation>
+ <p>
+ La matrice noyau obtenue <h:eq>K</h:eq> est à diagonale
+ strictement dominante, donc inversible ; par conséquent la
+ matrice de covariance <h:eq>X'X</h:eq> l'est aussi en
+ extrayant <h:eq>N</h:eq> valeurs propres. Dans la pratique, les
+ approximations numériques ne permettent pas de choisir une
+ grande valeur de <h:eq>s</h:eq>.
+ </p>
+ <p>
+ Étant donné que la prédiction s'effectue directement dans
+ l'espace extrait, il suffit donc de construire le graphe des
+ individus à partir des variables d'origine, et d'ajouter un
+ terme de régularisation dans la fonction objectif linéaire de la
+ seconde étape. Concrètement, on remplace la régression
+ <h:ref href="#reg-sssl"/> par la version utilisant la
+ régularisation Laplacienne <h:ref href="#reg-laps3l"/> :
+ </p>
+ <h:mini id="reg-laps3l">
+ <h:variables>w \in \mathbb{R} ^ s</h:variables>
+ <h:objective>\left\|X_l w - z_l\right\|_2^2 + \alpha \left\|w\right\|^2 + \beta [Xw]'L[Xw]</h:objective>
+ </h:mini>
+ <p>
+ Cette approche ne nécessite pas de changer la prédiction ; elle
+ n'intervient que dans l'apprentissage.
+ </p>
+ <h3>Prédiction</h3>
+ <p>
+ Pour la prédiction sur un ensemble de
+ test <h:eq>\mathcal{V}_t</h:eq> à <h:eq>n_t</h:eq> individus, on
+ commence par appliquer la matrice <h:eq>\kappa</h:eq> entre tous
+ les individus de l'ensemble labellisé, à gauche, et tous les
+ individus de l'ensemble de test, à droite. On note le
+ résultat <h:eq>K_b \in \mathbb{R}^{N, n_t}</h:eq> :
+ </p>
+ <h:equation>
+ \forall i \in \{1, ..., N\}, \quad \forall j \in \{1, ... n_t\}, \quad {K_b}_{i, j} = \kappa (\mathcal{V}_{i, .}, {\mathcal{V}_t}_{j, .})
+ </h:equation>
+ <p>
+ Le changement de variables est identique à celui effectué pour
+ l'apprentissage :
+ </p>
+ <h:equation>
+ X_t \gets K_b' U \in \mathbb{R}^{n_t, s}
+ </h:equation>
+ <p>
+ La prédiction est donc opérée par :
+ </p>
+ <h:equation>X_t w</h:equation>
+ <h3>Algorithme</h3>
+ <p>
+ L'algorithme <h:ref href="#algorithme-laps3l-train"/> montre les
+ étapes de l'apprentissage, et l'algorithme
+ <h:ref href="#algorithme-laps3l-predict"/> décrit la fonction de
+ prédiction.
+ </p>
+ <h:algorithm id="algorithme-laps3l-train">
+ <alg:algorithmic>
+ <alg:donnée><h:eq>\mathcal{V} \in \mathbb{R}^{N, d}</h:eq></alg:donnée>
+ <alg:donnée><h:eq>z \in \mathbb{R}^{n_l}</h:eq></alg:donnée>
+ <alg:hyperparamètre><h:eq>s \in \{1, ..., N\}</h:eq></alg:hyperparamètre>
+ <alg:hyperparamètre><h:eq>\kappa \colon \mathcal{X} \times \mathcal{X} \to \mathbb{R}</h:eq></alg:hyperparamètre>
+ <alg:hyperparamètre>matrice Laplacienne du graphe des individus, <h:eq>L \in \mathbb{R}^{N, N}</h:eq></alg:hyperparamètre>
+ <alg:hyperparamètre><h:eq>\alpha > 0</h:eq></alg:hyperparamètre>
+ <alg:hyperparamètre><h:eq>\beta > 0</h:eq></alg:hyperparamètre>
+ <alg:state>
+ Construire la matrice <h:eq>K \in \mathbb{R}^{N,
+ N}</h:eq> : <h:equation-x>\forall i, j, \quad K_{i, j} =
+ \kappa (\mathcal{V}_{i, .}, \mathcal{V}_{j,
+ .})</h:equation-x>
+ </alg:state>
+ <alg:state>
+ Décomposer la matrice <h:eq>K</h:eq> en valeurs propres et
+ vecteurs propres, sélectionner les <h:eq>s</h:eq> vecteurs
+ propres ayant la plus grande valeur propre
+ associée : <h:eq>U \in \mathbb{R}^{N, s}</h:eq>
+ </alg:state>
+ <alg:state>
+ Poser <h:eq>X := K U</h:eq>
+ </alg:state>
+ <alg:state>
+ Sélectionner la sous-matrice <h:eq>Xl \in
+ \mathbb{R}^{n,s}</h:eq> composée des lignes
+ de <h:eq>X</h:eq> correspondant aux individus labellisés
+ </alg:state>
+ <alg:state>
+ <h:mini>
+ <h:variables>w \in \mathbb{R} ^ s</h:variables>
+ <h:objective>\left\|X_l w - z_l\right\|_2^2 + \alpha \left\|w\right\|^2 + \beta [Xw]'L[Xw]</h:objective>
+ </h:mini>
+ </alg:state>
+ <alg:résultat><h:eq>U \in \mathbb{R}^{N, s}</h:eq></alg:résultat>
+ <alg:résultat><h:eq>w \in \mathbb{R}^{s}</h:eq></alg:résultat>
+ </alg:algorithmic>
+ <figcaption>
+ Algorithme <emph>LapS3L</emph> : apprentissage
+ </figcaption>
+ </h:algorithm>
+ <h:algorithm id="algorithme-laps3l-predict">
+ <alg:algorithmic>
+ <alg:donnée><h:eq>\mathcal{V} \in \mathbb{R}^{N, d}</h:eq>, <h:eq>\mathcal{V}_t \in \mathbb{R}^{n_t, d}</h:eq></alg:donnée>
+ <alg:hyperparamètre><h:eq>\kappa \colon \mathcal{X} \times \mathcal{X} \to \mathbb{R}</h:eq></alg:hyperparamètre>
+ <alg:modèle><h:eq>U \in \mathbb{R}^{N, s}</h:eq></alg:modèle>
+ <alg:modèle><h:eq>w \in \mathbb{R}^{s}</h:eq></alg:modèle>
+ <alg:state>
+ Construire la matrice <h:eq>K_b \in \mathbb{R}^{N,
+ n_t}</h:eq> :
+
+ <h:equation-x>
+ \forall i, j, \quad {K_b}_{i, j} = \kappa (\mathcal{V}_{i, .}, {\mathcal{V}_t}_{j, .})
+ </h:equation-x>
+ </alg:state>
+ <alg:state>
+ Poser <h:eq>X_t := K_b' U</h:eq>
+ </alg:state>
+ <alg:résultat><h:eq>\hat z \gets X_t w</h:eq></alg:résultat>
+ </alg:algorithmic>
+ <figcaption>
+ Algorithme <emph>LapS3L</emph> : prédiction
+ </figcaption>
+ </h:algorithm>
+ <h2>Validation expérimentale</h2>
+ <p>
+ Dans cette section, nous présentons une première étude
+ expérimentale pour valider l'approche proposée sur des données
+ publiques issues de la littérature.
+ </p>
+ <h3>Jeux de données utilisés</h3>
+ <p>
+ Les auteurs dans <h:cite href="ji_simple_2012"/> ont identifié
+ trois jeux de données pour lesquels les hypothèses de
+ fonctionnement sont
+ établies : <emph>wine</emph>, <emph>insurance</emph> et
+ <emph>temperature</emph>.
+ </p>
+ <ul>
+ <li>
+ <emph>wine</emph> regroupe une évaluation de la composition
+ chimique de 4898 vins, exprimée sur 11 variables continues,
+ ainsi qu'un score de qualité attribué à chaque vin
+ <h:fn><a href="https://archive.ics.uci.edu/ml/datasets/wine+quality">https://archive.ics.uci.edu/ml/datasets/wine+quality</a></h:fn>. La
+ cible, la qualité, est une valeur continue, ce qui en fait un
+ jeu de données de régression. La qualité ne suit pas une loi
+ uniforme : 45% des vins ont une qualité égale à 6, 30% ont une
+ qualité égale à 5, et 18% une qualité égale à 7. Ainsi, les
+ valeurs d'erreur de régression doivent être inférieures à la
+ base suivante : en prédisant toujours 6, on obtient
+ une <emph>RSME</emph> de 0.89 et une <emph>MAE</emph> de 0.63.
+ </li>
+ <li>
+ <emph>insurance</emph>, aussi appelé COIL2000
+ <h:fn>
+ <a href="https://archive.ics.uci.edu/ml/datasets/Insurance+Company+Benchmark+(COIL+2000)">
+ https://archive.ics.uci.edu/ml/datasets/Insurance+Company+Benchmark+(COIL+2000)
+ </a>
+ </h:fn>, regroupe des profils de personnes ayant souscrit une
+ assurance, établis sur 85 variables, et la cible est la
+ variable binaire indiquant si la personne assurée a une
+ assurance pour une caravane. Là encore, la cible est
+ déséquilibrée, puisque seuls 6% des clients ont une assurance
+ pour une caravane. La base consistant à prédire la valeur
+ moyenne done une <emph>RMSE</emph> de 0.237, et prédire 0
+ donne une <emph>RMSE</emph> de 0.244 et une <emph>MAE</emph>
+ de 0.06.
+ </li>
+ <li>
+ <emph>temperature</emph> décrit la température de la haute
+ atmosphère, dans un jeu de données qui n'est pas public. Par
+ conséquent, nous ne l'utilisons pas dans notre étude.
+ </li>
+ </ul>
+ <p>
+ Comme dans l’article original, nous conservons de 2% à 9% des
+ labels des jeux de données.
+ </p>
+ <h3>Protocole expérimental</h3>
+ <p>
+ L'algorithme <emph>LapS3L</emph> a plusieurs hyperparamètres :
+ </p>
+ <ul>
+ <li>
+ la définition du noyau, et éventuellement la valeur de la
+ bande passante si c'est un noyau gaussien ;
+ </li>
+ <li>
+ le nombre de composantes principales ;
+ </li>
+ <li>
+ le régulariseur ridge <h:eq>\alpha</h:eq> ;
+ </li>
+ <li>
+ le régulariseur Laplacien <h:eq>\beta</h:eq> ;
+ </li>
+ <li>
+ la définition du graphe des individus.
+ </li>
+ </ul>
+ <p>
+ Les valeurs de ces hyperparamètres sont recherchées dans les
+ ensembles suivants :
+ </p>
+ <ul>
+ <li>
+ noyau : l'ensemble composé du noyau utilisant la similarité
+ cosinus, du noyau constitué par la matrice de Gram, et du
+ noyau gaussien dont la bande passante <h:eq>\sigma</h:eq>
+ prend les valeurs dans <h:eq>\{0.01, 0.05, 0.1, 0.5, 1, 5, 10,
+ 50, 100\}</h:eq> ;
+ </li>
+ <li>
+ le nombre de composantes principales est sélectionné dans
+ l'ensemble entre {1, 2, 5, 10, 20, 50, 100, 200}. Une valeur
+ supérieure à 200 nuit à l'apprentissage du <emph>SSSL</emph>,
+ puisque la matrice de variables extraites <h:eq>X</h:eq> a un
+ rang trop faible, d'une part, et le temps d'apprentissage est
+ trop long, d'autre part ;
+ </li>
+ <li>
+ le graphe des individus est défini comme suit : on commence
+ par le construire complet, les arêtes étant valuées par la
+ similarité cosinus entre individus dans l'ensemble des
+ variables original, puis il est élagué de façon à ne conserver
+ que les 10 plus proches voisins symétriques ;
+ </li>
+ <li>
+ les deux régulariseurs sont choisis dans
+ l'ensemble <h:eq>\{\left(10^{k}\right)_{k = -4} ^ 4\}</h:eq>.
+ </li>
+ </ul>
+ <p>
+ La procédure de tuning est la suivante :
+ </p>
+ <ul>
+ <li>
+ <p>Répéter 10 fois les opérations suivantes :</p>
+ <ul>
+ <li>
+ Sélectionner 90% du jeu de données labellisé pour
+ l'apprentissage, 10% pour le test (les données non
+ labellisées sont utilisées pour l'apprentissage) ;
+ </li>
+ <li>
+ <p>
+ Répéter 10 fois (insurance) ou 20 fois (wine) :
+ </p>
+ <ul>
+ <li>
+ Tirer avec remise une valeur pour chaque
+ hyperparamètre,
+ </li>
+ <li>
+ Évaluer la performance (<emph>RMSE</emph>)
+ de <emph>LapS3L</emph> et <emph>SSSL</emph> en
+ validation croisée à 10 folds sur l'ensemble
+ d'apprentissage labellisé, en y ajoutant les individus
+ non labellisés ;
+ </li>
+ </ul>
+ </li>
+ <li>
+ Sélectionner la meilleure valeur des hyperparamètres ;
+ </li>
+ <li>
+ Entraîner <emph>SSSL</emph> et <emph>LapS3L</emph> sur
+ l'ensemble d'apprentissage en utilisant ces
+ hyperparamètres ;
+ </li>
+ <li>
+ Tester sur l'ensemble de
+ test : <emph>RMSE</emph>, <emph>MAE</emph>,
+ <emph>RRSE</emph>, <emph>RAE</emph>.
+ </li>
+ </ul>
+ </li>
+ <li>
+ Retourner la moyenne et l'écart-type de chacune de ces
+ métriques.
+ </li>
+ </ul>
+ <p>
+ Le nombre de points du paramétrage est plus restreint pour le
+ jeu de données <emph>insurance</emph>, car il comporte environ
+ deux fois plus d'individus que <emph>wine</emph>.
+ </p>
+ <p>
+ Nous utilisons les quatre métriques suivantes pour évaluer la
+ régression semi-supervisée, où <h:eq>z</h:eq> désigne le label
+ de l'ensemble de test, <h:eq>\hat z</h:eq> la prédiction, et
+ <h:eq>\bar z</h:eq> la valeur moyenne sur l'ensemble
+ d'apprentissage :
+ </p>
+ <ul>
+ <li>
+ <emph>RMSE</emph> ou <emph>Root Mean Squared Error</emph>,
+ racine de l'erreur quadratique
+ moyenne : <h:equation-x>\mathrm{RMSE} = \sqrt{\frac 1 {n_t}
+ \left\|z - \hat z\right\|_2^2}</h:equation-x>
+ </li>
+ <li>
+ <emph>MAE</emph> ou <emph>Mean Absolute Error</emph>, erreur
+ absolue moyenne : <h:equation-x>\mathrm{MAE} = \frac 1 {n_t}
+ \left|z - \hat z\right|</h:equation-x>
+ </li>
+ <li>
+ <emph>RRSE</emph> ou <emph>Root Relative Squared Error</emph>,
+ racine de l'erreur quadratique
+ relative, <h:equation-x>\mathrm{RRSE} = \sqrt{\frac {\left\|z
+ - \hat z\right\|_2^2} {\left\|z - \bar
+ z\right\|_2^2}}</h:equation-x>
+ </li>
+ <li>
+ <emph>RAE</emph> ou <emph>Relative Absolute Error</emph>,
+ erreur en valeur absolue relative, <h:equation-x>\mathrm{RAE}
+ = \frac {\left|z - \hat z\right|_2^2} {\left|z - \bar
+ z\right|_2^2}</h:equation-x>
+ </li>
+ </ul>
+ <h3>Résultats</h3>
+ <p>
+ Les résultats de la comparaison sont visibles dans les tables
+ <h:ref href="#results-laps3l-rmse"/>-<h:ref href="#results-laps3l-rae"/>.
+ </p>
+ <table latex-align="|l|cc|">
+ <caption id="results-laps3l-rmse">
+ Comparaison entre <emph>LapS3L</emph> et <emph>SSSL</emph>
+ sur <emph>wine</emph> et <emph>insurance</emph>, métrique
+ RMSE.
+ </caption>
+ <thead>
+ <tr><th>dataset</th> <th><strong>LapS3L</strong></th><th> <emph>SSSL</emph></th></tr>
+ </thead>
+ <tbody>
+ <tr><td>insurance (2%)</td><td><strong>0.20 ± 0.03</strong></td><td>0.21 ± 0.03</td></tr>
+ <tr><td>insurance (3%)</td><td><strong>0.21 ± 0.02</strong></td><td>0.21 ± 0.02</td></tr>
+ <tr><td>insurance (4%)</td><td><strong>0.21 ± 0.02</strong></td><td>0.22 ± 0.02</td></tr>
+ <tr><td>insurance (5%)</td><td><strong>0.22 ± 0.02</strong></td><td>0.22 ± 0.02</td></tr>
+ <tr><td>insurance (6%)</td><td><strong>0.22 ± 0.02</strong></td><td>0.22 ± 0.02</td></tr>
+ <tr><td>insurance (7%)</td><td><strong>0.22 ± 0.02</strong></td><td>0.22 ± 0.02</td></tr>
+ <tr><td>insurance (8%)</td><td><strong>0.22 ± 0.02</strong></td><td>0.23 ± 0.02</td></tr>
+ <tr><td>insurance (9%)</td><td><strong>0.23 ± 0.01</strong></td><td>0.23 ± 0.02</td></tr>
+ <tr><td>wine (2%)</td> <td><strong>0.77 ± 0.06</strong></td><td>0.82 ± 0.06</td></tr>
+ <tr><td>wine (3%)</td> <td><strong>0.75 ± 0.05</strong></td><td>0.80 ± 0.05</td></tr>
+ <tr><td>wine (4%)</td> <td><strong>0.77 ± 0.06</strong></td><td>0.82 ± 0.05</td></tr>
+ <tr><td>wine (5%)</td> <td><strong>0.78 ± 0.05</strong></td><td>0.84 ± 0.06</td></tr>
+ <tr><td>wine (6%)</td> <td><strong>0.78 ± 0.03</strong></td><td>0.84 ± 0.04</td></tr>
+ <tr><td>wine (7%)</td> <td><strong>0.77 ± 0.04</strong></td><td>0.84 ± 0.03</td></tr>
+ <tr><td>wine (8%)</td> <td><strong>0.77 ± 0.04</strong></td><td>0.84 ± 0.04</td></tr>
+ <tr><td>wine (9%)</td> <td><strong>0.77 ± 0.04</strong></td><td>0.84 ± 0.04</td></tr>
+ </tbody>
+ </table>
+ <table latex-align="|l|cc|">
+ <caption id="results-laps3l-mae">
+ Comparaison entre <emph>LapS3L</emph> et <emph>SSSL</emph>
+ sur <emph>wine</emph> et <emph>insurance</emph>, métrique
+ MAE.
+ </caption>
+ <thead>
+ <tr><th>dataset</th> <th><strong>LapS3L</strong></th><th> <emph>SSSL</emph></th></tr>
+ </thead>
+ <tbody>
+ <tr><td>insurance (2%)</td><td><strong>0.07 ± 0.02</strong></td><td>0.12 ± 0.02</td></tr>
+ <tr><td>insurance (3%)</td><td><strong>0.07 ± 0.03</strong></td><td>0.11 ± 0.01</td></tr>
+ <tr><td>insurance (4%)</td><td><strong>0.09 ± 0.03</strong></td><td>0.11 ± 0.02</td></tr>
+ <tr><td>insurance (5%)</td><td><strong>0.09 ± 0.03</strong></td><td>0.11 ± 0.02</td></tr>
+ <tr><td>insurance (6%)</td><td><strong>0.09 ± 0.03</strong></td><td>0.11 ± 0.02</td></tr>
+ <tr><td>insurance (7%)</td><td><strong>0.10 ± 0.02</strong></td><td>0.11 ± 0.02</td></tr>
+ <tr><td>insurance (8%)</td><td><strong>0.10 ± 0.03</strong></td><td>0.11 ± 0.02</td></tr>
+ <tr><td>insurance (9%)</td><td><strong>0.11 ± 0.01</strong></td><td>0.11 ± 0.01</td></tr>
+ <tr><td>wine (2%)</td> <td><strong>0.62 ± 0.05</strong></td><td>0.67 ± 0.05</td></tr>
+ <tr><td>wine (3%)</td> <td><strong>0.60 ± 0.04</strong></td><td>0.65 ± 0.05</td></tr>
+ <tr><td>wine (4%)</td> <td><strong>0.60 ± 0.05</strong></td><td>0.66 ± 0.04</td></tr>
+ <tr><td>wine (5%)</td> <td><strong>0.61 ± 0.04</strong></td><td>0.67 ± 0.04</td></tr>
+ <tr><td>wine (6%)</td> <td><strong>0.61 ± 0.03</strong></td><td>0.68 ± 0.03</td></tr>
+ <tr><td>wine (7%)</td> <td><strong>0.61 ± 0.03</strong></td><td>0.67 ± 0.03</td></tr>
+ <tr><td>wine (8%)</td> <td><strong>0.61 ± 0.03</strong></td><td>0.67 ± 0.04</td></tr>
+ <tr><td>wine (9%)</td> <td><strong>0.61 ± 0.03</strong></td><td>0.67 ± 0.04</td></tr>
+ </tbody>
+ </table>
+ <table latex-align="|l|cc|">
+ <caption id="results-laps3l-rrse">
+ Comparaison entre <emph>LapS3L</emph> et <emph>SSSL</emph>
+ sur <emph>wine</emph> et <emph>insurance</emph>, métrique
+ RRSE.
+ </caption>
+ <thead>
+ <tr><th>dataset</th> <th><strong>LapS3L</strong></th><th> <emph>SSSL</emph></th></tr>
+ </thead>
+ <tbody>
+ <tr><td>insurance (2%)</td><td><strong>0.71 ± 0.13</strong></td><td>1.04 ± 0.04</td></tr>
+ <tr><td>insurance (3%)</td><td><strong>0.86 ± 0.10</strong></td><td>1.03 ± 0.03</td></tr>
+ <tr><td>insurance (4%)</td><td><strong>0.91 ± 0.11</strong></td><td>1.02 ± 0.03</td></tr>
+ <tr><td>insurance (5%)</td><td><strong>0.95 ± 0.07</strong></td><td>1.01 ± 0.01</td></tr>
+ <tr><td>insurance (6%)</td><td><strong>0.96 ± 0.05</strong></td><td>1.00 ± 0.01</td></tr>
+ <tr><td>insurance (7%)</td><td><strong>0.99 ± 0.03</strong></td><td>1.00 ± 0.01</td></tr>
+ <tr><td>insurance (8%)</td><td><strong>0.97 ± 0.03</strong></td><td>1.00 ± 0.01</td></tr>
+ <tr><td>insurance (9%)</td><td><strong>0.99 ± 0.01</strong></td><td>1.00 ± 0.00</td></tr>
+ <tr><td>wine (2%)</td> <td><strong>0.92 ± 0.05</strong></td><td>0.97 ± 0.03</td></tr>
+ <tr><td>wine (3%)</td> <td><strong>0.90 ± 0.05</strong></td><td>0.96 ± 0.04</td></tr>
+ <tr><td>wine (4%)</td> <td><strong>0.90 ± 0.03</strong></td><td>0.96 ± 0.02</td></tr>
+ <tr><td>wine (5%)</td> <td><strong>0.90 ± 0.03</strong></td><td>0.96 ± 0.02</td></tr>
+ <tr><td>wine (6%)</td> <td><strong>0.89 ± 0.02</strong></td><td>0.96 ± 0.01</td></tr>
+ <tr><td>wine (7%)</td> <td><strong>0.89 ± 0.02</strong></td><td>0.96 ± 0.02</td></tr>
+ <tr><td>wine (8%)</td> <td><strong>0.88 ± 0.02</strong></td><td>0.96 ± 0.02</td></tr>
+ <tr><td>wine (9%)</td> <td><strong>0.88 ± 0.02</strong></td><td>0.96 ± 0.01</td></tr>
+ </tbody>
+ </table>
+ <table latex-align="|l|cc|">
+ <caption id="results-laps3l-rae">
+ Comparaison entre <emph>LapS3L</emph> et <emph>SSSL</emph>
+ sur <emph>wine</emph> et <emph>insurance</emph>, métrique
+ RAE.
+ </caption>
+ <thead>
+ <tr><th>dataset</th> <th><strong>LapS3L</strong></th><th> <emph>SSSL</emph></th></tr>
+ </thead>
+ <tbody>
+ <tr><td>insurance (2%)</td><td><strong>0.47 ± 0.17</strong></td><td>1.02 ± 0.02</td></tr>
+ <tr><td>insurance (3%)</td><td><strong>0.61 ± 0.25</strong></td><td>1.01 ± 0.02</td></tr>
+ <tr><td>insurance (4%)</td><td><strong>0.76 ± 0.28</strong></td><td>1.01 ± 0.02</td></tr>
+ <tr><td>insurance (5%)</td><td><strong>0.82 ± 0.25</strong></td><td>1.00 ± 0.02</td></tr>
+ <tr><td>insurance (6%)</td><td><strong>0.80 ± 0.25</strong></td><td>1.00 ± 0.01</td></tr>
+ <tr><td>insurance (7%)</td><td><strong>0.93 ± 0.15</strong></td><td>1.00 ± 0.01</td></tr>
+ <tr><td>insurance (8%)</td><td><strong>0.89 ± 0.20</strong></td><td>0.99 ± 0.01</td></tr>
+ <tr><td>insurance (9%)</td><td><strong>0.99 ± 0.01</strong></td><td>1.00 ± 0.02</td></tr>
+ <tr><td>wine (2%)</td> <td><strong>0.95 ± 0.07</strong></td><td>1.01 ± 0.03</td></tr>
+ <tr><td>wine (3%)</td> <td><strong>0.92 ± 0.07</strong></td><td>0.99 ± 0.03</td></tr>
+ <tr><td>wine (4%)</td> <td><strong>0.91 ± 0.06</strong></td><td>1.00 ± 0.03</td></tr>
+ <tr><td>wine (5%)</td> <td><strong>0.92 ± 0.05</strong></td><td>1.00 ± 0.03</td></tr>
+ <tr><td>wine (6%)</td> <td><strong>0.92 ± 0.04</strong></td><td>1.01 ± 0.02</td></tr>
+ <tr><td>wine (7%)</td> <td><strong>0.91 ± 0.03</strong></td><td>1.00 ± 0.03</td></tr>
+ <tr><td>wine (8%)</td> <td><strong>0.91 ± 0.04</strong></td><td>1.00 ± 0.03</td></tr>
+ <tr><td>wine (9%)</td> <td><strong>0.91 ± 0.03</strong></td><td>1.00 ± 0.03</td></tr>
+ </tbody>
+ </table>
+ <p>
+ Pour la métrique RMSE (table
+ <h:ref href="#results-laps3l-rmse"/>), <emph>LapS3L</emph>
+ et <emph>SSSL</emph> obtiennent une erreur de régression
+ inférieure à 0.244 (pour insurance) et 0.89 (pour wine), qui
+ étaient les lignes de base à dépasser. La métrique RMSE a été
+ utilisée pour le tuning des hyperparamètres, ce qui n'est pas le
+ cas pour la métrique MAE, dont la ligne de base n'est pas
+ toujours respectée.
+ </p>
+ <p>
+ Plus précisément, la table <h:ref href="#results-laps3l-mae"/>
+ montre que <emph>LapS3L</emph> reste inférieur à la ligne de
+ base pour wine (0.63), mais pas pour insurance
+ (0.06). <emph>SSSL</emph> ne respecte aucune de ces lignes de
+ base.
+ </p>
+ <p>
+ Sur les deux jeux de données, quel que soit le nombre
+ d'individus labellisés (entre 2% et 9% du total) et quelle que
+ soit la métrique envisagée, l'approche <emph>LapS3L</emph> donne
+ un meilleur résultat que l'approche <emph>SSSL</emph>. Ce n'est
+ pas surprenant, puisque <emph>LapS3L</emph> est une
+ généralisation de <emph>SSSL</emph>. Cela signifie en revanche
+ qu'un tuning à 10 points (respectivement 20) pour insurance
+ (respectivement wine) est suffisant pour explorer un espace de
+ recherche de la solution plus grand. Pour les métriques
+ relatives, l'écart-type est plus faible pour <emph>SSSL</emph>,
+ mais ce n'est pas très pertinent : en effet, pour les métriques
+ relatives, les deux approches tendent à donner un résultat
+ proche de 1. Par conséquent, <emph>LapS3L</emph> donnant parfois
+ une erreur de régression bien plus faible, obtient un écart-type
+ plus grand.
+ </p>
+ <p>
+ En regardant de plus près le jeu de
+ données <emph>insurance</emph>, on s'aperçoit que les
+ performances sont bonnes pour un petit nombre de données
+ labellisées (cf figure <h:ref href="#fig-rmse-insurance"/>). En
+ effet, les limites imposées pour le tuning ne permettent pas de
+ contrer le sur-apprentissage.
+ </p>
+ <figure>
+ <img src="images/insurance_rmse.svg" />
+ <figcaption id="fig-rmse-insurance">
+ Performance de <emph>LapS3L</emph> et <emph>SSSL</emph>
+ sur <emph>insurance</emph> (métrique RMSE)
+ </figcaption>
+ </figure>
+ <p>
+ La métrique MAE, toujours sur le jeu de
+ données <emph>insurance</emph>
+ (figure <h:ref href="#fig-mae-insurance"/>), montre une tendance
+ similaire pour <emph>LapS3L</emph>, mais pas
+ pour <emph>SSSL</emph>, ce qui justifie la pertinence de notre
+ approche.
+ </p>
+ <figure>
+ <img src="images/insurance_mae.svg" />
+ <figcaption id="fig-mae-insurance">
+ Performance de <emph>LapS3L</emph> et <emph>SSSL</emph>
+ sur <emph>insurance</emph> (métrique MAE)
+ </figcaption>
+ </figure>
+ <p>
+ Nous pouvons donc conclure que l'approche proposée, en tant que
+ généralisation stricte de <emph>SSSL</emph>, ne nécessite pas un
+ tuning plus précis pour donner de meilleures performances. Il
+ nous reste à vérifier si notre approche fonctionne hors des
+ hypothèses de fonctionnement de <emph>SSSL</emph>.
+ </p>
+ <h2>Étude comparative</h2>
+ <p>
+ Dans cette section, nous élargissons la comparaison des
+ performance à différents algorithmes sur d'autres jeux de
+ données publics divers.
+ </p>
+ <h3>Jeux de données</h3>
+ <p>
+ Nous utilisons les jeux de données publics suivants :
+ </p>
+ <ul>
+ <li>
+ <emph>Concrete Compressive Strength</emph>
+ (<emph>concrete</emph>)
+ <h:fn>
+ <a href="https://archive.ics.uci.edu/ml/datasets/Concrete+Compressive+Strength">
+ https://archive.ics.uci.edu/ml/datasets/Concrete+Compressive+Strength
+ </a>
+ </h:fn>
+ observe des échantillons de béton comparant leur composition
+ et leur âge, afin d'en déduire la pression de compression. Ce
+ jeu de données comprend 1030 échantillons pour 9
+ variables. Afin de pouvoir appliquer la fonction de noyau,
+ toutes les variables du jeu de données sont normalisées de
+ manière à avoir une moyenne nulle et un écart-type égal à 1 ;
+ </li>
+ <li>
+ <emph>Airfoil Self-Noise</emph>
+ (<emph>airfoil</emph>)
+ <h:fn>
+ <a href="https://archive.ics.uci.edu/ml/datasets/Airfoil+Self-Noise">
+ https://archive.ics.uci.edu/ml/datasets/Airfoil+Self-Noise
+ </a>
+ </h:fn>
+ observe des hélices, afin d'en déduire le niveau de bruit. Il
+ comprend 1503 observations pour 5 variables. Pour ce jeu de
+ données, toutes les variables ont été redimensionnées de
+ manière à obtenir une moyenne nulle et un écart-type égal à
+ 1 ;
+ </li>
+ <li>
+ <emph>Behavior of the urban traffic of the city of Sao Paulo in Brazil</emph>
+ (<emph>behavior</emph>)
+ <h:fn>
+ <a href="https://archive.ics.uci.edu/ml/datasets/Behavior+of+the+urban+traffic+of+the+city+of+Sao+Paulo+in+Brazil">
+ https://archive.ics.uci.edu/ml/datasets/Behavior+of+the+urban+traffic+of+the+city+of+Sao+Paulo+in+Brazil
+ </a>
+ </h:fn>
+ mesure le retard du réseau comme la réponse à divers
+ événements. Il ne comprend que 135 individus pour 18
+ variables ;
+ </li>
+ <li>
+ <emph>Communities and Crime Data Set</emph>
+ (<emph>crimepredict</emph>)
+ <h:fn>
+ <a href="https://archive.ics.uci.edu/ml/datasets/Communities+and+Crime">
+ https://archive.ics.uci.edu/ml/datasets/Communities+and+Crime
+ </a>
+ </h:fn>
+ mesure le nombre de crimes violents dans un certain nombre de
+ communes aux États-Unis. Il comprend 1994 individus pour 123
+ variables (en enlevant les variables d'index) décrivant les
+ communes, y compris leur démographie. Ce jeu de données a été
+ sélectionné parce qu'il contenait un nombre d'individus
+ suffisamment faible pour l'apprentissage, avec des variables
+ normalisées (ce qui permet d'appliquer directement une
+ fonction de noyau).
+ </li>
+ </ul>
+ <h3>Algorithmes</h3>
+ <p>
+ Dans la version non linéaire de
+ l'algorithme <emph>LapRLS</emph>, il s'agit de minimiser la
+ fonction objectif suivante :
+ </p>
+ <h:mini>
+ <h:variables>f \in \mathcal{H}_{\kappa}</h:variables>
+ <h:objective>
+ \left\|\hat {f_l} - {y_l}\right\|_2^2 + \alpha \left\|f\right\|_{\kappa}^2 + \beta \hat {f}' L \hat f
+ </h:objective>
+ </h:mini>
+ <p>
+ Ici, <h:eq>\mathcal{H}_{\kappa}</h:eq> désigne un espace de
+ Hilbert à noyau reproduisant. Dans cet espace, une
+ fonction <h:eq>f</h:eq> s'écrit de la façon suivante :
+ </p>
+ <h:equation>
+ x \mapsto \sum_{i = 1}^N \alpha_i \kappa (x_i, x)
+ </h:equation>
+ <p>
+ On note également <h:eq>\hat f</h:eq> l'application de la
+ fonction <h:eq>f</h:eq> sur le jeu d'apprentissage (<h:eq>\hat
+ {f_l}</h:eq> uniquement sur les individus labellisés). La
+ fonction objectif peut être résolue de manière analytique en
+ posant :
+ </p>
+ <h:equation>
+ \alpha \gets \left[JK + \alpha I + \beta LK\right]^{-1} J Y
+ </h:equation>
+ <p>
+ avec <h:eq>J</h:eq> la matrice diagonale de
+ dimension <h:eq>N,N</h:eq> dont la diagonale en <h:eq>(i,
+ i)</h:eq> vaut 1 si l'individu <h:eq>i</h:eq> est
+ labellisé, <h:eq>0</h:eq> sinon.
+ </p>
+ <p>
+ En plus de la version non linéaire de <emph>LapRLS</emph>, ainsi
+ que de <emph>SSSL</emph>, nous comparons avec une forêt
+ aléatoire (<emph>TB</emph> pour <emph>Tree Bagging</emph>
+ <h:cite href="ho1995random"/>) comprenant entre 1 et 1000
+ arbres, et l'algorithme <emph>ν-SVR</emph>
+ <h:cite href="nusvm"/>.
+ </p>
+ <p>
+ La comparaison de ces algorithmes sur les 4 jeux de données
+ donnent les résultats dans la table
+ <h:ref href="#tbl-laps3l-vs-the-world"/>.
+ </p>
+ <table latex-align="llllll">
+ <caption id="tbl-laps3l-vs-the-world">
+ Comparaison de <emph>LapS3L</emph> contre d’autres
+ algorithmes de régression, métrique RMSE
+ </caption>
+ <thead>
+ <tr>
+ <th>dataset</th>
+ <th><strong>LapS3L</strong></th>
+ <th><emph>LapRLS</emph></th>
+ <th><emph>SSSL</emph></th>
+ <th><emph>ν-SVR</emph></th>
+ <th><emph>TB</emph></th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>airfoil (2%)</td>
+ <td><strong>0.65 ± 0.09</strong></td>
+ <td>0.73 ± 0.11</td>
+ <td>0.70 ± 0.13</td>
+ <td>0.78 ± 0.09</td>
+ <td>0.74 ± 0.07</td>
+ </tr>
+ <tr>
+ <td>airfoil (3%)</td>
+ <td><strong>0.67 ± 0.08</strong></td>
+ <td>0.69 ± 0.11</td>
+ <td>0.75 ± 0.10</td>
+ <td>0.80 ± 0.11</td>
+ <td>0.75 ± 0.08</td>
+ </tr>
+ <tr>
+ <td>airfoil (4%)</td>
+ <td><strong>0.64 ± 0.09</strong></td>
+ <td>0.66 ± 0.10</td>
+ <td>0.71 ± 0.07</td>
+ <td>0.78 ± 0.10</td>
+ <td>0.68 ± 0.07</td>
+ </tr>
+ <tr>
+ <td>airfoil (5%)</td>
+ <td><strong>0.62 ± 0.08</strong></td>
+ <td>0.63 ± 0.09</td>
+ <td>0.72 ± 0.05</td>
+ <td>0.77 ± 0.06</td>
+ <td>0.68 ± 0.06</td>
+ </tr>
+ <tr>
+ <td>airfoil (6%)</td>
+ <td>0.63 ± 0.06</td>
+ <td><strong>0.62 ± 0.07</strong></td>
+ <td>0.72 ± 0.04</td>
+ <td>0.77 ± 0.05</td>
+ <td>0.66 ± 0.05</td>
+ </tr>
+ <tr>
+ <td>airfoil (7%)</td>
+ <td><strong>0.59 ± 0.05</strong></td>
+ <td>0.60 ± 0.06</td>
+ <td>0.71 ± 0.05</td>
+ <td>0.75 ± 0.04</td>
+ <td>0.64 ± 0.04</td>
+ </tr>
+ <tr>
+ <td>airfoil (8%)</td>
+ <td>0.59 ± 0.04</td>
+ <td><strong>0.57 ± 0.06</strong></td>
+ <td>0.70 ± 0.05</td>
+ <td>0.74 ± 0.03</td>
+ <td>0.61 ± 0.04</td>
+ </tr>
+ <tr>
+ <td>airfoil (9%)</td>
+ <td>0.57 ± 0.03</td>
+ <td><strong>0.55 ± 0.05</strong></td>
+ <td>0.70 ± 0.05</td>
+ <td>0.73 ± 0.03</td>
+ <td>0.58 ± 0.03</td>
+ </tr>
+ <tr>
+ <td>behavior (2%)</td>
+ <td><strong>4.15 ± 2.73</strong></td>
+ <td>5.04 ± 2.58</td>
+ <td><emph>erreur</emph></td>
+ <td><emph>erreur</emph></td>
+ <td>5.26 ± 3.59</td>
+ </tr>
+ <tr>
+ <td>behavior (3%)</td>
+ <td><strong>2.64 ± 1.56</strong></td>
+ <td>3.84 ± 1.76</td>
+ <td>3.64 ± 3.68</td>
+ <td>3.08 ± 1.74</td>
+ <td>3.26 ± 1.81</td>
+ </tr>
+ <tr>
+ <td>behavior (4%)</td>
+ <td><strong>2.42 ± 0.82</strong></td>
+ <td>3.60 ± 1.48</td>
+ <td>3.98 ± 2.91</td>
+ <td>3.14 ± 0.97</td>
+ <td>3.09 ± 1.21</td>
+ </tr>
+ <tr>
+ <td>behavior (5%)</td>
+ <td><strong>2.48 ± 0.61</strong></td>
+ <td>3.39 ± 1.03</td>
+ <td>3.83 ± 2.25</td>
+ <td>2.61 ± 0.67</td>
+ <td>3.00 ± 0.92</td>
+ </tr>
+ <tr>
+ <td>behavior (6%)</td>
+ <td><strong>2.58 ± 0.74</strong></td>
+ <td>3.66 ± 0.60</td>
+ <td>3.64 ± 1.75</td>
+ <td>2.72 ± 0.53</td>
+ <td>3.06 ± 0.76</td>
+ </tr>
+ <tr>
+ <td>behavior (7%)</td>
+ <td><strong>2.49 ± 0.97</strong></td>
+ <td>3.52 ± 0.76</td>
+ <td>3.05 ± 1.19</td>
+ <td>2.76 ± 0.96</td>
+ <td>2.93 ± 0.88</td>
+ </tr>
+ <tr>
+ <td>behavior (8%)</td>
+ <td><strong>2.57 ± 0.83</strong></td>
+ <td>3.32 ± 0.68</td>
+ <td>3.13 ± 0.77</td>
+ <td>2.77 ± 0.87</td>
+ <td>2.79 ± 0.69</td>
+ </tr>
+ <tr>
+ <td>behavior (9%)</td>
+ <td><strong>2.55 ± 0.73</strong></td>
+ <td>3.35 ± 0.60</td>
+ <td>2.69 ± 0.81</td>
+ <td>2.61 ± 0.87</td>
+ <td>2.78 ± 0.52</td>
+ </tr>
+ <tr>
+ <td>concrete (2%)</td>
+ <td><strong>0.49 ± 0.12</strong></td>
+ <td>0.60 ± 0.14</td>
+ <td>0.60 ± 0.17</td>
+ <td>0.60 ± 0.10</td>
+ <td>0.61 ± 0.13</td>
+ </tr>
+ <tr>
+ <td>concrete (3%)</td>
+ <td><strong>0.46 ± 0.09</strong></td>
+ <td>0.57 ± 0.11</td>
+ <td>0.58 ± 0.14</td>
+ <td>0.59 ± 0.10</td>
+ <td>0.62 ± 0.10</td>
+ </tr>
+ <tr>
+ <td>concrete (4%)</td>
+ <td><strong>0.46 ± 0.12</strong></td>
+ <td>0.58 ± 0.12</td>
+ <td>0.53 ± 0.14</td>
+ <td>0.56 ± 0.12</td>
+ <td>0.61 ± 0.11</td>
+ </tr>
+ <tr>
+ <td>concrete (5%)</td>
+ <td><strong>0.49 ± 0.11</strong></td>
+ <td>0.59 ± 0.12</td>
+ <td>0.55 ± 0.13</td>
+ <td>0.56 ± 0.09</td>
+ <td>0.62 ± 0.10</td>
+ </tr>
+ <tr>
+ <td>concrete (6%)</td>
+ <td><strong>0.48 ± 0.08</strong></td>
+ <td>0.53 ± 0.09</td>
+ <td>0.53 ± 0.10</td>
+ <td>0.53 ± 0.08</td>
+ <td>0.59 ± 0.11</td>
+ </tr>
+ <tr>
+ <td>concrete (7%)</td>
+ <td><strong>0.47 ± 0.07</strong></td>
+ <td>0.52 ± 0.10</td>
+ <td>0.50 ± 0.09</td>
+ <td>0.51 ± 0.08</td>
+ <td>0.58 ± 0.09</td>
+ </tr>
+ <tr>
+ <td>concrete (8%)</td>
+ <td><strong>0.45 ± 0.07</strong></td>
+ <td>0.53 ± 0.09</td>
+ <td>0.47 ± 0.09</td>
+ <td>0.48 ± 0.06</td>
+ <td>0.55 ± 0.08</td>
+ </tr>
+ <tr>
+ <td>concrete (9%)</td>
+ <td><strong>0.43 ± 0.06</strong></td>
+ <td>0.47 ± 0.07</td>
+ <td>0.47 ± 0.07</td>
+ <td>0.47 ± 0.05</td>
+ <td>0.54 ± 0.07</td>
+ </tr>
+ <tr>
+ <td>crimepredict (2%)</td>
+ <td><strong>0.15 ± 0.02</strong></td>
+ <td>0.18 ± 0.03</td>
+ <td>0.15 ± 0.03</td>
+ <td>0.16 ± 0.02</td>
+ <td>0.15 ± 0.02</td>
+ </tr>
+ <tr>
+ <td>crimepredict (3%)</td>
+ <td><strong>0.15 ± 0.03</strong></td>
+ <td>0.17 ± 0.03</td>
+ <td>0.15 ± 0.03</td>
+ <td>0.16 ± 0.04</td>
+ <td>0.15 ± 0.02</td>
+ </tr>
+ <tr>
+ <td>crimepredict (4%)</td>
+ <td><strong>0.14 ± 0.02</strong></td>
+ <td>0.16 ± 0.02</td>
+ <td>0.14 ± 0.02</td>
+ <td>0.16 ± 0.03</td>
+ <td>0.14 ± 0.01</td>
+ </tr>
+ <tr>
+ <td>crimepredict (5%)</td>
+ <td><strong>0.14 ± 0.02</strong></td>
+ <td>0.17 ± 0.02</td>
+ <td>0.15 ± 0.02</td>
+ <td>0.17 ± 0.02</td>
+ <td>0.15 ± 0.02</td>
+ </tr>
+ <tr>
+ <td>crimepredict (6%)</td>
+ <td><strong>0.15 ± 0.01</strong></td>
+ <td>0.17 ± 0.01</td>
+ <td>0.15 ± 0.01</td>
+ <td>0.17 ± 0.02</td>
+ <td>0.15 ± 0.01</td>
+ </tr>
+ <tr>
+ <td>crimepredict (7%)</td>
+ <td><strong>0.14 ± 0.01</strong></td>
+ <td>0.17 ± 0.01</td>
+ <td>0.15 ± 0.01</td>
+ <td>0.17 ± 0.02</td>
+ <td>0.15 ± 0.01</td>
+ </tr>
+ <tr>
+ <td>crimepredict (8%)</td>
+ <td><strong>0.14 ± 0.01</strong></td>
+ <td>0.17 ± 0.01</td>
+ <td>0.14 ± 0.01</td>
+ <td>0.16 ± 0.02</td>
+ <td>0.14 ± 0.00</td>
+ </tr>
+ <tr>
+ <td>crimepredict (9%)</td>
+ <td><strong>0.14 ± 0.01</strong></td>
+ <td>0.16 ± 0.01</td>
+ <td>0.14 ± 0.01</td>
+ <td>0.16 ± 0.02</td>
+ <td>0.14 ± 0.01</td>
+ </tr>
+ </tbody>
+ </table>
+ <p>
+ L'approche <emph>LapS3L</emph> donne de meilleurs résultats sur
+ les jeux de données <emph>behavior</emph>, <emph>concrete</emph>
+ et <emph>crimepredict</emph>. Seul le jeu de
+ données <emph>airfoil</emph> est partagé
+ entre <emph>LapS3L</emph> et <emph>LapRLS</emph>. Notons que le
+ jeu de données <emph>behavior</emph>, qui comporte un très
+ faible nombre d'individus, ne permet pas d'obtenir suffisamment
+ de vecteurs supports pour le ν-SVR en ne conservant que 2% des
+ labels, et ne permet pas à l'algorithme <emph>SSSL</emph> de
+ trouver une solution, puisque la matrice de covariance est
+ toujours trop faible.
+ </p>
+ <h2>Application aux données de réseau d’assainissement</h2>
+ <p>
+ Dans cette section, nous utilisons un jeu de données dont le but
+ est la reconstitution de l'âge des canalisations des réseaux
+ d'assainissement de la ville de Lyon. L'inspection des
+ canalisations est une tâche complexe, et étant donné le faible
+ nombre de canalisations inspectées chaque année, il est
+ nécessaire de privilégier l'inspection des canalisations les
+ plus dégradées.
+ </p>
+ <p>
+ Pour savoir quelles canalisations sont dégradées, il est
+ nécessaire d'en connaître la date de pose
+ <h:cite href="davies2001factors,ahmadi_2014_influence,harvey2014predicting"/>,
+ qui indique l'âge et les techniques employées (celles-ci ont
+ évolué au cours du dernier siècle).
+ </p>
+ <p>
+ Parmi les 85766 canalisations recensées, 24% seulement ont une
+ date de pose connue. Le jeu de données est composé de 4
+ variables catégorielles (forme, matériau, type d'effluent, et si
+ la canalisation fait partie du réseau structurant), et 3
+ variables continues (largeur, hauteur, longueur).
+ </p>
+ <h3>Pré-traitement des données</h3>
+ <p>
+ D'après les registres de pose, il y a toujours eu chaque année
+ une quantité comparable de canalisations posées, si l'on exclut
+ les périodes de guerre. En revanche, les informations
+ historiques qui nous sont parvenues ne nous permettent de
+ connaître principalement que les dates de pose des canalisations
+ récentes (voir figure <h:ref href="#fig-hireaugramme" />). Le
+ réseau ne s'est pas construit uniquement à partir de 1975 ; les
+ dates de pose des canalisations anciennes (qui sont l'objectif
+ principal de l'application) sont majoritairement inconnues.
+ </p>
+ <figure>
+ <img src="images/hireaugramme.png" />
+ <figcaption id="fig-hireaugramme">
+ Histogramme montrant la répartition des dates de pose des
+ canalisations connues.
+ </figcaption>
+ </figure>
+ <p>
+ En effectuant un apprentissage sur ces données, les
+ canalisations anciennes sont majoritairement ignorées ou
+ considérées comme des observations anormales. Or, ce sont
+ précisément ces canalisations dont on veut connaître la date de
+ pose.
+ </p>
+ <p>
+ Nous avons donc ré-échantillonné le jeu de données, afin de
+ sélectionner 2000 conduites dont la date de pose suit une loi
+ uniforme (en sachant qu'il existe des périodes entières pendant
+ lesquelles aucune canalisation n'est connue ; la canalisation
+ est donc tirée au bord de ces périodes), et 2000 canalisations
+ parmi tout l'ensemble de données pour le jeu de données non
+ labellisé.
+ </p>
+ <h3>Résultats</h3>
+ <p>
+ La métrique évaluée est la RMSE. Les trois algorithmes comparés
+ sont <emph>LapS3L</emph>, <emph>SSSL</emph>
+ et <emph>LapRLS</emph> (non-linéaire). L'erreur de régression en
+ année est donnée par la table <h:ref href="#tbl-hireau"/>. Notre
+ approche donne une erreur de régression plus faible.
+ </p>
+ <table latex-align="ccc">
+ <caption id="tbl-hireau">
+ Métrique RMSE pour le jeu de données d'assainissement en
+ années pour
+ <emph>LapS3L</emph>,
+ <emph>SSSL</emph>,
+ <emph>LapRLS</emph>
+ </caption>
+ <thead>
+ <tr>
+ <th><strong>LapS3L</strong></th>
+ <th><emph>SSSL</emph></th>
+ <th><emph>LapRLS</emph></th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>8.69</td>
+ <td>10.03</td>
+ <td>13.70</td>
+ </tr>
+ </tbody>
+ </table>
+ <p>
+ L'évolution de la performance de l'algorithme en fonction du
+ nombre de composantes <h:eq>s</h:eq> (figure
+ <h:ref href="#fig-hireau-s"/>) montre qu'il est nécessaire de
+ conserver un grand nombre de composantes pour un bon
+ fonctionnement de l'algorithme. C'est un avantage
+ de <emph>LapS3L</emph>, puisque lorsque le nombre de composantes
+ extraites est supérieur au rang de la matrice de covariance,
+ <emph>SSSL</emph> ne donne pas de solution, alors que la
+ régularisation effectuée par <emph>LapS3L</emph> le permet.
+ </p>
+ <p>
+ L'erreur de régression de <emph>LapRLS</emph> est une constante,
+ puisqu'elle ne dépend pas du nombre de composantes. L'erreur de
+ régression pour <emph>SSSL</emph> diminue jusqu'à atteindre son
+ minimum pour 100 composantes principales, puis elle monte très
+ abruptement. L'erreur de régression de <emph>LapS3L</emph> suit
+ celle de <emph>SSSL</emph>, remonte moins abruptement entre 100
+ et 200 composantes, puis baisse à nouveau jusqu'à 2000
+ composantes, en atteignant le minimum pour les trois
+ algorithmes, après quoi elle augmente elle aussi très
+ abruptement.
+ </p>
+ <figure>
+ <img src="images/hireau-s.png" />
+ <figcaption id="fig-hireau-s">
+ Évolution de la performance
+ de <emph>LapS3L</emph>, <emph>SSSL</emph>,
+ et <emph>LapRLS</emph>, en fonction du nombre de composantes
+ sélectionnées (en échelle logarithmique)
+ </figcaption>
+ </figure>
+ <h2>Conclusion</h2>
+ <p>
+ Nous avons proposé un algorithme de régression semi-supervisé,
+ <emph>LapS3L</emph>, comme une extension stricte de
+ l'algorithme <emph>SSSL</emph>. Par conséquent, au prix
+ d'un <emph>tuning</emph> plus précis, <emph>LapS3L</emph> a
+ donné de meilleures performances que son concurrent. Nous avons
+ montré expérimentalement que pour un tuning de même complexité
+ pour <emph>SSSL</emph> et <emph>LapS3L</emph>, <emph>LapS3L</emph>
+ donne une plus faible erreur de régression sur les deux jeux de
+ données publics utilisés dans l'article d'origine
+ de <emph>SSSL</emph>. Nous avons montré également que
+ <emph>LapS3L</emph> est compétitif sur d'autres jeux de données
+ de régression. Enfin, nous avons montré expérimentalement
+ l'importance de la régularisation employée dans un cas
+ d'application réelle.
+ </p>
+ <h1 short="LSMR">Régression semi-supervisée multi-labels : une approche régularisée</h1>
+ <h:résumé-chapitre>
+ <p>
+ Dans ce chapitre, nous reprenons le travail décrit dans le
+ chapitre précédent, pour l'étendre dans le cadre de
+ l'apprentissage multi-labels. Nous menons également une étude
+ expérimentale détaillée sur des jeux de données publics
+ spécifiques.
+ </p>
+ <p>
+ L'idée de cette extension consiste à modifier la
+ régularisation employée. En effet, il est possible d'employer
+ des régularisations multi-labels, or la régularisation
+ employée pour <emph>LapS3L</emph> ne l'est pas.
+ </p>
+ </h:résumé-chapitre>
+ <h2>Introduction</h2>
+ <p>
+ L'un des défis principaux de l'apprentissage automatique moderne
+ consiste à apprendre à partir de données labellisées à la main
+ ainsi que de données non labellisées, qui sont généralement plus
+ faciles à obtenir. L'apprentissage faiblement labellisé
+ <h:cite href="li_convex_2013"/>, et plus particulièrement
+ l'apprentissage semi-supervisé
+ <h:cite href="chapelle_semi-supervised_2006,zhu_semi-supervised_nodate"/>,
+ abordent ce défi en utilisant soit des approches de propagation
+ de labels pour suppléer des méthodes supervisées
+ <h:cite href="zhu_semi-supervised_nodate,zhao_learning_2015"/>,
+ ou utilisent l'information des labels comme contraintes pour des
+ méthodes non supervisées
+ <h:cite href="basu_constrained_2009,zhang2012trace"/>.
+ </p>
+ <p>
+ De nombreuses méthodes semi-supervisées fondées sur des méthodes
+ supervisées ont été proposées. Par exemple, on retrouve des
+ adaptations telles que le <emph>self-training</emph>
+ <h:cite href="selftraining"/> ou <emph>co-training</emph>
+ <h:cite href="blum_combining_1998,zhou_semi-supervised_2005"/>,
+ des cas d'apprentissage <emph>transductif</emph>
+ <h:cite href="joachims1999transductive,bennett1999semi"/>, ou
+ des méthodes génératives <h:cite href="nigam2000text"/>.
+ </p>
+ <p>
+ Dans le cas particulier de la régression, avec une prédiction
+ numérique, des applications spécifiques sont proposées
+ <h:cite href="azriel_semi-supervised_2016,ryan_semi-supervised_2015"/>,
+ et on retrouve principalement des approches fondées sur
+ l'apprentissage de représentation de l'espace
+ <h:cite href="ji_simple_2012"/> ou utilisant un graphe entre
+ individus tenant compte de la similarité
+ <h:cite href="moscovich_minimax-optimal_nodate"/>, avec une
+ insistance particulière sur la régularisation Laplacienne
+ <h:cite href="cai_semi-supervised_2006,belkin_manifold_2006"/>.
+ </p>
+ <p>
+ De plus, l'apprentissage multi-labels vise à exploiter les
+ relations entre <emph>labels</emph> pour apporter plus
+ d'information à la tâche d'apprentissage. Des travaux théoriques
+ ont été proposés <h:cite href="gasse_optimality_2015"/>, et de
+ nombreuses méthodes multi-labels ont été proposées
+ <h:cite href="borchani_survey_2015,spyromitros_xioufis_multi_target_2016"/>. Certaines
+ stratégies transforment un problème multi-labels en plusieurs
+ problèmes mono-label
+ <h:cite href="read2011classifier,liu_easy--hard_2017"/>, et il
+ est parfois possible d'étendre directement le problème au cadre
+ multi-labels, comme pour les processus gaussiens
+ <h:cite href="yu_learning_2005" />.
+ </p>
+ <p>
+ De nombreux algorithmes d'apprentissage multi-labels minimisent
+ une fonction objectif régularisée. Ce peut être avec une
+ régularisation non-convexe <h:cite href="msmtfl,l21m2"/>, mais
+ les approches convexes sont plus fréquentes, avec l'adaptation
+ de l'algorithme LASSO <h:cite href="tibshirani1996regression"/>
+ au cadre multi-labels
+ <h:cite href="argyriou_multitask_nodate,mifs"/>, ou le
+ <emph>Clustered Multik-Task Learning</emph>
+ <h:cite href="cmtl"/>, ou d'autres approches d'apprentissage de
+ représentation de l'espace des labels
+ <h:cite href="chen_feature-aware_2012,luo_adaptive_2017"/>.
+ </p>
+ <p>
+ Pour l'apprentissage de régression, les méthodes spécifiques
+ sont plus rares. Il est d'usage de modifier la fonction objectif
+ pour utiliser des labels à valeurs réelles
+ <h:cite href="malsar"/>.
+ </p>
+ <h2>Travaux liés</h2>
+ <p>
+ Pour l'apprentissage de régression mono-label, nous avons
+ démontré l'intérêt d'utiliser une version régularisée de
+ l'algorithme <emph>SSSL</emph> <h:cite href="ji_simple_2012"/>
+ grâce à la régularisation Laplacienne. La caractéristique
+ principale de cette famille d'algorithmes réside dans leur
+ fonctionnement en deux étapes, qui permettent dans un premier
+ temps de faire un changement d'espace <emph>non-supervisé</emph>
+ propice à l'apprentissage de régression de certains jeux de
+ données, puis d'adopter une <emph>régression linéaire</emph>
+ dans ce nouvel espace.
+ </p>
+ <p>
+ Pour rappel, l'utilisation de la régularisation Laplacienne dans
+ le nouvel espace permet de lier les deux espaces de description
+ des individus, dans le but de satisfaire l'hypothèse suivante :
+ </p>
+ <blockquote>
+ Si deux individus sont proches dans l'espace réel, alors l'écart
+ de prédiction doit être faible.
+ </blockquote>
+ <p>
+ Nous avons montré expérimentalement que la complexité
+ supplémentaire due à l'introduction de cette régularisation ne
+ nécessite pas de procédure de tuning plus complexe.
+ </p>
+ <p>
+ Comme évoqué ci-dessus, il est aussi possible d'utiliser la
+ régression Laplacienne pour traiter le problème d'apprentissage
+ multi-labels <h:cite href="malsar"/>. Dans cette approche, on
+ construit un graphe des labels, et il s'agit de régulariser le
+ modèle de façon à introduire l'hypothèse suivante :
+ </p>
+ <blockquote>
+ Si deux labels sont similaires, les valeurs du modèle pour ces
+ deux labels doivent être similaires.
+ </blockquote>
+ <h2>Approche proposée : <emph>LSMR</emph></h2>
+ <h3>Notations</h3>
+ <p>
+ Les individus sont décrits dans l'espace des variables supposé
+ être de
+ dimension <h:eq>d</h:eq>, <h:eq>\mathbb{R}^{d}</h:eq>. L'ensemble
+ des labels est de dimension <h:eq>m</h:eq>. Étant donné que le
+ problème est celui de la régression, cet espace est décrit
+ dans <h:eq>\mathbb{R}^{m}</h:eq>.
+ </p>
+ <p>
+ Notons <h:eq>\mathcal{V} \in \mathbb{R}^{N, d}</h:eq> la matrice
+ de données, dont les lignes correspondent aux individus. On note
+ <h:eq>n_l</h:eq> le nombre d'individus labellisés au total.
+ </p>
+ <p>
+ Associée à cette matrice de données, la matrice de labels de
+ régression <h:eq>Y \in \mathbb{R}^{N, m}</h:eq> contient une
+ ligne par individu ; seules les lignes correspondant aux
+ individus labellisés sont renseignées. On suppose que tous les
+ labels sont manquants simultanément : si un individu est
+ labellisé, les valeurs de tous les labels sont
+ renseignés. Sinon, aucune valeur n'est renseignée.
+ </p>
+ <h3>Première étape : changement d’espace</h3>
+ <p>
+ Comme pour l'algorithme <emph>SSSL</emph>
+ et <emph>LapS3L</emph>, une première étape consiste à choisir
+ une fonction noyau symétrique, <h:eq>\kappa \colon \mathbb{R}^d
+ \times \mathbb{R}^d \to \mathbb{R}</h:eq>, et à construire la
+ matrice noyau entre tous les individus de l'ensemble
+ d'apprentissage :
+ </p>
+ <h:equation>
+ \forall i, j \in \{1, ..., N\}, \quad K_{i, j} = \kappa (\mathcal{V}_{i, .}, \mathcal{V}_{j, .})
+ </h:equation>
+ <p>
+ <h:eq>K</h:eq> étant une matrice symétrique réelle, on peut en
+ extraire les <h:eq>s</h:eq> valeurs propres réelles les plus
+ élevées, pour <h:eq>s \leq N</h:eq>, et les vecteurs propres
+ associés. Ces derniers forment une matrice <h:eq>U \in
+ \mathbb{R}^{N,s}</h:eq>, dont les colonnes sont de norme
+ unitaire, où chaque ligne correspond à un individu de l'ensemble
+ d'apprentissage. Étant donné que l'on n'utilise pas la matrice
+ de labels, cette première étape est non supervisée.
+ </p>
+ <p>
+ Le changement d'espace s'obtient en posant :
+ </p>
+ <h:equation>
+ X \gets K U
+ </h:equation>
+ <p>
+ La matrice <h:eq>X</h:eq> comprend donc une ligne par individu,
+ et nous pouvons en extraire la sous-matrice correspondant aux
+ individus labellisés comme <h:eq>X_l \in \mathbb{R}^{n,
+ s}</h:eq>.
+ </p>
+ <h3>Régularisation semi-supervisée multi-labels</h3>
+ <p>
+ En reprenant l'algorithme <emph>LapS3L</emph>, la régression
+ semi-supervisée qui définit la seconde étape de l'algorithme
+ utilise deux termes de régularisation :
+ </p>
+ <ul>
+ <li>une régularisation <emph>Laplacienne</emph>,</li>
+ <li>une régularisation <emph>Ridge</emph>, qui pénalise la
+ complexité du modèle.</li>
+ </ul>
+ <p>
+ Nous proposons de remplacer le terme de
+ régularisation <emph>Ridge</emph> en régularisation Laplacienne
+ multi-labels. Ainsi, en définissant le graphe des labels par la
+ matrice d'adjacence <h:eq>M_m \in \mathbb{R}^{m, m}</h:eq>, et
+ le graphe des individus par la matrice d'adjacence <h:eq>M_s \in
+ \mathbb{R}^{N, N}</h:eq>, le terme à pénaliser devient :
+ </p>
+ <h:mini id="lsmr-regu">
+ <h:variables>W \in \mathbb{R}^{d, m}</h:variables>
+ <h:objective>
+ \left\|X_l W - Y_l\right\|_F^2 + \alpha \mathrm{tr} (W'X'L_sXW) + \beta \mathrm{tr} (W L_m W')
+ </h:objective>
+ </h:mini>
+ <p>
+ où :
+ </p>
+ <ul>
+ <li>
+ <h:eq>\alpha</h:eq> est le régulariseur semi-supervisé ;
+ </li>
+ <li>
+ <h:eq>\beta</h:eq> est le régulariseur multi-labels ;
+ </li>
+ <li>
+ <h:eq>L_s</h:eq> est la matrice Laplacienne du graphe des
+ individus,
+
+ <h:equation-x>L_s = D_s - M_s</h:equation-x>
+
+ avec <h:eq>D_s</h:eq> la matrice de degré du graphe des
+ individus,
+
+ <h:equation-x>
+ \forall i \in \{1, ..., N\}, \quad {D_s} (i, i) = \sum_{j = 1}^N {M_s} (i, j)
+ </h:equation-x>
+ </li>
+ <li>
+ <h:eq>L_m</h:eq> est la matrice Laplacienne du graphe des labels,
+
+ <h:equation-x>L_m = D_m - M_m</h:equation-x>
+
+ avec <h:eq>D_m</h:eq> la matrice de degré du graphe des labels,
+
+ <h:equation-x>
+ \forall k \in \{1, ..., m\}, \quad {D_m} (k, k) = \sum_{l = 1}^m {M_m} (k, l)
+ </h:equation-x>
+ </li>
+ </ul>
+ <p>
+ La pénalisation est rendue explicite sur des exemples figure
+ <h:ref href="#fig-bothsemimulti"/>. En haut, le graphe est
+ construit à partir de 4 individus ; la proximité dans l'espace
+ des variables est indiquée par une arête. En bas, le graphe est
+ construit à partir de 3 labels ; une arête relie deux labels
+ ayant souvent des valeurs similaires sur beaucoup
+ d'individus. Pour l'apprentissage semi-supervisé, en haut, les
+ labels sont considérés de manière indépendante. On note à
+ l'intérieur du cercle la valeur prédite par le modèle pour un
+ label. Pour l'apprentissage multi-labels, en bas, chaque label a
+ un modèle linéaire, dont les poids sont représentés sur une
+ colonne. La valeur de chaque poids du modèle est représentée par
+ une couleur différente. Dans la partie gauche de la figure, la
+ pénalisation est faible, puisque le modèle donne des valeurs
+ similaires aux individus liés (en haut) et les modèles sont
+ similaires pour des labels reliés (en bas). À droite, la
+ pénalisation est plus forte.
+ </p>
+ <figure>
+ <img src="images/bothsemimulti.svg" />
+ <figcaption id="fig-bothsemimulti">
+ Exemples de pénalisation pour l'apprentissage semi-supervisé
+ (en haut) et l'apprentissage multi-labels (en bas)
+ </figcaption>
+ </figure>
+ <p>
+ Dans la suite, nous appellerons la modification
+ proposée <emph>LSMR</emph>, pour <emph>Laplacian-regularized
+ Simple algorithm for Semi-supervised multi-labels
+ Regression</emph>. La modification proposée de l'algorithme
+ <emph>LapS3L</emph> consiste toujours en une extension de
+ l'algorithme <emph>SSSL</emph>, mais sa différence
+ avec <emph>LapS3L</emph> réside dans un autre choix pour la
+ régularisation Ridge.
+ </p>
+ <h2>Algorithme d’optimisation</h2>
+ <p>
+ La fonction objectif employée dans
+ l'algorithme <emph>LapS3L</emph> admet une solution analytique,
+ qui permet d'obtenir la valeur du modèle <h:eq>W</h:eq> grâce à
+ une résolution d'un système linéaire de dimension <h:eq>s \times
+ s</h:eq>. Malheureusement, on ne peut pas l'appliquer
+ directement pour <emph>LSMR</emph>, à moins d'avoir à résoudre
+ <h:eq>m^2</h:eq> systèmes linéaire distincts. Cette limitation
+ est commune à beaucoup de méthodes de régularisation
+ multi-labels, ce qui pousse les méthodes de MALSAR à adopter une
+ méthode d'optimisation différente.
+ </p>
+ <h3>Descente de gradient</h3>
+ <p>
+ La fonction objectif obtenue dans <h:ref href="#lsmr-regu"/>
+ présente les caractéristiques suivantes :
+ </p>
+ <ul>
+ <li>
+ la variable d'optimisation, <h:eq>W</h:eq>, est réelle ;
+ </li>
+ <li>
+ la fonction objectif est convexe, si les arêtes des matrices
+ d'adjacence des graphes des individus et des labels sont à
+ poids positifs ;
+ </li>
+ <li>la fonction objectif est lisse.</li>
+ </ul>
+ <p>
+ Par conséquent, le problème peut être résolu par descente de
+ gradient, dont le calcul est donné par
+ <h:eqref href="#lsmr-gradient"/>.
+ </p>
+ <h:equation id="lsmr-gradient">
+ 2 \left[X_l' X_l + \alpha X' L_s X\right] W - 2 X_l' Y_l + 2 \beta W L_m
+ </h:equation>
+ <h3>Pas d’apprentissage</h3>
+ <p>
+ L'algorithme de descente du gradient produit des itérations de
+ descente de l'erreur d'apprentissage jusqu'à convergence de la
+ variable d'optimisation. Chaque itération consiste à calculer la
+ valeur du gradient au point donné pour la valeur courante de la
+ variable d'optimisation, <h:eq>\nabla_W</h:eq> (selon
+ <h:eqref href="#lsmr-gradient"/>), puis poser :
+ </p>
+ <h:equation>
+ W \gets W - \eta \nabla_W
+ </h:equation>
+ <p>
+ où <h:eq>\eta</h:eq> est le <emph>pas d'apprentissage</emph>.
+ Dans notre cas, le gradient <h:ref href="#lsmr-gradient"/> est
+ une fonction Lipschitzienne : pour deux valeurs quelconques du
+ modèle, <h:eq>P, Q \in \mathbb{R}^{s, m}</h:eq>,
+ </p>
+ <h:equation>
+ \left\|\nabla_W (P) - \nabla_W (Q)\right\|_F^2 \leq C \left\|P - Q\right\|_F^2
+ </h:equation>
+ <p>
+ avec :
+ </p>
+ <h:equation>
+ C = 2 \left(\rho \left(X_l' X_l + \alpha X'L_sX\right) + \beta \rho (L_m)\right)
+ </h:equation>
+ <p>
+ Pour toute matrice <h:eq>M</h:eq> symétrique réelle, <h:eq>\rho
+ (M)</h:eq> désigne le rayon spectral de <h:eq>M</h:eq>,
+ c'est-à-dire sa plus grande valeur propre. En posant :
+ </p>
+ <h:equation>
+ \eta \gets \frac 1 C
+ </h:equation>
+ <p>
+ La convergence de l'algorithme de descente de gradient est
+ assurée <h:cite href="agd" />.
+ </p>
+ <h3>Initialisation du modèle</h3>
+ <p>
+ Le modèle <h:eq>W \in \mathbb{R}^{s, m}</h:eq> est initialisé
+ comme la solution du problème de régression linéaire, avec un
+ terme de régularisation Ridge utilisant une valeur de
+ régulariseur faible.
+ </p>
+ <h:equation>
+ W \gets \left[X_l' X_l + \epsilon I_s\right]^{-1} X_l' Y_l
+ </h:equation>
+ <p>
+ avec <h:eq>\epsilon</h:eq> faible (pour l'implémentation, nous
+ avons retenu <h:eq>\epsilon = 10^{-6}</h:eq>), et <h:eq>I_s \in
+ \mathbb{R}^{s, s}</h:eq> la matrice identité en
+ dimension <h:eq>s</h:eq>.
+ </p>
+ <h3>Descente de gradient accélérée</h3>
+ <p>
+ L'algorithme de descente de gradient accélérée
+ <h:cite href="agd"/> est une amélioration de l'algorithme de
+ descente de gradient originale qui propose une convergence plus
+ rapide. Pour notre application, l'algorithme d'optimisation est
+ résumé dans l'algorithme
+ <h:ref href="#algorithme-lsmr-train"/>. La prédiction s'effectue
+ ainsi avec l'algorithme
+ <h:ref href="#algorithme-lsmr-predict"/>, qui est simplement la
+ version multi-labels de l'algorithme de prédiction de
+ l’algorithme <emph>LapS3L</emph> développé dans le chapitre
+ précédent, en remplaçant le modèle de dimension <h:eq>s</h:eq>
+ par un modèle de dimension <h:eq>s \times m</h:eq>.
+ </p>
+ <h:algorithm id="algorithme-lsmr-train">
+ <alg:algorithmic>
+ <alg:donnée><h:eq>\mathcal{V} \in \mathbb{R}^{N, d}</h:eq></alg:donnée>
+ <alg:donnée><h:eq>Y \in \mathbb{R}^{n_l, m}</h:eq></alg:donnée>
+ <alg:hyperparamètre><h:eq>s \in \{1, ..., N\}</h:eq></alg:hyperparamètre>
+ <alg:hyperparamètre><h:eq>\kappa \colon \mathcal{X} \times \mathcal{X} \to \mathbb{R}</h:eq></alg:hyperparamètre>
+ <alg:hyperparamètre>matrice Laplacienne du graphe des individus, <h:eq>L_s \in \mathbb{R}^{N, N}</h:eq></alg:hyperparamètre>
+ <alg:hyperparamètre>matrice Laplacienne du graphe des labels, <h:eq>L_m \in \mathbb{R}^{m, m}</h:eq></alg:hyperparamètre>
+ <alg:hyperparamètre><h:eq>\alpha > 0</h:eq></alg:hyperparamètre>
+ <alg:hyperparamètre><h:eq>\beta > 0</h:eq></alg:hyperparamètre>
+ <alg:state>
+ Construire la matrice <h:eq>K \in \mathbb{R}^{N,
+ N}</h:eq> : <h:equation-x>\forall i, j, \quad K_{i, j} =
+ \kappa (\mathcal{V}_{i, .}, \mathcal{V}_{j,
+ .})</h:equation-x>
+ </alg:state>
+ <alg:state>
+ Décomposer la matrice <h:eq>K</h:eq> en valeurs propres et
+ vecteurs propres, sélectionner les <h:eq>s</h:eq> vecteurs
+ propres ayant la plus grande valeur propre
+ associée : <h:eq>U \in \mathbb{R}^{N, s}</h:eq>
+ </alg:state>
+ <alg:state>
+ Poser <h:eq>X := K U</h:eq>
+ </alg:state>
+ <alg:state>
+ Sélectionner la sous-matrice <h:eq>Xl \in
+ \mathbb{R}^{n,s}</h:eq> composée des lignes
+ de <h:eq>X</h:eq> correspondant aux individus labellisés
+ </alg:state>
+ <alg:state>
+ Appliquer l’algorithme de descente de gradient accélérée, en
+ utilisant les paramètres suivants :
+ <alg:state>
+ Pas d'apprentissage : <h:eq>\frac 1 C</h:eq>, <h:eq>C = 2
+ \left(\rho \left(X_l' X_l + \alpha X'L_sX\right) + \beta
+ \rho (L_m)\right)</h:eq>
+ </alg:state>
+ <alg:state>
+ Modèle initial : <h:eq>W \in \mathbb{R}^{s, m} =
+ \left[X_l' X_l + \epsilon I_s\right]^{-1} X_l' Y_l</h:eq>
+ </alg:state>
+ <alg:state>
+ Calcul du gradient : <h:eq>\nabla_W \gets 2 \left[X_l' X_l
+ + \alpha X' L_s X\right] W - 2 X_l' Y_l + 2 \beta W
+ L_m</h:eq>
+ </alg:state>
+ </alg:state>
+ <alg:résultat><h:eq>U \in \mathbb{R}^{N, s}</h:eq></alg:résultat>
+ <alg:résultat><h:eq>W \in \mathbb{R}^{s, m}</h:eq></alg:résultat>
+ </alg:algorithmic>
+ <figcaption>
+ Algorithme <emph>LSMR</emph> : apprentissage
+ </figcaption>
+ </h:algorithm>
+ <h:algorithm id="algorithme-lsmr-predict">
+ <alg:algorithmic>
+ <alg:donnée><h:eq>\mathcal{V} \in \mathbb{R}^{N, d}</h:eq>, <h:eq>\mathcal{V}_t \in \mathbb{R}^{n_t, d}</h:eq></alg:donnée>
+ <alg:hyperparamètre><h:eq>\kappa \colon \mathcal{X} \times \mathcal{X} \to \mathbb{R}</h:eq></alg:hyperparamètre>
+ <alg:modèle><h:eq>U \in \mathbb{R}^{N, s}</h:eq></alg:modèle>
+ <alg:modèle><h:eq>W \in \mathbb{R}^{s, m}</h:eq></alg:modèle>
+ <alg:state>
+ Construire la matrice <h:eq>K_b \in \mathbb{R}^{N,
+ n_t}</h:eq> :
+
+ <h:equation-x>
+ \forall i, j, \quad {K_b}_{i, j} = \kappa (\mathcal{V}_{i, .}, {\mathcal{V}_t}_{j, .})
+ </h:equation-x>
+ </alg:state>
+ <alg:state>
+ Poser <h:eq>X_t := K_b' U</h:eq>
+ </alg:state>
+ <alg:résultat><h:eq>\hat Y \gets X_t W</h:eq></alg:résultat>
+ </alg:algorithmic>
+ <figcaption>
+ Algorithme <emph>LSMR</emph> : prédiction
+ </figcaption>
+ </h:algorithm>
+ <h2>Étude comparative</h2>
+ <p>
+ Afin de s'assurer de la performance de notre approche, nous
+ proposons deux études expérimentales. Tout d'abord, puisqu'elle
+ généralise une approche existante, nous devons nous assurer que
+ cette extension est nécessaire. Puis nous montrerons quelques
+ comparaisons avec d'autres régularisations pour de la régression
+ multi-labels.
+ </p>
+ <h3>Jeux de données utilisés</h3>
+ <p>
+ Nous avons utilisé des jeux de données du projet MULAN
+ <h:fn>
+ <a href="http://mulan.sourceforge.net/datasets-mtr.html">
+ http://mulan.sourceforge.net/datasets-mtr.html
+ </a>
+ </h:fn>, décrits dans
+ <h:cite href="spyromitros_xioufis_multi_target_2016"/>, à quoi
+ nous avons ajouté un échantillon de 1000 individus du jeu de
+ données SARCOS <h:cite href="sarcos"/>. Nous n'avons pas
+ conservé tous les jeux de données, les plus grands contenant
+ trop d'individus pour appliquer directement l'algorithme
+ LSMR. Les jeux de données et leur caractéristiques sont résumés
+ dans la table <h:ref href="#tbl-lsmr-datasets"/>.
+ </p>
+ <table latex-align="|l|cccc|">
+ <caption id="tbl-lsmr-datasets">
+ Jeux de données utilisés pour l'étude expérimentale de notre
+ approche, <strong>LSMR</strong>
+ </caption>
+ <thead>
+ <tr>
+ <th><strong>Jeu de données</strong></th>
+ <th><strong>Nb. indiv. (avec label + sans)</strong></th>
+ <th><strong>Test</strong></th>
+ <th><strong>Variables</strong></th>
+ <th><strong>Labels</strong></th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><emph>atp1d</emph></td>
+ <td>262 (76 + 186)</td>
+ <td>165</td>
+ <td>411</td>
+ <td>6</td>
+ </tr>
+ <tr>
+ <td><emph>atp7d</emph></td>
+ <td>234 (67 + 167)</td>
+ <td>147</td>
+ <td>411</td>
+ <td>6</td>
+ </tr>
+ <tr>
+ <td><emph>edm</emph></td>
+ <td>121 (35 + 86)</td>
+ <td>73</td>
+ <td>16</td>
+ <td>2</td>
+ </tr>
+ <tr>
+ <td><emph>enb</emph></td>
+ <td>601 (173 + 428)</td>
+ <td>366</td>
+ <td>8</td>
+ <td>2</td>
+ </tr>
+ <tr>
+ <td><emph>jura</emph></td>
+ <td>281 (81 + 200)</td>
+ <td>173</td>
+ <td>15</td>
+ <td>3</td>
+ </tr>
+ <tr>
+ <td><emph>oes10</emph></td>
+ <td>314 (91 + 223)</td>
+ <td>198</td>
+ <td>298</td>
+ <td>16</td>
+ </tr>
+ <tr>
+ <td><emph>oes97</emph></td>
+ <td>257 (75 + 182)</td>
+ <td>163</td>
+ <td>263</td>
+ <td>16</td>
+ </tr>
+ <tr>
+ <td><emph>osales</emph></td>
+ <td>495 (144 + 351)</td>
+ <td>309</td>
+ <td>401</td>
+ <td>12</td>
+ </tr>
+ <tr>
+ <td><emph>sarcossub</emph></td>
+ <td>779 (225 + 554)</td>
+ <td>467</td>
+ <td>21</td>
+ <td>7</td>
+ </tr>
+ <tr>
+ <td><emph>scpf</emph></td>
+ <td>889 (256 + 633)</td>
+ <td>521</td>
+ <td>23</td>
+ <td>3</td>
+ </tr>
+ <tr>
+ <td><emph>sf1</emph></td>
+ <td>250 (73 + 177)</td>
+ <td>158</td>
+ <td>31</td>
+ <td>3</td>
+ </tr>
+ <tr>
+ <td><emph>sf2</emph></td>
+ <td>832 (240 + 592)</td>
+ <td>501</td>
+ <td>31</td>
+ <td>3</td>
+ </tr>
+ <tr>
+ <td><emph>wq</emph></td>
+ <td>827 (238 + 589)</td>
+ <td>487</td>
+ <td>16</td>
+ <td>14</td>
+ </tr>
+ </tbody>
+ </table>
+ <p>
+ Nous avons divisé les jeux de données en une partie pour
+ l'apprentissage et une partie pour le test. Ces jeux de données
+ étant labellisés, nous avons sélectionné 30% des individus de
+ l'ensemble d'apprentissage pour en supprimer les labels, pour
+ tous les labels simultanément. Le nombre de labels enlevé est
+ bas, surtout comparé au travail effectué
+ pour <emph>LapS3L</emph>. Cependant le nombre d'individus total
+ étant relativement faible, il n'est pas possible d'en enlever
+ davantage.
+ </p>
+ <p>
+ Nous avons centré et réduit toutes les variables, et tous les
+ labels, en soustrayant la moyenne et divisant par
+ l'écart-type. Ceci garantit que l'on peut appliquer à la fois
+ une fonction noyau entre les individus à partir des variables,
+ et à la fois une fonction noyau entre les labels à partir des
+ données labellisées. D'autre part, si les valeurs de l'un des
+ labels sont négligeables devant les valeurs d'un autre, le
+ calcul des métriques multi-labels risque de ne pas montrer la
+ pertinence des algorithmes en tant qu'algorithmes multi-labels.
+ </p>
+ <h3>Protocole expérimental</h3>
+ <p>
+ La procédure de tuning consiste à tirer une valeur pour chaque
+ hyperparamètre, selon la recherche aléatoire
+ <h:cite href="randomsearch"/>. Cette méthode permet d'éviter
+ l'écueil de la <emph>recherche de grille</emph>, qui considère
+ tous les hyperparamètres comme équitablement importants. Dans le
+ cas où l'algorithme présente de nombreux hyperparamètres, comme
+ par exemple <strong>LSMR</strong>, la recherche aléatoire est à
+ préférer.
+ </p>
+ <p>
+ Les hyperparamètres donnant la meilleure métrique aRMSE en
+ validation croisée à 10 <emph>folds</emph> sont retenus. Pour
+ rappel, la métrique aRMSE est définie par :
+ </p>
+ <h:equation>
+ \mathrm{aRMSE} = \frac 1 m \sum_{k = 1}^m \sqrt{\frac {\left\|Y - \hat Y\right\|_F^2} {n_t}}
+ </h:equation>
+ <p>
+ <h:eq>\hat Y</h:eq> désignant la prédiction sur le jeu de
+ test, <h:eq>Y</h:eq> les vrais labels du jeu de test,
+ et <h:eq>n_t</h:eq> le nombre d'individu du jeu de test.
+ </p>
+ <p>
+ La métrique doit être minimisée. Puisque l'on a normalisé les
+ labels individuellements, si les labels du jeu de test suivent
+ exactement la même distribution que le jeu d'apprentissage, la
+ métrique est égale à 1 en prédisant toujours 0.
+ </p>
+ <p>
+ La validation croisée en 10 <emph>folds</emph> consiste à
+ partitionner les données labellisées de l'ensemble
+ d'apprentissage en 10 échantillons. L'apprentissage se fait sur
+ 9 échantillons, plus toutes les données non labellisées. Le test
+ se fait sur l'échantillon restant, en calculant la métrique
+ aRMSE. En répétant l'opération sur les 10 échantillons pour le
+ test, la métrique aRMSE moyenne est calculée.
+ </p>
+ <p>
+ Notre approche utilise 4 hyperparamètres de différentes
+ natures :
+ </p>
+ <ol>
+ <li>La fonction noyau, <h:eq>\kappa</h:eq> ;</li>
+ <li>Le nombre de composantes principales, <h:eq>s</h:eq> ;</li>
+ <li>Le régulariseur semi-supervisé, <h:eq>\alpha</h:eq> ;</li>
+ <li>Le régulariseur multi-labels, <h:eq>\beta</h:eq>.</li>
+ </ol>
+ <p>
+ Comme pour l'algorithme <emph>LapS3L</emph>, nous étudions
+ différentes fonction de noyau :
+ </p>
+ <ul>
+ <li>le produit scalaire ;</li>
+ <li>la similarité cosinus ;</li>
+ <li>le noyau RBF.</li>
+ </ul>
+ <h3>Tuning local</h3>
+ <p>
+ En tant qu'extension de l'algorithme <emph>SSSL</emph>, nous
+ vérifions la pertinence des hyperparamètres introduits. Nous
+ commençons par tuner le noyau et le nombre de composantes pour
+ minimiser l'erreur de régression de
+ l'algorithme <emph>SSSL</emph>. Les valeurs obtenues sont
+ résumées dans la table <h:ref href="#tbl-local-hyper"/>.
+ </p>
+ <table latex-align="ccc">
+ <caption id="tbl-local-hyper">
+ Valeur des hyperparamètres minimisant l'erreur de régression
+ de l'algorithme <emph>SSSL</emph> sur les jeux de données
+ étudiés
+ </caption>
+ <thead>
+ <tr>
+ <th><strong>Jeu de données</strong></th>
+ <th><strong>Noyau</strong></th>
+ <th><strong>Nombre de composantes</strong></th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><emph>atp1d</emph></td>
+ <td>RBF, <h:eq>\gamma = 3.140 \cdot 10^{-05}</h:eq></td>
+ <td>202</td>
+ </tr>
+ <tr>
+ <td><emph>atp7d</emph></td>
+ <td>produit scalaire</td>
+ <td>5</td>
+ </tr>
+ <tr>
+ <td><emph>edm</emph></td>
+ <td>RBF, <h:eq>\gamma = 1.703 \cdot 10^{+01}</h:eq></td>
+ <td>107</td>
+ </tr>
+ <tr>
+ <td><emph>enb</emph></td>
+ <td>similarité cosinus</td>
+ <td>10</td>
+ </tr>
+ <tr>
+ <td><emph>jura</emph></td>
+ <td>RBF, <h:eq>\gamma = 4.272 \cdot 10^{-03}</h:eq></td>
+ <td>87</td>
+ </tr>
+ <tr>
+ <td><emph>oes10</emph></td>
+ <td>produit scalaire</td>
+ <td>31</td>
+ </tr>
+ <tr>
+ <td><emph>oes97</emph></td>
+ <td>RBF, <h:eq>\gamma = 3.785 \cdot 10^{-05}</h:eq></td>
+ <td>55</td>
+ </tr>
+ <tr>
+ <td><emph>osales</emph></td>
+ <td>RBF, <h:eq>\gamma = 1.254 \cdot 10^{-02}</h:eq></td>
+ <td>475</td>
+ </tr>
+ <tr>
+ <td><emph>scpf</emph></td>
+ <td>similarité cosinus</td>
+ <td>2</td>
+ </tr>
+ <tr>
+ <td><emph>sf1</emph></td>
+ <td>produit scalaire</td>
+ <td>5</td>
+ </tr>
+ <tr>
+ <td><emph>sf2</emph></td>
+ <td>similarité cosinus</td>
+ <td>3</td>
+ </tr>
+ <tr>
+ <td><emph>wq</emph></td>
+ <td>RBF, <h:eq>\gamma = 1.545 \cdot 10^{+01}</h:eq></td>
+ <td>774</td>
+ </tr>
+ </tbody>
+ </table>
+ <p>
+ En réutilisant ces valeurs, nous cherchons celles pour les deux
+ autres hyperparamètres. Nous comparons avec la performance de
+ <emph>SSSL</emph>, en calculant l'aRMSE relative comme le
+ rapport entre la performance de <emph>LSMR</emph> et la performance de
+ <emph>SSSL</emph>. Nous obtenons plusieurs cas de figure
+ différents, en fonction des jeux de données. Les principaux
+ types sont reportés dans la suite.
+ </p>
+ <h4>Tuning local : <emph>scpf</emph></h4>
+ <p>
+ Le jeu de données <emph>scpf</emph> regroupe des notices émises
+ par des habitants de certaines villes aux États-Unis à
+ destination de la municipalité. Ces notices sont décrites par
+ différentes variables, telles que la nature et la localisation
+ du problème signalé. Le but est de comprendre l'importance du
+ problème, en prédisant le nombre de vues, de clics et de
+ commentaires.
+ </p>
+ <p>
+ Le tuning local donne la figure
+ <h:ref href="#fig-local-scpf"/>. Le régulariseur multi-labels
+ n'est pas très pertinent dans ce cas ; il faut utiliser une
+ valeur très faible pour obtenir une amélioration de l'algorithme
+ <emph>SSSL</emph>. La zone où le tuning donne de bonnes
+ performances est très restreinte.
+ </p>
+ <figure>
+ <img src="images/lsmr_local_scpf.svg" />
+ <figcaption id="fig-local-scpf">
+ aRMSE relative pour le tuning local de <emph>LSMR</emph> sur
+ le jeu de données <emph>scpf</emph>.
+ </figcaption>
+ </figure>
+ <h4>Tuning local : <emph>osales</emph></h4>
+ <p>
+ Le jeu de données <emph>osales</emph> contient des produits
+ ayant eu droit à une campagne publicitaire. L'objectif est de
+ prédire le volume de vente de ces produits sur les 12 prochains
+ mois, un label par mois.
+ </p>
+ <p>
+ Le tuning local donne la figure
+ <h:ref href="#fig-local-osales"/>. La zone de tuning des
+ hyperparamètres <h:eq>\alpha</h:eq> et <h:eq>\beta</h:eq> donne
+ une place plus large pour lequel <emph>LSMR</emph> améliore les
+ résultats de <emph>SSSL</emph>, mais le meilleur point de tuning
+ se situe pour un regulariseur semi-supervisé faible, avec une
+ valeur non nulle du régulariseur multi-labels.
+ </p>
+ <figure>
+ <img src="images/lsmr_local_osales.svg" />
+ <figcaption id="fig-local-osales">
+ aRMSE relative pour le tuning local de <emph>LSMR</emph> sur
+ le jeu de données <emph>osales</emph>.
+ </figcaption>
+ </figure>
+ <h4>Tuning local : <emph>sf2</emph></h4>
+ <p>
+ Le jeu de données <emph>sf2</emph> considère comme individu une
+ période de 24h, et compte le nombre d'éruptions solaires de
+ différentes catégories dans cette période. La deuxième version
+ utilise des mesures prises en 1978.
+ </p>
+ <p>
+ Le tuning local donne la figure
+ <h:ref href="#fig-local-sf2"/>. La zone de tuning est là aussi
+ plus étendue, mais le résultat est meilleur pour une grande
+ valeur de chacun des deux hyperparamètres.
+ </p>
+ <figure>
+ <img src="images/lsmr_local_sf2.svg" />
+ <figcaption id="fig-local-sf2">
+ aRMSE relative pour le tuning local de <emph>LSMR</emph> sur
+ le jeu de données <emph>sf2</emph>.
+ </figcaption>
+ </figure>
+ <h4>Tuning local : <emph>oes97</emph></h4>
+ <p>
+ Enfin, <emph>oes97</emph> étudie différentes villes des
+ États-Unis (en 1997) et étudie la répartition des emplois dans
+ ces zones. Le but est de faire la prédiction de certaines
+ catégories d'emploi en fonction des autres pour une ville
+ donnée.
+ </p>
+ <p>
+ Le tuning local donne la figure
+ <h:ref href="#fig-local-oes97"/>. La zone de tuning est trop
+ étendue ; une valeur trop élevée du régulariseur multi-labels
+ fait chuter la performance de l'algorithme.
+ </p>
+ <figure>
+ <img src="images/lsmr_local_oes97.svg" />
+ <figcaption id="fig-local-oes97">
+ aRMSE relative pour le tuning local de <emph>LSMR</emph> sur
+ le jeu de données <emph>oes97</emph>.
+ </figcaption>
+ </figure>
+ <h4>Résultats du tuning local</h4>
+ <p>
+ En agrégeant les performances relatives sur tous les points de
+ tuning, on obtient la table
+ <h:ref href="#tbl-local-results"/>. Celle-ci montre que beaucoup
+ de points du tuning local donnent un meilleur résultat que
+ <emph>SSSL</emph>. L'agrégation des scores relatifs se fait avec
+ la moyenne, le premier et troisième quartile, le minimum et le
+ maximum. Sur tous les jeux de données, il existe un point où
+ <emph>LSMR</emph> est bien meilleur que <emph>SSSL</emph>
+ (valeur inférieure à 1), et un point où <emph>LSMR</emph> est
+ pire. En regardant les quartiles, il existe de larges zones dans
+ lesquelles <emph>LSMR</emph> tuné est meilleur
+ que <emph>SSSL</emph>.
+ </p>
+ <table latex-align="lccccc">
+ <caption id="tbl-local-results">
+ Tuning local : aRMSE moyenne relative de <strong>LSMR</strong>
+ par rapport à <emph>SSSL</emph>
+ </caption>
+ <thead>
+ <tr>
+ <th><strong>Jeu de données</strong></th>
+ <th><strong>Moyenne</strong></th>
+ <th><strong>Q1</strong></th>
+ <th><strong>Q3</strong></th>
+ <th><strong>Meilleur point</strong></th>
+ <th><strong>Pire point</strong></th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><emph>sf2</emph></td>
+ <td><strong>0.983</strong></td>
+ <td><strong>0.898</strong></td>
+ <td>1.086</td>
+ <td><strong>0.553</strong></td>
+ <td>1.245</td>
+ </tr>
+ <tr>
+ <td><emph>scpf</emph></td>
+ <td>1.191</td>
+ <td><strong>0.862</strong></td>
+ <td>1.554</td>
+ <td><strong>0.564</strong></td>
+ <td>1.684</td>
+ </tr>
+ <tr>
+ <td><emph>osales</emph></td>
+ <td><strong>0.989</strong></td>
+ <td><strong>0.938</strong></td>
+ <td>1.046</td>
+ <td><strong>0.635</strong></td>
+ <td>1.191</td>
+ </tr>
+ <tr>
+ <td><emph>oes97</emph></td>
+ <td>1.078</td>
+ <td><strong>0.872</strong></td>
+ <td>1.170</td>
+ <td><strong>0.662</strong></td>
+ <td>2.344</td>
+ </tr>
+ <tr>
+ <td><emph>sf1</emph></td>
+ <td><strong>0.994</strong></td>
+ <td><strong>0.922</strong></td>
+ <td>1.062</td>
+ <td><strong>0.682</strong></td>
+ <td>1.206</td>
+ </tr>
+ <tr>
+ <td><emph>oes10</emph></td>
+ <td>1.015</td>
+ <td><strong>0.908</strong></td>
+ <td>1.110</td>
+ <td><strong>0.715</strong></td>
+ <td>1.448</td>
+ </tr>
+ <tr>
+ <td><emph>jura</emph></td>
+ <td>1.014</td>
+ <td><strong>0.954</strong></td>
+ <td>1.065</td>
+ <td><strong>0.799</strong></td>
+ <td>1.485</td>
+ </tr>
+ <tr>
+ <td><emph>atp1d</emph></td>
+ <td>1.048</td>
+ <td><strong>0.958</strong></td>
+ <td>1.070</td>
+ <td><strong>0.812</strong></td>
+ <td>1.922</td>
+ </tr>
+ <tr>
+ <td><emph>edm</emph></td>
+ <td><strong>0.998</strong></td>
+ <td><strong>0.964</strong></td>
+ <td>1.037</td>
+ <td><strong>0.821</strong></td>
+ <td>1.190</td>
+ </tr>
+ <tr>
+ <td><emph>atp7d</emph></td>
+ <td>1.006</td>
+ <td><strong>0.961</strong></td>
+ <td>1.053</td>
+ <td><strong>0.833</strong></td>
+ <td>1.242</td>
+ </tr>
+ <tr>
+ <td><emph>enb</emph></td>
+ <td><strong>0.998</strong></td>
+ <td><strong>0.964</strong></td>
+ <td>1.027</td>
+ <td><strong>0.864</strong></td>
+ <td>1.124</td>
+ </tr>
+ <tr>
+ <td><emph>wq</emph></td>
+ <td><strong>0.999</strong></td>
+ <td><strong>0.992</strong></td>
+ <td>1.007</td>
+ <td><strong>0.960</strong></td>
+ <td>1.032</td>
+ </tr>
+ </tbody>
+ </table>
+ <h3>Tuning global</h3>
+ <p>
+ Nous mettons maintenant en place une approche de tuning global
+ de façon à comparer notre approche proposée à d'autres approches
+ de régularisation multi-labels pour la régression. Les méthodes
+ évoquées résolvent un problème de régression multi-labels
+ linéaire, en optimisant une fonction objectif convexe, au moyen
+ de l'algorithme de descente de gradient accélérée.
+ </p>
+ <h4>Ligne de base : sans régularisation</h4>
+ <p>
+ Notre ligne de base n'effectue pas de régularisation, elle est
+ notée <emph>LSQ</emph> (pour <emph>least squares</emph>).
+ </p>
+ <h4>Régularisation Lasso</h4>
+ <p>
+ La régularisation <h:eq>l_1</h:eq> permet d'obtenir des parties
+ du modèle ayant une valeur nulle
+ <h:cite href="tibshirani1996regression"/>. Nous le
+ notons <emph>MTL</emph> (<emph>multi-task learning</emph>). La
+ régularisation est donnée par :
+ </p>
+ <h:equation>
+ \left\|W\right\|_1 = \sum_{j = 1} ^ d \sum_{k = 1}^m \left|W_{j, k}\right|
+ </h:equation>
+ <h4>Régularisation Laplacienne</h4>
+ <p>
+ C'est la régularisation employée dans
+ l'algorithme <emph>LSMR</emph>. On la désigne
+ par <emph>SGR</emph>, pour <emph>sparse graph
+ regularization</emph> <h:cite href="malsar"/>. Le graphe est
+ construit avec des poids utilisant la similarité cosinus entre
+ les labels, d'après les valeurs qu'ont les
+ individus. Avec <h:eq>M</h:eq> la matrice
+ d'adjacence, <h:eq>D</h:eq> la matrice de degré
+ et <h:eq>L</h:eq> la matrice Laplacienne du graphe, la
+ régularisation est :
+ </p>
+ <h:equation>
+ \mathrm{tr} \left(WLW'\right) = \sum_{k_1, k_2 = 1}^m M_{k_1, k_2} \left\|W_{., k_1} - W_{., k_2}\right\|_2^2
+ </h:equation>
+ <h4>Régularisation Lasso par groupe</h4>
+ <p>
+ L'algorithme <emph>JFS</emph> (<emph>joint feature
+ selection</emph>) tel que défini par
+ <h:cite href="argyriou_multitask_nodate"/> utilise le Lasso
+ par groupe. La régularisation employée est :
+ </p>
+ <h:equation>
+ \left\|W\right\|_{2, 1} = \sum_{j = 1} ^ d \left\|W_{j, .}\right\|_2^2
+ </h:equation>
+ <h4>Régularisation du rang</h4>
+ <p>
+ La régularisation du rang peut s'effectuer en régularisant la
+ norme trace <h:cite href="rank"/>, <emph>TNR</emph> (<emph>trace
+ norm regularization</emph>). La régularisation employée est :
+ </p>
+ <h:equation>
+ \left\|W\right\|_{*} = \sum_{\sigma \mathrm{~valeur~propre~de~} W} \sigma
+ </h:equation>
+ <h4>Dirty model</h4>
+ <p>
+ La régularisation du <emph>Dirty Model</emph>
+ <h:cite href="jalali_dirty_nodate"/> (<emph>DM</emph>) est en
+ deux termes, pour un modèle qui se décompose en <h:eq>W = P +
+ Q</h:eq> :
+ </p>
+ <h:equation>
+ \alpha \left\|P\right\|_{1, 1} + \beta \left\|Q\right\|_{\infty, 1}
+ = \alpha \sum_{j = 1} ^d \sum_{k = 1}^m \left|P_{j, k}\right|
+ + \beta \sum_{j = 1} ^ d \left\|Q_{j, .}\right\|_{\infty}
+ </h:equation>
+ <h4>Clustered multi-task learning</h4>
+ <p>
+ <emph>CMTL</emph> est la version convexe de cet algorithme
+ <h:cite href="cmtl"/>. L'optimisation se fait sur deux
+ variables, le modèle <h:eq>W</h:eq> et une matrice symétrique
+ semi-définie positive <h:eq>M</h:eq> telle que <h:eq>I -
+ M</h:eq> est aussi semi-définie positive.
+ </p>
+ <h:equation>
+ \alpha \mathrm{tr} \left(W \left(M + \beta I\right)^{-1}W'\right)
+ </h:equation>
+ <h4>Résultats</h4>
+ <p>
+ La table <h:ref href="#tuning-global"/> montre les résultats des
+ différentes approches. Nous remarquons que :
+ </p>
+ <ul>
+ <li>
+ notre approche, pour un tuning global, est meilleure
+ que <emph>SSSL</emph>, cependant le tuning local est
+ insuffisant ;
+ </li>
+ <li>
+ notre approche est souvent meilleure que la régularisation multi-labels <emph>SGR</emph> ;
+ </li>
+ <li>
+ le tuning global pour notre approche donne très souvent de
+ meilleurs résultats que le tuning local ;
+ </li>
+ <li>
+ contrairement à <emph>SSSL</emph>, notre approche donne des
+ résultats comparables à l'état de l'art sur les jeux de
+ données considérés, pour des approches de régularisation.
+ </li>
+ </ul>
+ <table latex-align="|l|cc|cccccccc|" sideways="sideways">
+ <caption id="tuning-global">
+ Résultats du tuning global, métrique aRMSE
+ </caption>
+ <thead>
+ <tr>
+ <th><strong>Jeu de données</strong></th>
+ <th><strong>LSMR</strong></th>
+ <th><strong>LSMR local</strong></th>
+ <th><emph>SSSL</emph></th>
+ <th><emph>CMTL</emph></th>
+ <th><emph>DM</emph></th>
+ <th><emph>JFS</emph></th>
+ <th><emph>LSQ</emph></th>
+ <th><emph>MTL</emph></th>
+ <th><emph>SGR</emph></th>
+ <th><emph>TNR</emph></th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><emph>atp1d</emph></td>
+ <td><strong>0.472</strong></td>
+ <td>1.006</td>
+ <td>0.481</td>
+ <td>0.533</td>
+ <td>0.522</td>
+ <td>0.543</td>
+ <td>0.549</td>
+ <td>0.534</td>
+ <td>0.548</td>
+ <td>0.548</td>
+ </tr>
+ <tr>
+ <td><emph>atp7d</emph></td>
+ <td>0.888</td>
+ <td><strong>0.713</strong></td>
+ <td>0.779</td>
+ <td>0.727</td>
+ <td>0.782</td>
+ <td>0.764</td>
+ <td>0.787</td>
+ <td>0.787</td>
+ <td>0.787</td>
+ <td>0.787</td>
+ </tr>
+ <tr>
+ <td><emph>edm</emph></td>
+ <td><strong>0.841</strong></td>
+ <td>1.005</td>
+ <td>0.895</td>
+ <td>0.849</td>
+ <td>0.857</td>
+ <td>0.856</td>
+ <td>1.198</td>
+ <td>0.855</td>
+ <td>1.207</td>
+ <td>0.852</td>
+ </tr>
+ <tr>
+ <td><emph>enb</emph></td>
+ <td><strong>0.320</strong></td>
+ <td>0.541</td>
+ <td>0.339</td>
+ <td>0.332</td>
+ <td>0.333</td>
+ <td>0.332</td>
+ <td>0.332</td>
+ <td>0.332</td>
+ <td>0.332</td>
+ <td>0.332</td>
+ </tr>
+ <tr>
+ <td><emph>jura</emph></td>
+ <td>0.661</td>
+ <td>0.847</td>
+ <td>0.727</td>
+ <td>0.597</td>
+ <td>0.593</td>
+ <td><strong>0.591</strong></td>
+ <td>0.609</td>
+ <td>0.593</td>
+ <td>0.611</td>
+ <td>0.598</td>
+ </tr>
+ <tr>
+ <td><emph>oes10</emph></td>
+ <td><strong>0.390</strong></td>
+ <td>0.488</td>
+ <td>0.395</td>
+ <td>0.398</td>
+ <td>0.402</td>
+ <td>0.402</td>
+ <td>0.402</td>
+ <td>0.402</td>
+ <td>0.402</td>
+ <td>0.402</td>
+ </tr>
+ <tr>
+ <td><emph>oes97</emph></td>
+ <td><strong>0.445</strong></td>
+ <td>0.918</td>
+ <td>0.494</td>
+ <td>0.515</td>
+ <td>0.510</td>
+ <td>0.534</td>
+ <td>0.534</td>
+ <td>0.534</td>
+ <td>0.534</td>
+ <td>0.534</td>
+ </tr>
+ <tr>
+ <td><emph>osales</emph></td>
+ <td>1.012</td>
+ <td>0.957</td>
+ <td>0.938</td>
+ <td>0.882</td>
+ <td><strong>0.839</strong></td>
+ <td>0.861</td>
+ <td>0.921</td>
+ <td>0.873</td>
+ <td>0.873</td>
+ <td>0.906</td>
+ </tr>
+ <tr>
+ <td><emph>sarcossub</emph></td>
+ <td>0.363</td>
+ <td>0.816</td>
+ <td>0.428</td>
+ <td>0.357</td>
+ <td>0.357</td>
+ <td><strong>0.354</strong></td>
+ <td>0.357</td>
+ <td>0.354</td>
+ <td>0.357</td>
+ <td>0.357</td>
+ </tr>
+ <tr>
+ <td><emph>scpf</emph></td>
+ <td>1.111</td>
+ <td>0.926</td>
+ <td>1.253</td>
+ <td><strong>0.621</strong></td>
+ <td>0.636</td>
+ <td>0.635</td>
+ <td>0.635</td>
+ <td>0.635</td>
+ <td>0.635</td>
+ <td>0.635</td>
+ </tr>
+ <tr>
+ <td><emph>sf1</emph></td>
+ <td>1.070</td>
+ <td><strong>0.998</strong></td>
+ <td>1.092</td>
+ <td>0.999</td>
+ <td>0.999</td>
+ <td>0.999</td>
+ <td>1.292</td>
+ <td>0.999</td>
+ <td>1.285</td>
+ <td>0.999</td>
+ </tr>
+ <tr>
+ <td><emph>sf2</emph></td>
+ <td><strong>0.973</strong></td>
+ <td>1.041</td>
+ <td>1.114</td>
+ <td>1.022</td>
+ <td>1.161</td>
+ <td>1.024</td>
+ <td>1.262</td>
+ <td>1.024</td>
+ <td>1.249</td>
+ <td>1.024</td>
+ </tr>
+ <tr>
+ <td><emph>wq</emph></td>
+ <td>0.999</td>
+ <td>0.999</td>
+ <td>1.003</td>
+ <td><strong>0.946</strong></td>
+ <td>1.006</td>
+ <td>0.982</td>
+ <td>1.079</td>
+ <td>0.947</td>
+ <td>1.079</td>
+ <td>1.023</td>
+ </tr>
+ </tbody>
+ </table>
+ <h3>Validation statistique</h3>
+ <p>
+ Afin de savoir comment se positionnent les algorithmes les uns
+ par rapport aux autres, nous effectuons un test statistique en
+ suivant la méthodologie indiquée dans
+ <h:cite href="demsar_statistical_2006"/>.
+ </p>
+ <h4><emph>t-test</emph> par paires</h4>
+ <p>
+ En considérant une paire d'algorithmes, il est possible de
+ calculer la différence entre les performances de ces deux
+ algorithmes sur chaque jeu de données. Lorsque l'on prend la
+ moyenne de cette différence, à supposer qu'elle s'applique sur
+ un grand nombre de jeux de données, on peut effectuer un test
+ pour savoir si cette moyenne est positive, ou pour savoir si
+ elle est négative. Cela permettrait de savoir si l'un des
+ algorithmes est relativement meilleur que l'autre.
+ </p>
+ <p>
+ Comme nous n'avons que 13 jeux de données, il n'est pas possible
+ de considérer les performances de chaque algorithme comme un
+ échantillon gausssien, ce qui pose une limite assez claire à
+ cette approche.
+ </p>
+ <p>
+ De plus, les jeux de données contenant très peu d'individus ont une
+ performance très variable.
+ </p>
+ <h4>Test de Wilcoxon</h4>
+ <p>
+ Ce test permet aussi de départager deux algorithmes, mais il ne
+ se fonde plus sur les valeurs de la métrique envisagée mais sur
+ les rangs des algorithmes. Plus précisément, on calcule les
+ différences entre les deux algorithmes sur chaque jeu de données
+ en valeur absolue, puis on trie ces différences absolues. Pour
+ chaque algorithme, on sélectionne les différences qui sont en
+ faveur de cet algorithme, et on somme leurs rangs. En prenant
+ une valeur de <h:eq>\alpha = 0.1</h:eq>, on obtient la figure
+ <h:ref href="#fig-test-wilcoxon"/>. Sur cette figure, une
+ cellule bleue indique que l'algorithme en ligne bat l'algorithme
+ en colonne. Une cellule rouge indique que l'algorithme en
+ colonne bat l'algorithme en ligne. Notre généralisation est
+ meilleure que l'algorithme <emph>SSSL</emph>.
+ </p>
+ <figure>
+ <img src="images/wilcoxon.svg" />
+ <figcaption id="fig-test-wilcoxon">
+ Résultat du test de comparaison par paires d'algorithmes de
+ Wilcoxon
+ </figcaption>
+ </figure>
+ <h4>Tests de Friedman et Nemenyi</h4>
+ <p>
+ Le test de Friedman permet de rejeter l'hypothèse suivante en se
+ fondant sur les rangs des approches : tous les régresseurs sont
+ équivalents, c'est-à-dire que le rang moyen de tous les
+ régresseurs est égal. Cette hypothèse est rejetée dans notre cas
+ pour un risque <h:eq>\alpha = 0.05</h:eq>.
+ </p>
+ <p>
+ Puisque le rang moyen n'est pas égal, le test de Nemenyi permet
+ d'établir la distance critique entre rangs moyens. Si des
+ algorithmes ont une différence entre leurs rangs moyens
+ supérieure à cette distance critique, ils ne sont pas
+ équivalents. La figure <h:ref href="#fig-test-nemenyi"/> montre
+ les rangs des algorithmes, ainsi que la distance critique. On
+ constate que notre approche, même si elle n'obtient pas le
+ meilleur rang moyen, est dans le groupe du meilleur algorithme,
+ contrairement aux deux approches sur lesquelles elle est fondée.
+ </p>
+ <figure>
+ <img src="images/nemenyi.svg" />
+ <figcaption id="fig-test-nemenyi">
+ Résultat du test de comparaison par paires d'algorithmes de
+ Nemenyi
+ </figcaption>
+ </figure>
+ <h2>Conclusion</h2>
+ <p>
+ Nous avons proposé une extension de
+ l'algorithme <emph>SSSL</emph> adapté à l'apprentissage
+ multi-labels, en réutilisant la régularisation Laplacienne que
+ nous avions développée dans l'algorithme
+ <emph>LapS3L</emph>. Expérimentalement, cette approche donne une
+ erreur de régression multi-labels plus faible
+ que <emph>SSSL</emph>, même en réutilisant une partie du tuning
+ des hyperparamètres. En optimisant les hyperparamètres de façon
+ globale, l'approche demeure compétitive avec des méthodes
+ représentatives de l'état de l'art.
+ </p>
+ <h1 short="RSMS">
+ Sélection de variables semi-supervisée en multi-régressions
+ </h1>
+ <h:résumé-chapitre>
+ <p>
+ Les deux travaux présentés dans les chapitres précédents,
+ <strong>LapS3L</strong> et sa version
+ multi-labels, <strong>LSMR</strong>, utilisent
+ une <emph>extraction de variables</emph> non supervisée pour
+ réduire la dimension du problème.
+ </p>
+ <p>
+ Dans certains cas d'application, cependant, la <emph>sélection
+ de variables</emph> est une tâche plus abordée puisqu'elle
+ rend le modèle <emph>interprétable</emph>. Dans ce chapitre,
+ nous proposons de résoudre cette tâche dans un cadre à la fois
+ multi-labels et semi-supervisé pour les problèmes de
+ régression, et montrons son efficacité sur des jeux de données
+ multi-labels publics issus de la littérature.
+ </p>
+ <p>
+ L'idée de cette méthode consiste à guider la sélection de
+ variables par la <emph>sélection de labels</emph> : en effet,
+ si les performances d'apprentissage sont dégradées pour
+ certains labels, il n'est pas nécessaire de les conserver pour
+ la sélection de variables.
+ </p>
+ </h:résumé-chapitre>
+ <h2>Introduction</h2>
+ <p>
+ Dans le cas d'apprentissage multi-labels dont l'espace de
+ description des individus est de grande dimension, ce qui arrive
+ pour des données textuelles ou d'images par exemple, la présence
+ de trop de variables par rapport au nombre d'individus peut
+ mener à un sur-apprentissage. Pour empêcher cela, la sélection
+ de variables multi-labels a pour objectif de trouver un
+ sous-ensemble de variables pertinentes pour tous les labels,
+ permettant d'obtenir une meilleure erreur de régression, de
+ réduire la dimension du problème et de produire un modèle plus
+ simple et interprétable.
+ </p>
+ <p>
+ Dans ce chapitre, nous proposons un algorithme de sélection de
+ variables semi-supervisé et multi-labels, adapté aux problèmes
+ de régression. Tout d'abord, nous rappelons le contexte ainsi
+ que les travaux existants sur lesquels nous nous
+ appuyons. Ensuite, nous développons l'algorithme, à partir de
+ l'explicitation de notre intuition. Enfin, pour valider notre
+ approche, nous proposons une étude expérimentale comparative sur
+ des jeux de données de régression multi-labels.
+ </p>
+ <h2>Travaux liés</h2>
+ <p>
+ L'approche que nous proposons s'inspire principalement de l'algorithme
+ <emph>MIFS</emph> (<emph>Multi-label Informed Feature
+ Selection</emph>) dans les travaux de <h:cite href="mifs"/>, de
+ façon à fonctionner dans le cadre semi-supervisé, et en
+ régression. Nous proposons également des éléments de
+ l'apprentissage robuste et de la sélection de labels.
+ </p>
+ <p>
+ Dans le cadre de la sélection de variables,
+ l'algorithme <emph>MIFS</emph> propose un <emph>embedding</emph>
+ des labels. Ainsi, les variables ne sont pas sélectionnées pour
+ améliorer la prédiction des vrais labels, mais des labels
+ extraits. L'avantage de cette approche est que des valeurs
+ bruitées dans l'ensemble d'apprentissage perturberont peu la
+ sélection de variables. En revanche, la méthode ne peut pas
+ servir directement en prédiction pour faire simultanément de la
+ sélection de variables et de la régresssion multi-labels.
+ </p>
+ <p>
+ Pour rappel, l'algorithme <emph>MIFS</emph> vise à minimiser la
+ fonction objectif suivante :
+ </p>
+ <h:mini>
+ <h:variables>
+ W \in \mathbb{R}^{d, o},
+ V \in \mathbb{R}^{n, o},
+ B \in \mathbb{R}^{o, m}
+ </h:variables>
+ <h:objective>
+ \left\|XW - V\right\|_F^2
+ + \alpha \left\|Y - VB\right\|_F^2
+ + \beta \mathrm{tr} \left(V'LV\right)
+ + \gamma \left\|W\right\|_{2, 1}
+ </h:objective>
+ </h:mini>
+ <p>
+ Cette fonction objectif se décompose en 4 termes :
+ </p>
+ <ol>
+ <li>
+ L'erreur de régression pour prédire les labels extraits ;
+ </li>
+ <li>
+ La précision de l'extraction des labels ;
+ </li>
+ <li>
+ La cohérence des labels extraits : si deux individus sont
+ proches dans l'espace des variables, alors les valeurs de
+ leurs labels extraits doivent être également proches ;
+ </li>
+ <li>
+ La sélection de variables, sur le modèle prédisant les labels
+ extraits.
+ </li>
+ </ol>
+ <p>
+ Cependant, la pénalisation de l'extraction de labels prévue par
+ <emph>MIFS</emph> n'est pas suffisante dans les cas où certains
+ des labels dont on souhaite effectuer la prédiction ne peuvent
+ tout simplement pas être traités. Si de tels labels sont
+ présents dans le jeu de données, la prédiction pour ces labels
+ sera mauvaise quelles que soient les variables sélectionnées :
+ il ne faut pas sélectionner de variables pertinentes pour ces
+ labels. De ce point de vue, la sélection de labels au service de
+ la sélection de variables joue un rôle différent de l'extraction
+ de labels telle que mise en œuvre dans
+ l'algorithme <emph>MIFS</emph>.
+ </p>
+ <p>
+ La sélection de labels peut donc être utilisée pour
+ l'apprentissage multi-labels <h:cite href="robust"/>. Dans ce
+ cas, le modèle multi-labels est décomposé en un terme utilisant
+ une structure commune pour la plupart des labels, et un terme
+ indiquant les labels non traités.
+ </p>
+ <h:mini>
+ <h:variables>A, B</h:variables>
+ <h:objective>
+ \left\|X (A + B) - Y\right\|_F^2
+ + \alpha \mathcal{R} (A)
+ + \beta \left\|B\right\|_{1, 2}
+ </h:objective>
+ </h:mini>
+ <p>
+ La notation <h:eq>\left\|B\right\|_{1, 2}</h:eq> désigne la
+ norme <h:eq>l_{1, 2}</h:eq> de <h:eq>B</h:eq>, c'est-à-dire la
+ norme <h:eq>l_{2, 1}</h:eq> de la transposée de <h:eq>B</h:eq> :
+ </p>
+ <h:equation>
+ \left\|B\right\|_{1, 2}
+ = \sum_{l = 1} ^ m \left\|B_{., l}\right\|_2
+ </h:equation>
+ <p>
+ <h:eq>\mathcal{R}</h:eq> désigne un terme de régularisation
+ multi-labels quelconque. Dans le cas de <h:cite href="robust"/>,
+ il s'agit de la norme trace. La régularisation
+ <h:eq>\left\|B\right\|_{1, 2}</h:eq> ressemble au terme de
+ sparsité du <emph>dirty model</emph>, mais l'hypothèse est plus
+ forte, puisque ce terme ne correspond qu'à certains labels.
+ </p>
+ <h2>Approche proposée : <strong>RSMS</strong></h2>
+ <p>
+ Dans cette section nous décrivons notre approche que nous
+ dénommons par la suite <strong>RSMS</strong> (<emph>Robust
+ Semi-supervised Multi-label feature Selection</emph>).
+ </p>
+ <p>
+ On dispose d'un ensemble d'apprentissage supervisé,
+
+ <h:eq>
+ \left(
+ x_i \in \mathcal{X},
+ y_i \in \mathbb{R}^m
+ \right)_{i = 1} ^ {n_l}
+ </h:eq>,
+
+ auquel est adjoint un ensemble non supervisé,
+
+ <h:eq>
+ \left(
+ x_i \in \mathcal{X}
+ \right)_{i = n_l + 1}^{N}
+ </h:eq>.
+ </p>
+ <p>
+ Tout d'abord, l'algorithme cherche à effectuer une extraction de
+ labels. Pour cela, on écrit la matrice de labels <h:eq>Y</h:eq>
+ comme suit :
+ </p>
+ <h:equation-x>
+ Y = V B
+ </h:equation-x>
+ <p>
+ Ceci introduit la matrice de pseudo-labels
+
+ <h:eq>V \in \mathbb{R}^{N, o}</h:eq>,
+
+ et la matrice
+
+ <h:eq>B \in \mathbb{R}^{o, m}</h:eq>.
+
+ Concrètement, chaque individu labellisé de l'ensemble
+ d'apprentissage correspond à une ligne de <h:eq>V</h:eq>, et
+ chaque pseudo-label correspond à une colonne
+ de <h:eq>V</h:eq>. Dans le cadre semi-supervisé, on définit une
+ matrice diagonale
+
+ <h:eq>J \in \mathbb{R}^{N, N}</h:eq>,
+
+ dont la diagonale est l'indicatrice des individus
+ labellisés. Pour chaque individu
+
+ <h:eq>i \in \{1, ..., N\}</h:eq>,
+
+ <h:eq>J_{i i} = 1</h:eq> si et seulement si <h:eq>i</h:eq> est
+ labellisé. Cette matrice nous permet donc d'affiner la
+ décomposition, qui ne doit porter que sur la partie labellisée :
+ </p>
+ <h:mini>
+ <h:variables>
+ V \in \mathbb{R}^{N, o},
+ B \in \mathbb{R}^{o, m}
+ </h:variables>
+ <h:objective>
+ \left\|JVB - JY\right\|_F^2
+ </h:objective>
+ </h:mini>
+ <p>
+ L'obtention d'un modèle d'apprentissage semi-supervisé peut
+ ainsi s'effectuer uniquement à partir des labels extraits. On
+ introduit un modèle
+
+ <h:eq>W \in \mathbb{R}^{d, o}</h:eq>,
+
+ et un régulariseur
+
+ <h:eq>\alpha > 0</h:eq>.
+
+ Plus <h:eq>\alpha</h:eq> est grand, plus les labels extraits
+ représenteront fidèlement les vrais labels <h:eq>Y</h:eq>.
+ </p>
+ <h:mini>
+ <h:variables>
+ W \in \mathbb{R}^{d, o},
+ V \in \mathbb{R}^{N, o},
+ B \in \mathbb{R}^{o, m}
+ </h:variables>
+ <h:objective>
+ \left\|XW - V\right\|_F^2
+ + \alpha \left\|J V B - J Y \right\|_F^2
+ </h:objective>
+ </h:mini>
+ <p>
+ L'optimisation par rapport à <h:eq>V</h:eq> permet d'assigner
+ des pseudo-labels même aux individus non labellisés. Ce n'est
+ cependant pas suffisant pour tenir compte des hypothèses de
+ l'apprentissage semi-supervisé, puisque ces valeurs ne sont pas
+ contraintes. La traduction des hypothèses semi-supervisées, dans
+ le cadre de l'algorithme <emph>MIFS</emph>, se traduit de la
+ façon suivante :
+ </p>
+ <blockquote>
+ Si deux individus sont proches, alors les valeurs de leurs
+ pseudo-labels doivent être proches.
+ </blockquote>
+ <p>
+ En suivant cette hypothèse, on peut être amené à introduire une
+ matrice Laplacienne
+
+ <h:eq>L \in \mathbb{R}^{N, N}</h:eq>
+
+ et un nouveau régulariseur
+
+ <h:eq>\beta > 0</h:eq>,
+
+ de sorte à minimiser le problème suivant :
+ </p>
+ <h:mini>
+ <h:variables>
+ W \in \mathbb{R}^{d, o},
+ V \in \mathbb{R}^{N, o},
+ B \in \mathbb{R}^{o, m}
+ </h:variables>
+ <h:objective>
+ \left\|XW - V\right\|_F^2
+ + \alpha \left\|J V B - J Y \right\|_F^2
+ + \beta \mathrm{tr} \left(V'LV\right)
+ </h:objective>
+ </h:mini>
+ <p>
+ Il reste donc deux problèmes à traiter : la sélection de
+ variables, et la sélection de labels au service de la sélection
+ de variables. Pour la sélection de variables, l'utilisation de
+ la norme <h:eq>l_{2, 1}</h:eq> est très répandue
+ <h:cite href="rfs"/>. Pour rappel, il s'agit de régulariser le
+ terme s'appliquant sur les lignes de <h:eq>W</h:eq> :
+ </p>
+ <h:equation-x>
+ \sum_{j = 1} ^ d \sqrt{\sum_{k = 1} ^ o W_{jk} ^ 2}
+ = \left\|W\right\|_{2, 1}
+ </h:equation-x>
+ <p>
+ Ce terme permet de rendre les lignes de <h:eq>W</h:eq> éparses,
+ c'est-à-dire que des lignes de <h:eq>W</h:eq> tendent à être
+ entièrement nulles. Les lignes comportant des valeurs non nulles
+ indiquent des variables qui sont importantes pour
+ l'apprentissage de tous les pseudo-labels. Le problème devient
+ donc :
+ </p>
+ <h:mini>
+ <h:variables>
+ W \in \mathbb{R}^{d, o},
+ V \in \mathbb{R}^{N, o},
+ B \in \mathbb{R}^{o, m}
+ </h:variables>
+ <h:objective>
+ \left\|XW - V\right\|_F^2
+ + \alpha \left\|J V B - J Y \right\|_F^2
+ </h:objective>
+ <h:break-objective>
+ + \beta \mathrm{tr} \left(V'LV\right)
+ + \gamma \left\|W\right\|_{2, 1}
+ </h:break-objective>
+ </h:mini>
+ <p>
+ Pour effectuer la sélection de labels, notre hypothèse se
+ traduit donc par le fait que certaines des colonnes de la
+ matrice <h:eq>B</h:eq>, qui correspondent donc aux vrais labels,
+ seront entièrement nulles. En introduisant un terme de
+ régularisation supplémentaire, on obtient :
+ </p>
+ <h:mini>
+ <h:variables>
+ W \in \mathbb{R}^{d, o},
+ V \in \mathbb{R}^{N, o},
+ B \in \mathbb{R}^{o, m}
+ </h:variables>
+ <h:objective>
+ \left\|XW - V\right\|_F^2
+ + \alpha \left\|J V B - J Y \right\|_F^2
+ </h:objective>
+ <h:break-objective>
+ + \beta \mathrm{tr} \left(V'LV\right)
+ + \gamma \left\|W\right\|_{2, 1}
+ + \delta \left\|B\right\|_{1, 2}
+ </h:break-objective>
+ </h:mini>
+ <p>
+ L'hypothèse semi-supervisée change également. La régularisation
+
+ <h:eq>\mathrm{tr} (V L V')</h:eq>
+
+ n'est pas pertinente, parce qu'elle s'applique de façon
+ indiscriminée sur tous les pseudo-labels. Ainsi, si un
+ pseudo-label représente l'un des labels ignorés, il ne faut pas
+ tenir compte de ses valeurs pour la régularisation. Ceci nous
+ mène à modifier l'hypothèse semi-supervisée pour la sélection de
+ variables aidée par la sélection de labels :
+ </p>
+ <blockquote>
+ Si deux individus sont proches, alors pour chaque label
+ sélectionné, la reconstruction des valeurs de ce label doivent
+ être proches.
+ </blockquote>
+ <p>
+ Nous considérons pour la reconstruction des valeurs des labels
+ le produit <h:eq>V B</h:eq>. Le problème final devient donc
+ <h:ref href="#rsms-final"/> :
+ </p>
+ <h:mini id="rsms-final">
+ <h:variables>
+ W \in \mathbb{R}^{d, o},
+ V \in \mathbb{R}^{N, o},
+ B \in \mathbb{R}^{o, m}
+ </h:variables>
+ <h:objective>
+ \left\|XW - V\right\|_F^2
+ + \alpha \left\|J V B - J Y \right\|_F^2
+ </h:objective>
+ <h:break-objective>
+ + \beta \mathrm{tr} \left(B'V'LVB\right)
+ + \gamma \left\|W\right\|_{2, 1}
+ + \delta \left\|B\right\|_{1, 2}
+ </h:break-objective>
+ </h:mini>
+ <p>
+ Le terme de régularisation semi-supervisé
+
+ <h:eq>\mathrm{tr} \left(B'V'LVB\right)</h:eq>
+
+ peut se réécrire de la façon suivante :
+ </p>
+ <h:equation>
+ \sum_{k = 1} ^ m \sum_{i_1 = 1, i_2 = 1} ^ N M_{i_1, i_2}
+ \left(
+ \sum_{l = 1} ^ o \left(V_{i_1, l} - V_{i_2, l}\right) B_{l, k}
+ \right)^2
+ </h:equation>
+ <p>
+ Par hypothèse, si un label <h:eq>k</h:eq> est ignoré, alors pour
+ tout
+
+ <h:eq>l \in \{1, ..., o\}</h:eq>,
+
+ <h:eq>B_{l,k} = 0</h:eq>.
+
+ Par conséquent, la régularisation ne porte que sur les labels
+ non ignorés, notés
+
+ <h:eq>\mathcal {S} \subset \{1, ..., m\}</h:eq> :
+ </p>
+ <h:equation>
+ \sum_{k \in \mathcal{S}}
+ \sum_{i_1 = 1, i_2 = 1} ^ N
+ M_{i_1, i_2} \left(
+ \sum_{l = 1} ^ o \left(V_{i_1, l} - V_{i_2, l}\right) B_{l, k}
+ \right)^2
+ </h:equation>
+ <p>
+ Contrairement à l'apprentissage robuste <h:cite href="robust"/>,
+ où le modèle doit rendre compte à la fois des labels
+ sélectionnés et des labels non sélectionnés, nous ne nous
+ intéressons qu'aux variables pour les labels sélectionnés. Il
+ n'est donc pas nécessaire de décomposer le terme <h:eq>B</h:eq>.
+ </p>
+ <h2>Optimisation</h2>
+ <p>
+ La question de l'initialisation des variables pose problème,
+ puisque le résultat final en dépend. Il est possible d'utiliser
+ des variables indépendantes suivant une loi normale, mais cela
+ ne permet pas de rendre l'algorithme déterministe.
+ </p>
+ <p>
+ En ce qui concerne <h:eq>W</h:eq>, nous avons choisi d'utiliser
+ l'initialisation suivante :
+ </p>
+ <h:equation>
+ W^{(0)} \gets \left[X' J X + \epsilon I\right]^{-1} X' J V
+ </h:equation>
+ <p>
+ Il s'agit de la solution aux moindres carrés, régularisée par
+ <h:eq>\epsilon</h:eq>. La valeur a été fixée
+ à <h:eq>10^{-6}</h:eq>, qui est suffisamment faible pour ne pas
+ trop influencer l'apprentissage pour les jeux de données du type
+ de ceux étudiés dans l'étude expérimentale. Le
+ terme <h:eq>V_l</h:eq> désigne le sous-ensemble labellisé des
+ lignes de <h:eq>V</h:eq>.
+ </p>
+ <p>
+ Pour <h:eq>V</h:eq> et <h:eq>B</h:eq>, la question est plus
+ complexe. Pour conserver l'aspect déterministe de
+ l'initialisation, on ne peut pas recourir à un algorithme de
+ clustering de type <emph>k-means</emph>, et il n'est pas non
+ plus possible d'effectuer une décomposition <emph>SVD</emph> de
+ la matrice <h:eq>Y</h:eq>. L'initialisation retenue
+ pour <h:eq>B</h:eq> est une matrice diagonale rectangulaire (la
+ diagonale s'arrêtant prématurément, laissant des colonnes
+ nulles). L'initialisation pour <h:eq>V_l</h:eq> correspond donc
+ aux valeurs des <h:eq>o</h:eq> premiers labels. Le reste des
+ valeurs de <h:eq>V</h:eq> est obtenue en utilisant la valeur
+ initiale <h:eq>W^{(0)}</h:eq> de <h:eq>W</h:eq> sous la forme
+ <h:eq>V^{(0)} \gets X W</h:eq>.
+ </p>
+ <p>
+ L'initialisation de l'algorithme consiste donc à faire un
+ apprentissage des <h:eq>o</h:eq> premiers labels avec une
+ régularisation Ridge de paramètre <h:eq>10^{-6}</h:eq>.
+ </p>
+ <p>
+ Comme pour l'algorithme <emph>MIFS</emph>, notre approche
+ utilise 3 variables
+ d'optimisation : <h:eq>W</h:eq>, <h:eq>V</h:eq>
+ et <h:eq>B</h:eq>. En effectuant une optimisation alternée
+ vis-à-vis de chacune des variables, nous pouvons vérifier que la
+ valeur de la fonction objectif décroît à chaque étape, ce qui
+ montre la convergence de notre approche.
+ </p>
+ <h3>Optimisation vis-à-vis de <h:eq>W</h:eq>, <h:eq>V</h:eq>
+ et <h:eq>B</h:eq> étant fixés</h3>
+ <p>
+ Le problème <h:ref href="#rsms-final"/>, si l'on ne considère
+ que <h:eq>W</h:eq>, peut se réécrire en :
+ </p>
+ <h:mini>
+ <h:variables>
+ W \in \mathbb{R}^{d, o}
+ </h:variables>
+ <h:objective>
+ \left\|XW - V\right\|_F^2
+ + \gamma \left\|W\right\|_{2, 1}
+ </h:objective>
+ </h:mini>
+ <p>
+ La difficulté de ce problème réside dans le fait que le deuxième
+ terme n'est pas lisse. Il existe plusieurs façons de traiter ce
+ cas, par exemple l'implémentation MALSAR <h:cite href="malsar"/>
+ propose une descente de gradient proximal. Dans notre cas, nous
+ utilisons une constante <h:eq>\epsilon > 0</h:eq>, et nous
+ adoptons la solution de l'algorithme <emph>RFS</emph>
+ <h:cite href="rfs"/>, en posant la matrice
+ diagonale <h:eq>D_W</h:eq> telle que :
+ </p>
+ <h:equation>
+ \forall j \in \{1, ..., d\}, {D_W}_{j, j} =
+ \begin{cases}
+ \frac 1 {2 \left\|W_{j,.}\right\|_2}, \quad \left\|W_{j,.}\right\|_2 \neq 0 \\
+ \epsilon, \quad \left\|W_{j,.}\right\|_2 = 0
+ \end{cases}
+ </h:equation>
+ <p>
+ Cette définition permet d'écrire :
+ </p>
+ <h:equation>
+ 2 \mathrm{tr} (W' D_W W)
+ = \sum_{j = 1, \left\|W_{j, .}\right\|_2 \neq 0}^d
+ \left\|W_{j, .}\right\|_2
+ + \sum_{j = 1, \left\|W_{j, .}\right\|_2 = 0}
+ \epsilon \left\|W_{j,.}\right\|_2^2
+ </h:equation>
+ <p>
+ Il s'agit donc de la norme <h:eq>l_{2,1}</h:eq>. En pratique,
+ pour vérifier la convergence de l'algorithme, si le terme
+
+ <h:eq>\mathrm{tr} (W' D_W W)</h:eq>
+
+ décroît, alors le terme <h:eq>\left\|W\right\|_{2, 1}</h:eq>
+ décroît aussi.
+ </p>
+ <p>
+ Le gradient vis-à-vis de <h:eq>W</h:eq> s'écrit donc :
+ </p>
+ <h:equation>
+ 2 \left (X' (XW - V) + \gamma D_W W \right)
+ </h:equation>
+ <p>
+ Si l'on pose :
+ </p>
+ <h:equation>
+ W^{*} \gets W - \frac 2 {C_W} (X' (XW - V) + \gamma D_W W)
+ </h:equation>
+ <p>
+ on applique une itération de l'algorithme de descente du
+ gradient, avec un pas d'apprentissage <h:eq>\frac 1
+ {C_W}</h:eq>. On constate que la fonction gradient est
+ Lipschitzienne, c'est-à-dire que pour toute paire de modèles
+ <h:eq>W^{(1)}, W^{(2)}</h:eq>,
+ </p>
+ <h:equation>
+ \left\|\nabla_W (W^{(1)}) - \nabla_W (W^{(2)})\right\|_F^2
+ \leq C_W \left\|W^{(1)} - W^{(2)}\right\|_F^2
+ </h:equation>
+ <p>
+ avec
+
+ <h:eq>C_W = \rho (X'X) + \gamma \max (D_W)</h:eq>,
+
+ où <h:eq>\rho (X'X)</h:eq> est le rayon spectral de la matrice
+ <h:eq>X'X</h:eq>.
+ </p>
+ <p>
+ Par conséquent, l'itération de descente de gradient fait
+ décroître la fonction objectif.
+ </p>
+ <h3>Optimisation vis-à-vis de <h:eq>V</h:eq></h3>
+ <p>
+ En fixant <h:eq>W</h:eq> et <h:eq>B</h:eq>, le problème
+ d'optimisation s'écrit :
+ </p>
+ <h:mini>
+ <h:variables>
+ V \in \mathbb{R}^{N, o}
+ </h:variables>
+ <h:objective>
+ \left\|XW - V\right\|_F^2
+ + \alpha \left\|JVB - JY\right\|_F^2
+ + \beta \mathrm{tr}\left(B'V'LVB\right)
+ </h:objective>
+ </h:mini>
+ <p>
+ Le gradient par rapport à <h:eq>V</h:eq> s'écrit :
+ </p>
+ <h:equation>
+ 2 \left( V - X W + \alpha JVB' - \alpha JYB' + \beta L V B B' \right)
+ </h:equation>
+ <p>
+ La fonction objectif est convexe par rapport à <h:eq>V</h:eq>,
+ et la fonction de gradient est Lipschitzienne : pour toute paire
+ de modèles <h:eq>V^{(1)}, V^{(2)}</h:eq>,
+ </p>
+ <h:equation>
+ \left\|\nabla_V (V^{(1)}) - \nabla_V (V^{(2)})\right\|_F^2
+ \leq C_V \left\|V^{(1)} - V^{(2)}\right\|_F^2
+ </h:equation>
+ <p>
+ avec :
+ </p>
+ <h:equation>
+ C_V = 1 + \left(\alpha + \beta \rho (L)\right) \rho (BB')
+ </h:equation>
+ <h3>Optimisation vis-à-vis de <h:eq>B</h:eq></h3>
+ <p>
+ En fixant <h:eq>W</h:eq> et <h:eq>V</h:eq>, le problème
+ d'optimisation s'écrit :
+ </p>
+ <h:mini>
+ <h:variables>
+ B \in \mathbb{R}^{o, m}
+ </h:variables>
+ <h:objective>
+ \alpha \left\|JVB - JY\right\|_F^2
+ + \beta \mathrm{tr} \left(B'V'LVB\right)
+ + \delta \left\|B\right\|_{1, 2}
+ </h:objective>
+ </h:mini>
+ <p>
+ Cette fonction n'est pas lisse, à cause de la
+ norme <h:eq>l_{1,2}</h:eq> appliquée à <h:eq>B</h:eq>. On
+ applique la même astuce que pour l'optimisation par rapport à
+ <h:eq>W</h:eq> : on pose la matrice diagonale <h:eq>D_B</h:eq>
+ dont la diagonale vaut :
+ </p>
+ <h:equation>
+ \forall l \in \{1, ..., m\}, \quad {D_B}_{l, l} \gets
+ \begin{cases}
+ \frac 1 {2 \left\|B_{., l}\right\|_2}, &amp;\quad \left\|B_{., l}\right\|_2 \neq 0 \\
+ \epsilon, &amp;\quad \left\|B_{., l}\right\|_2 = 0
+ \end{cases}
+ </h:equation>
+ <p>
+ Nous devons donc résoudre le problème suivant :
+ </p>
+ <h:mini>
+ <h:variables>
+ B \in \mathbb{R}^{o, m}
+ </h:variables>
+ <h:objective>
+ \alpha \left\|JVB - JY\right\|_F^2
+ + \beta \mathrm{tr} \left(B'V'LVB\right)
+ + \delta \mathrm{tr} \left(B D_B B'\right)
+ </h:objective>
+ </h:mini>
+ <p>
+ Le gradient peut donc s'écrire :
+ </p>
+ <h:equation>
+ 2 \left(\alpha V'(JVB - JY) + \beta V'LVB + \delta D_B B\right)
+ </h:equation>
+ <p>
+ La fonction objectif est encore convexe par rapport
+ à <h:eq>B</h:eq>, et la fonction de gradient est aussi
+ Lipschitzienne, de constante :
+ </p>
+ <h:equation>
+ C_B = \alpha \rho (V'JV) + \beta \rho (L) \rho (V'V) + \delta \max (D_B)
+ </h:equation>
+ <p>
+ Une itération de descente de gradient de pas <h:eq>\frac 1
+ {C_B}</h:eq> permet donc de diminuer la fonction de coût.
+ </p>
+ <h3>Algorithme final</h3>
+ <p>
+ L'algorithme complet <h:ref href="#algorithme-rsms"/> consiste
+ simplement à alterner les étapes d'optimisation jusqu'à
+ convergence. On remarque que le calcul du pas d'apprentissage
+ nécessite d'obtenir la plus grande valeur propre de certaines
+ matrices : <h:eq>BB'</h:eq> de dimension <h:eq>m \times
+ m</h:eq>, <h:eq>V'V</h:eq> de dimension <h:eq>o \times o</h:eq>,
+ et <h:eq>X'X</h:eq> de dimension <h:eq>d \times d</h:eq> (dans
+ le cas de la sélection de variables, <h:eq>d</h:eq> peut être
+ grand) et <h:eq>L</h:eq> de dimension <h:eq>N \times N</h:eq>
+ (pour un problème d'apprentissage semi-supervisé, <h:eq>N</h:eq>
+ peut être grand). Heureusement, le calcul pour ces deux
+ dernières matrices peut être fait en amont.
+ </p>
+ <h:algorithm id="algorithme-rsms">
+ <alg:algorithmic>
+ <alg:donnée><h:eq>X \in \mathbb{R}^{N, d}</h:eq></alg:donnée>
+ <alg:donnée><h:eq>J</h:eq>, diagonale, indicatrice des données labellisées</alg:donnée>
+ <alg:donnée><h:eq>Y \in \mathbb{R}^{N, m}</h:eq></alg:donnée>
+ <alg:hyperparamètre>
+ <h:eq>\alpha > 0</h:eq>,
+ <h:eq>\beta > 0</h:eq>,
+ <h:eq>\gamma > 0</h:eq>,
+ <h:eq>\delta > 0</h:eq>
+ </alg:hyperparamètre>
+ <alg:hyperparamètre><h:eq>o \in \{1, ..., m\}</h:eq></alg:hyperparamètre>
+ <alg:hyperparamètre>
+ matrice Laplacienne du graphe des individus, <h:eq>L \in
+ \mathbb{R}^{N, N}</h:eq>
+ </alg:hyperparamètre>
+ <alg:initialisation>
+ <alg:state>
+ <h:eq>B</h:eq> : matrice diagonale rectangulaire
+ </alg:state>
+ <alg:state>
+ <h:eq>W \gets \left[X' J X + \epsilon I\right]^{-1} X'JYB</h:eq>
+ </alg:state>
+ <alg:state>
+ <h:eq>V \gets X W</h:eq>
+ </alg:state>
+ <alg:state>
+ <h:eq>D_W \gets I_{d}</h:eq>
+ </alg:state>
+ <alg:state>
+ <h:eq>D_B \gets I_{m}</h:eq>
+ </alg:state>
+ </alg:initialisation>
+ <alg:itération>
+ <alg:state>
+ <h:eq>C_W \gets \rho (X'X) + \gamma \max (D_W)</h:eq>
+ </alg:state>
+ <alg:state>
+ <h:eq>W \gets W - \frac 2 {C_W} (X' (XW - V) + \gamma D_W W)</h:eq>
+ </alg:state>
+ <alg:state>
+ <h:eq>\forall j, \quad {D_W}_{j, j} \gets \frac 1 {2 \left\|W_{j, .}\right\|_2}</h:eq>
+ </alg:state>
+ <alg:state>
+ <h:eq>C_V \gets 1 + \left(\alpha + \beta \rho (L)\right) \rho (BB')</h:eq>
+ </alg:state>
+ <alg:state>
+ <h:eq>V \gets V - \frac 2 {C_V} (V - X W + \alpha JVB' - \alpha JYB' + \beta L V B B')</h:eq>
+ </alg:state>
+ <alg:state>
+ <h:eq>C_B \gets \alpha \rho (V'JV) + \beta \rho (L) \rho (V'V) + \delta \max (D_B)</h:eq>
+ </alg:state>
+ <alg:state>
+ <h:eq>B \gets B - \frac 2 {C_B} (\alpha V'(JVB - JY) + \beta V'LVB + \delta D_B B)</h:eq>
+ </alg:state>
+ <alg:state>
+ <h:eq>\forall l, \quad {D_B}_{l, l} \gets \frac 1 {2 \left\|B_{., l}\right\|_2}</h:eq>
+ </alg:state>
+ </alg:itération>
+ <alg:résultat>
+ les variables sélectionnées sont les lignes
+ de <h:eq>W</h:eq> de norme minimale
+ </alg:résultat>
+ <alg:résultat>
+ les labels sélectionnés sont les colonnes de <h:eq>B</h:eq>
+ de norme minimale
+ </alg:résultat>
+ </alg:algorithmic>
+ <figcaption>
+ Algorithme <strong>RSMS</strong> : sélection de variables
+ </figcaption>
+ </h:algorithm>
+ <h2>Étude expérimentale</h2>
+ <p>
+ Pour évaluer la pertinence de notre approche de sélection de
+ variables et de labels, nous proposons une étude expérimentale
+ qui met en concurrence <strong>RSMS</strong>, <emph>SFUS</emph>
+ <h:cite href="sfus"/>, <emph>RFS</emph> <h:cite href="rfs"/>
+ et <emph>MIFS</emph> <h:cite href="mifs"/>.
+ </p>
+ <p>
+ L'algorithme <emph>MIFS</emph> est l'algorithme sur lequel nous
+ nous sommes fondés. Il reprend la sélection de variables
+ multi-labels semi-supervisée pour la régression
+ <h:ref href="#rappel-mifs"/>, et son optimisation est également
+ effectuée par descente de gradient alternée.
+ </p>
+ <h:mini id="rappel-mifs">
+ <h:variables>
+ W \in \mathbb{R}^{d, o},
+ V \in \mathbb{R}^{n, o},
+ B \in \mathbb{R}^{o, m}
+ </h:variables>
+ <h:objective>
+ \left\|XW - V\right\|_F^2
+ + \alpha \left\|Y - VB\right\|_F^2
+ + \beta \mathrm{tr} \left(V'LV\right)
+ + \gamma \left\|W\right\|_{2, 1}
+ </h:objective>
+ </h:mini>
+ <p>
+ L'algorithme RFS utilise la norme <h:eq>l_{2, 1}</h:eq>
+ exclusivement dans la fonction objectif. Ceci permet d'ignorer
+ certains individus pour la construction du
+ modèle <h:eq>W</h:eq>. Si le jeu de données contient des
+ anomalies, la sélection de variables est rendue plus robuste de
+ ce point de vue, d'où son nom, <emph>Robust Feature
+ Selection</emph>.
+ </p>
+ <h:mini id="rappel-rfs">
+ <h:variables>
+ W \in \mathbb{R}^{d, m}
+ </h:variables>
+ <h:objective>
+ \left\|XW - Y\right\|_{2, 1}^2
+ + \alpha \left\|W\right\|_{2, 1}
+ </h:objective>
+ </h:mini>
+ <p>
+ Enfin, l'algorithme <emph>SFUS</emph> se fonde sur l'idée de
+ <emph>RFS</emph>, à savoir l'utilisation de la
+ norme <h:eq>l_{2,1}</h:eq> pour pouvoir ignorer certains
+ individus, et une décomposition de rang faible du modèle.
+ </p>
+ <h:mini id="rappel-sfus">
+ <h:variables>
+ W \in \mathbb{R}^{d, m},
+ P \in \mathbb{R}^{o, m},
+ Q \in \mathbb{R}^{d, o}
+ </h:variables>
+ <h:objective>
+ \left\|XW - Y\right\|_{2, 1}^2
+ + \alpha \left\|W\right\|_{2, 1}
+ + \beta \left\|W - QP\right\|_F^2
+ </h:objective>
+ <h:add-constraint>
+ <h:left>Q'Q = I</h:left>
+ </h:add-constraint>
+ </h:mini>
+ <h3>Jeux de données utilisées</h3>
+ <p>
+ Les jeux de données utilisés sont les suivants
+ <h:cite href="spyromitros_xioufis_multi_target_2016,sarcos"/> :
+ <emph>atp1d</emph>,
+ <emph>atp7d</emph>,
+ <emph>edm</emph>,
+ <emph>enb</emph>,
+ <emph>oes10</emph>,
+ <emph>oes97</emph>,
+ <emph>osales</emph>,
+ <emph>scpf</emph>,
+ <emph>sf1</emph>,
+ <emph>sf2</emph>,
+ <emph>wq</emph>,
+
+ comme pour le test de l'algorithme <emph>LSMR</emph> défini dans
+ le chapitre précédent.
+ </p>
+ <h3>Algorithmes utilisés</h3>
+ <p>
+ Pour cette étude expérimentale, nous avons sélectionné quatre
+ algorithmes de sélection de variables multi-labels.
+ </p>
+ <p>
+ Premièrement, l'algorithme <emph>MIFS</emph>. Cet algorithme
+ n'est pas conçu pour l'apprentissage semi-supervisé ; cependant
+ sa fonction objectif ainsi que son algorithme d'optimisation
+ peuvent très simplement utiliser l'information de tous les
+ individus, y compris ceux non labellisés. C'est cette version
+ que nous avons utilisée pour la comparaison. À cet algorithme,
+ nous ajoutons deux algorithmes de sélection de variables
+ multi-labels, l'algorithme <emph>SFUS</emph>
+ <h:cite href="sfus"/> et l'algorithme <emph>RFS</emph>
+ <h:cite href="rfs"/> décrit ci-dessus.
+ </p>
+ <p>
+ Puisque notre approche est destinée à effectuer de la sélection
+ de variables, nous devons tester les performances d'un
+ algorithme de régression multi-labels quelconque qui apprendrait
+ avec différents sous-ensembles des variables (et éventuellement
+ des labels) sélectionnés. Étant donné qu'il faille effectuer un
+ apprentissage différent pour chaque sous-ensemble de variables
+ et chaque sous-ensemble de labels, sans possibilité de
+ réutilisation des valeurs des hyperparamètres, nous avons choisi
+ l'algorithme avec un tuning plus limité. Par conséquent, les
+ valeurs obtenues ne sont pas exactement les mêmes que pour le
+ chapitre précédent.
+ </p>
+ <h3>Protocole expérimental</h3>
+ <p>
+ Pour chaque algorithme et chaque jeu de données, on recherche
+ les valeurs optimales des hyperparamètres en suivant une
+ procédure de tuning optimisant la valeur moyenne de la métrique
+ <emph>aRMSE</emph> selon une validation croisée à 10 folds. Une fois ces
+ hyperparamètres déterminés, les variables (et dans le cas de
+ <strong>RSMS</strong>, les labels) sont triés par ordre
+ d'importance.
+ </p>
+ <p>
+ L'évaluation de la sélection de variables s'effectue de la façon
+ suivante. Pour une certaine fraction de variables, pour chaque
+ algorithme, on détermine les valeurs des hyperparamètres de
+ l'algorithme d'évaluation <emph>LSMR</emph> en suivant une
+ recherche aléatoire qui minimise l'erreur aRMSE moyenne sur les
+ 10 folds de la validation croisée. La partie de test réservée
+ pour chaque jeu de données permet d'évaluer
+ l'algorithme <emph>LSMR</emph>. Le nombre d'individus labellisés
+ est fixé à 30%. L'opération est répétée 10 fois avec différents
+ ensembles de test et différents individus labellisés.
+ </p>
+ <h3>Évaluation de la sélection de variables</h3>
+ <p>
+ Nous avons tout d'abord étudié la performance de la sélection de
+ variables pour les différents algorithmes sur les différents
+ jeux de données. En fixant le nombre de labels conservés à 100%,
+ et le nombre d'individus labellisés à 30%, on obtient une courbe
+ pour chaque jeu de données, pour la métrique aRMSE
+ <h:ref href="#fig-rsms_1"/>.
+ </p>
+ <p>
+ Les résultats sont agrégés dans la table
+ <h:ref href="#tbl-rsms-evaluation-agrege"/>. Nous avons pour
+ chaque jeu de données, chaque algorithme, et chaque pourcentage
+ de variables conservées, calculé le rang de chaque algorithme
+ (entre 1 et 4). Nous montrons le rang moyen de chaque approche
+ sur l'ensemble des pourcentages de variables sélectionnées.
+ </p>
+ <table latex-align="l|cccc">
+ <caption id="tbl-rsms-evaluation-agrege">
+ Rang moyen de <emph>LSMR</emph> après sélection de variables
+ multi-labels
+ </caption>
+ <thead>
+ <tr>
+ <th>Jeu de données</th>
+ <th><strong>RSMS</strong></th>
+ <th><emph>MIFS</emph></th>
+ <th><emph>SFUS</emph></th>
+ <th><emph>RFS</emph></th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>atp1d</td>
+ <td><strong>1.9 [1]</strong></td>
+ <td>2.1 [2]</td>
+ <td>3.2 [4]</td>
+ <td>2.8 [3]</td>
+ </tr>
+ <tr>
+ <td>atp7d</td>
+ <td>2.5 [2]</td>
+ <td>3.2 [4]</td>
+ <td><strong>1.3 [1]</strong></td>
+ <td>3.0 [3]</td>
+ </tr>
+ <tr>
+ <td>edm</td>
+ <td><strong>1.8 [1]</strong></td>
+ <td>3.2 [4]</td>
+ <td>2.3 [2]</td>
+ <td>2.7 [3]</td>
+ </tr>
+ <tr>
+ <td>enb</td>
+ <td>2.3 [2]</td>
+ <td>3.4 [4]</td>
+ <td><strong>1.8 [1]</strong></td>
+ <td>2.5 [3]</td>
+ </tr>
+ <tr>
+ <td>oes10</td>
+ <td>2.8 [3]</td>
+ <td>2.2 [2]</td>
+ <td>3.0 [4]</td>
+ <td><strong>2.0 [1]</strong></td>
+ </tr>
+ <tr>
+ <td>oes97</td>
+ <td>2.5 [3]</td>
+ <td>3.6 [4]</td>
+ <td><strong>1.8 [1]</strong></td>
+ <td>2.1 [2]</td>
+ </tr>
+ <tr>
+ <td>osales</td>
+ <td>2.8 [4]</td>
+ <td>2.0 [2]</td>
+ <td><strong>1.25 [1]</strong></td>
+ <td>2.4 [3]</td>
+ </tr>
+ <tr>
+ <td>scpf</td>
+ <td><strong>2.1 [1]</strong></td>
+ <td>2.4 [2]</td>
+ <td>3.1 [4]</td>
+ <td>2.4 [3]</td>
+ </tr>
+ <tr>
+ <td>sf1</td>
+ <td><strong>1.9 [1]</strong></td>
+ <td>2.7 [3]</td>
+ <td>3.4 [4]</td>
+ <td>2.0 [3]</td>
+ </tr>
+ <tr>
+ <td>sf2</td>
+ <td>2.3 [2.5]</td>
+ <td><strong>1.7 [1]</strong></td>
+ <td>3.7 [4]</td>
+ <td>2.3 [2.5]</td>
+ </tr>
+ <tr>
+ <td>wq</td>
+ <td><strong>1.7 [1]</strong></td>
+ <td>2.6 [3]</td>
+ <td>2.4 [2]</td>
+ <td>3.3 [4]</td>
+ </tr>
+ </tbody>
+ </table>
+ <p>
+ Si l'on calcule le rang moyen de chaque algorithme sur toutes
+ les fractions de variables sélectionnées et tous les jeux de
+ données, on obtient le résultat suivant :
+ </p>
+ <ol>
+ <li><strong>RSMS</strong> : <strong>2.21</strong></li>
+ <li><emph>RFS</emph> : 2.50</li>
+ <li><emph>SFUS</emph> : 2.55</li>
+ <li><emph>MIFS</emph> : 2.70</li>
+ </ol>
+ <figure>
+ <img src="images/rsms_1.svg" />
+ <figcaption id="fig-rsms_1">
+ Évaluation de la sélection de variables par <emph>LSMR</emph>
+ </figcaption>
+ </figure>
+ <p>
+ La figure <h:ref href="#fig-rsms_1"/> montre les résultats
+ obtenus pour chaque jeu de données. On observe les faits
+ suivants :
+ </p>
+ <ul>
+ <li>
+ Pour <emph>atp1d</emph>,
+ <emph>atp7d</emph>,
+ <emph>edm</emph>,
+ <emph>enb</emph>,
+ <emph>scpf</emph> et <emph>sf1</emph>, la courbe d'erreur a un
+ minimum global en ne sélectionnant qu'un certain nombre de
+ variables. Pour <emph>edm</emph>, le choix de la première
+ variable sélectionnée est très important.
+ </li>
+ <li>
+ Pour <emph>oes10</emph>,
+ <emph>oes97</emph>,
+ <emph>sf2</emph> et <emph>wq</emph>, la sélection de variables
+ n'est pas pertinente puisque l'erreur minimale s'obtient en
+ sélectionnant toutes les variables, quelle que soit l'approche
+ étudiée.
+ </li>
+ <li>
+ Pour <emph>osales</emph>, la sélection de variables est très
+ mauvaise pour RSMS. Pour les autres jeux de données pour
+ lesquels la sélection de variables est
+ pertinente, <emph>atp1d</emph>, <emph>atp7d</emph>,
+ <emph>edm</emph>, et <emph>enb</emph> obtiennent le minimum
+ global avec <strong>RSMS</strong>. <emph>sf1</emph> observe le
+ minimum global avec <emph>RFS</emph>, et <emph>scpf</emph>
+ avec <emph>MIFS</emph> (0.9575 pour <emph>MIFS</emph> contre
+ 0.9581 pour <strong>RSMS</strong>).
+ </li>
+ </ul>
+ <h3>Sélection de labels</h3>
+ <p>
+ Pour la sélection de labels, nous cherchons à observer quels
+ sont les labels qui sont les plus faciles à apprendre. Pour ce
+ faire, on garde 30% des variables pour l'apprentissage, et on
+ évalue la performance de l'algorithme <emph>LSMR</emph> en ne
+ conservant que 20%, 40%, 60%, 80% et 100% des labels.
+ </p>
+ <figure>
+ <img src="images/rsms_2.svg" />
+ <figcaption id="fig-rsms_2">
+ Évaluation de la sélection de labels de <strong>RSMS</strong>
+ par <emph>LSMR</emph>
+ </figcaption>
+ </figure>
+ <p>
+ La figure <h:ref href="#fig-rsms_2"/> montre la courbe de
+ sélection de labels pour chaque jeu de données. On retrouve
+ différent cas de figure :
+ </p>
+ <ul>
+ <li>
+ Pour <emph>atp1d</emph>, <emph>atp7d</emph>, <emph>enb</emph>,
+ <emph>osales</emph> et <emph>wq</emph>, la sélection de label
+ permet de trouver un nombre de labels pour lequel l'erreur est
+ minimale, de sorte qu'en sélectionnant moins de labels
+ l'erreur augmente et en en sélectionnant plus l'erreur
+ augmente également.
+ </li>
+ <li>
+ Pour <emph>oes10</emph>, <emph>scpf</emph>
+ et <emph>sf1</emph>, l'erreur est minimale si l'on ne garde
+ que le nombre minimum de labels.
+ </li>
+ <li>
+ Pour <emph>edm</emph>, <emph>oes97</emph> et <emph>sf2</emph>,
+ sélectionner tous les labels donne une erreur de régression
+ plus faible.
+ </li>
+ </ul>
+ <h3>Sélection de labels au service de la sélection de variables</h3>
+ <p>
+ Concrètement, si certains labels ne peuvent pas être bien
+ expliqués globalement par les variables en jeu, ils sont
+ simplement ignorés dans la sélection de variables. Dans ce cas,
+ nous comparons le résultat de l'apprentissage en conservant 80%
+ des labels, contre le résultat pour 100% des labels. Dans le cas
+ où le jeu de données a moins de 5 labels, on en conserve moins,
+ pour observer une différence :
+ </p>
+ <ul>
+ <li>pour <emph>edm</emph> et <emph>enb</emph>, on ne conserve
+ qu’un label ;</li>
+ <li>pour <emph>scpf</emph>, <emph>sf1</emph>
+ et <emph>sf2</emph>, on en conserve 2 ;</li>
+ </ul>
+ <figure>
+ <img src="images/rsms_3.svg" />
+ <figcaption id="fig-rsms_3">
+ Comparaison de la sélection de variables pour tous les labels,
+ et pour un nombre restreint de labels
+ </figcaption>
+ </figure>
+ <p>
+ La figure <h:ref href="#fig-rsms_3"/> montre la différence entre
+ la sélection de variables seule et la sélection de variables
+ avec sélection de labels. Les courbes obtenues indiquent
+ qu'éliminer 20% des labels donne une meilleure erreur de
+ régression. Les exceptions sont <emph>enb</emph>, d'une part,
+ et <emph>oes10</emph>, <emph>oes97</emph> et <emph>sf2</emph>
+ d'autre part, pour lesquels la sélection de variables n'est tout
+ simplement pas pertinente. Le fait que les courbes semblent
+ simplement translatées en sélectionnant les labels, sans changer
+ la position du minimum, indique que les variables sélectionnées
+ ne sont pas pertinentes pour les labels ignorés, ce qui était le
+ but de notre approche.
+ </p>
+ <h3>Convergence de l'algorithme</h3>
+ <p>
+ Dans cette section, nous vérifions expérimentalement que notre
+ approche converge en 100 itérations, ce qui est utilisé pour
+ l'obtention de l'ordre des variables et des labels, comme
+ utilisé dans les deux sections précédentes.
+ </p>
+ <figure>
+ <img src="images/rsms_4.svg" />
+ <figcaption id="fig-rsms_4">
+ Courbes de convergence de l'algorithme de sélection de
+ variables *RSMS* avec écart-type
+ </figcaption>
+ </figure>
+ <p>
+ La figure <h:ref href="#fig-rsms_4"/> montre les résultats
+ obtenus pour chaque jeu de données. On observe les faits
+ suivants :
+ </p>
+ <ul>
+ <li>La méthode converge en moins de 100 itérations.</li>
+ <li>La convergence s'observe entre 10 itérations
+ (pour <emph>osales</emph>) et 50 itérations
+ (pour <emph>wq</emph>)</li>
+ <li>Pour les jeux de données <emph>sf1</emph>
+ et <emph>sf2</emph>, la convergence s'opère très rapidement,
+ mais la fonction de coût reste importante.</li>
+ </ul>
+ <h2>Conclusion</h2>
+ <p>
+ Dans ce chapitre, nous avons proposé un algorithme de sélection
+ de variables pour la régression multi-labels en mode
+ semi-supervisée. Nous avons utilisé l'hypothèse selon laquelle
+ la sélection de labels peut être au service de la sélection de
+ variables.
+ </p>
+ <p>
+ Nous avons montré expérimentalement que notre approche est
+ compétitive avec l'état de l'art de sélection de variables en
+ régression multi-labels. Nous avons également montré la
+ pertinence de la sélection de labels, pour déduire les labels
+ dont l'apprentissage est plus facile, ce qui guide la sélection
+ de variables à superformer davantage.
+ </p>
+ <h1 short="Application">
+ Application à l’annotation automatique de pneumatiques
+ </h1>
+ <h:résumé-chapitre>
+ <p>
+ Dans ce chapitre, nous présentons le cadre d'annotation
+ automatique que nous avons développé pour notre partenaire
+ industriel Lizeo IT. Dans le cadre de cette thèse, nous sommes
+ confrontés à un problème réel nécessitant un apprentissage
+ semi-supervisé multi-labels. Nous évaluons la batterie
+ d'algorithmes développés pour les deux tâches principales, à
+ savoir la régression et la sélection de variables. Nous
+ proposons également une adaptation de ces algorithmes afin de
+ traiter le problème dans le cas où le nombre d'individus est
+ important.
+ </p>
+ </h:résumé-chapitre>
+ <h2>Introduction</h2>
+ <p>
+ Étant dans le cadre d'une convention CIFRE, cette thèse doit
+ proposer un bon compromis entre l'aspect fondamental développé
+ dans les chapitres précédents et l'aspect applicatif en validant
+ nos modèles sur les jeux de données de l'entreprise. Ces données
+ sont de nature textuelle et définissent différentes
+ caractéristiques sur les pneumatiques.
+ </p>
+ <h2>Présentation de l’entreprise</h2>
+ <p>
+ Le cœur de métier du groupe international Lizeo (et de ses
+ filiales aux États-Unis, à Shanghai et à Lyon) consiste à
+ étudier les données relatives à l'industrie automobile, et en
+ particulier les pneumatiques. L'activité de Lizeo se décompose
+ en deux axes :
+ </p>
+ <ul>
+ <li>
+ l'activité <emph>B2B</emph> (<emph>Business to
+ Business</emph>), qui consiste à traiter des données telles
+ que les caractéristiques techniques, les prix, les
+ évaluations, voire les photos et descriptions, à destination
+ des entreprises s'intéressant au marché du pneumatique,
+ </li>
+ <li>
+ l'activité <emph>B2C</emph> (<emph>Business to
+ Consumer</emph>), en particulier représentée par son site
+ vitrine <a href="http://pneu.rezulteo.fr">http://pneu.rezulteo.fr</a>,
+ un comparateur de pneumatiques à destination du public.
+ </li>
+ </ul>
+ <p>
+ Parmi l'ensemble des données dont dispose Lizeo IT, nous
+ retrouvons (cf figure <h:ref href="#fig-lizeo-donnees"/>) :
+ </p>
+ <ul>
+ <li>
+ des produits, c'est-à-dire des pneumatiques, avec leurs
+ caractéristiques techniques, les résultats des tests, ou les
+ évaluations d'experts ;
+ </li>
+ <li>
+ des prix, collectés auprès des revendeurs ou par aspiration de
+ sites vendeurs ;
+ </li>
+ <li>
+ des données de véhicules associées aux pneumatiques ;
+ </li>
+ <li>
+ des données des distributeurs, qui permettent notamment de les
+ identifier et les localiser ;
+ </li>
+ <li>
+ et enfin, ce qui nous intéresse tout particulièrement, des
+ avis des consommateurs, présents sur des forums, et les média
+ sociaux.
+ </li>
+ </ul>
+ <figure>
+ <img src="images/lizeo-donnees.png" />
+ <figcaption id="fig-lizeo-donnees">
+ Résumé des données collectées par Lizeo dans le cadre de son
+ activité (communication interne)
+ </figcaption>
+ </figure>
+ <p>
+ Les travaux actuels de l'équipe R&amp;D du groupe portent sur
+ différents thèmes :
+ </p>
+ <ul>
+ <li>
+ l'analyse textuelle des avis du public et des experts des
+ produits, dont cette thèse fait partie, mais qui vise aussi à
+ la découverte automatique de thématiques ;
+ </li>
+ <li>
+ l'analyse du cycle de vie des produits à partir des volumes de
+ prix aspirés sur les sites de vente en ligne, afin de savoir
+ si un pneumatique est récent, ou plus utilisé ;
+ </li>
+ <li>
+ l'analyse des prix des produits, avec en particulier la
+ détection d'anomalies dans les séries temporelles, afin de
+ détecter les problèmes dans l'aspiration des prix des
+ pneumatiques sur le web (ce qui est préjudiciable pour un
+ comparateur de pneumatiques) ;
+ </li>
+ <li>
+ la prédiction de volumes marchés et de prix.
+ </li>
+ </ul>
+ <h2>Description du jeu de données</h2>
+ <p>
+ L'entreprise Lizeo IT, dans le cadre de son activité B2B,
+ propose d'effectuer une veille des pneumatiques dans des
+ ressources sur le web, telles que des forums, des articles
+ spécialisés et des tweets. Concrètement, chaque document est un
+ texte, la plupart étant plutôt courts (note de forum ou tweet),
+ traitant d'un ou de plusieurs produits.
+ </p>
+ <p>
+ L'analyse de ces documents est cruciale pour Lizeo. La
+ perception qu'ont les consommateurs des produits est une donnée
+ d'importance, tant pour les manufacturiers que pour les
+ distributeurs.
+ </p>
+ <p>
+ On peut décrire chaque produit à partir de différentes
+ caractéristiques, appelées <emph>qualifier</emph> dans le jeu de
+ données. Les experts ont identifié de
+ nombreux <emph>qualifier</emph>. On peut par exemple citer le
+ prix du produit, le bruit, la tenue sur route, ainsi que
+ des <emph>qualifier</emph> plus précis : la tenue sur route
+ humide, ou enneigée. Les <emph>qualifier</emph> sont ainsi
+ conçus comme une hiérarchie. Il y a de
+ nombreux <emph>qualifier</emph> dans le jeu de données, mais
+ nous avons retenu les 97 qui sont employés plus de 10 fois.
+ </p>
+ <p>
+ Pour un document donné à propos d'un certain produit, un premier
+ objectif du traitement consiste à indiquer, pour chaque
+ <emph>qualifier</emph>, si celui-ci est pertinent. Concrètement,
+ si le document comporte un commentaire sur le bruit d'un
+ produit, il faut indiquer le <emph>qualifier</emph> "bruit".
+ </p>
+ <p>
+ Ce problème se traduit en un problème d'apprentissage de
+ classification multi-labels : l'unité statistique est le
+ document, les variables descriptives sont des variables
+ textuelles, et les labels (binaires) sont
+ les <emph>qualifier</emph>. Ce problème de classification,
+ résumé par la figure <h:ref href="#fig-lizeo-classification"/>,
+ n'est cependant pas notre objectif principal.
+ </p>
+ <figure>
+ <img src="images/lizeoclassif.svg" />
+ <figcaption id="fig-lizeo-classification">
+ Première étape du traitement du jeu de données Lizeo IT :
+ apprentissage de classification binaire multi-labels
+ </figcaption>
+ </figure>
+ <p>
+ Si un <emph>qualifier</emph> est pertinent pour un certain
+ produit de l'un des documents, la question qui nous intéresse
+ est la suivante : les termes employés évoquent-ils ce qualifier
+ d'une façon positive ou péjorative ? Nous définissons pour cela
+ la <emph>tonalité</emph> d'une qualification d'un document comme
+ un nombre réel. Une valeur positive de la tonalité indique un
+ sentiment positif. Une valeur nulle indique un sentiment neutre,
+ et une valeur négative un sentiment négatif. Nous traitons ce
+ problème par un apprentissage de régression multi-labels, figure
+ <m:ref href="#fig-lizeoreg"/>.
+ </p>
+ <figure>
+ <img src="images/lizeoreg.svg" />
+ <figcaption id="fig-lizeoreg">
+ Apprentissage de régression multi-labels de la tonalité
+ </figcaption>
+ </figure>
+ <h2>Traitement des données textuelles</h2>
+ <p>
+ Dans le jeu de données utilisé, il se peut qu'il y ait une
+ comparaison entre deux produits sur les mêmes critères. Dans ce
+ cas, on ne verra que la moyenne pour l'apprentissage. Ceci donne
+ parfois des valeurs non entières pour les labels.
+ </p>
+ <p>
+ Afin d'évaluer les performances de la sélection de variables et
+ de la sélection de labels, nous étudions un sous-ensemble des
+ données regroupant les caractéristiques suivantes :
+ </p>
+ <ol>
+ <li>Il s'agit de documents (appelés parfois posts) en français ;</li>
+ <li>Les documents sont tous labellisés ;</li>
+ <li>Il y a 84 907 documents ;</li>
+ <li>
+ La distribution du nombre de /qualifiers/ est documentée par
+ la table <h:ref href="#tbl-distrib-qualifiers-restreint"/>. On
+ constate qu'il y a 30 145 documents associés à aucun
+ qualifier, il ne s'agit pourtant pas d'individus non
+ labellisés, car nous savons qu'aucun des critères retenus ne
+ s'applique sur ces documents. Dans notre cadre de régression,
+ ceci signifie que toutes les tonalités doivent être neutres ;
+ </li>
+ <li>
+ Les 10 qualifiers les plus fréquents sont résumés dans la
+ table <h:ref href="#tbl-summary-frequent-qualifiers"/>, ce qui
+ correspond à 69% de toutes les qualifications.
+ </li>
+ </ol>
+ <table latex-align="rr">
+ <caption id="tbl-distrib-qualifiers-restreint">
+ Distribution du nombre de qualifiers par document
+ </caption>
+ <thead>
+ <tr>
+ <th>Nombre de <emph>qualifiers</emph></th>
+ <th>Nombre de documents</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr><td>0</td><td>30145</td></tr>
+ <tr><td>1</td><td>31723</td></tr>
+ <tr><td>2</td><td>12372</td></tr>
+ <tr><td>3</td><td>5350</td></tr>
+ <tr><td>4</td><td>2710</td></tr>
+ <tr><td>5</td><td>1321</td></tr>
+ <tr><td>6</td><td>653</td></tr>
+ <tr><td>7</td><td>310</td></tr>
+ <tr><td>8</td><td>160</td></tr>
+ <tr><td>9</td><td>89</td></tr>
+ <tr><td>10</td><td>48</td></tr>
+ <tr><td>Entre 11 et 37</td><td>53</td></tr>
+ </tbody>
+ </table>
+ <p>
+ Les labels ont une arborescence. On retrouve :
+ </p>
+ <ul>
+ <li>la réputation d'un produit ;</li>
+ <li>l’usure ;</li>
+ <li>la satisfaction du consommateur ;</li>
+ <li>
+ la sécurité, en évaluant la traction sur route sèche, humide
+ ou enneigée ;
+ </li>
+ <li>le prix ;</li>
+ <li>le confort ;</li>
+ <li>et même l'esthétique du produit.</li>
+ </ul>
+ <table latex-align="rrlrr">
+ <caption id="tbl-summary-frequent-qualifiers">
+ Résumé des qualifieurs les plus fréquents parmi les 97
+ (<emph>Cons. feedback</emph> est l'abréviation
+ de <emph>Consumer feedback</emph>, retour client,
+ et <emph>sat.</emph> de <emph>satisfaction</emph>).
+ </caption>
+ <thead>
+ <tr>
+ <th>N<sup>o</sup></th>
+ <th>Nombre</th>
+ <th>Nom</th>
+ <th>Médiane</th>
+ <th>Moyenne</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>59</td>
+ <td>31.82%</td>
+ <td>Characteristics / Image / Reputation</td>
+ <td>-1.000</td>
+ <td>-0.598</td>
+ </tr>
+ <tr>
+ <td>483</td>
+ <td>25.07%</td>
+ <td>Performances / Wear life / Wear life</td>
+ <td>0.000</td>
+ <td>-0.198</td>
+ </tr>
+ <tr>
+ <td>52</td>
+ <td>19.41%</td>
+ <td>Performances / Cons. feedback / Overall sat.</td>
+ <td>-1.000</td>
+ <td>-0.936</td>
+ </tr>
+ <tr>
+ <td>549</td>
+ <td>11.07%</td>
+ <td>Performances / Safety / Traction</td>
+ <td>-0.750</td>
+ <td>-0.538</td>
+ </tr>
+ <tr>
+ <td>506</td>
+ <td>7.99%</td>
+ <td>Performances / Ride performance / Noise</td>
+ <td>0.000</td>
+ <td>-0.163</td>
+ </tr>
+ <tr>
+ <td>494</td>
+ <td>7.68%</td>
+ <td>Performances / Safety / Handling</td>
+ <td>-1.000</td>
+ <td>-0.579</td>
+ </tr>
+ <tr>
+ <td>780</td>
+ <td>6.95%</td>
+ <td>Performances / Safety / Wet traction</td>
+ <td>-0.500</td>
+ <td>-0.419</td>
+ </tr>
+ <tr>
+ <td>782</td>
+ <td>5.72%</td>
+ <td>Performances / Safety / Snow/Winter traction</td>
+ <td>-0.667</td>
+ <td>-0.582</td>
+ </tr>
+ <tr>
+ <td>495</td>
+ <td>5.30%</td>
+ <td>Performances / Safety / Steering</td>
+ <td>0.000</td>
+ <td>-0.090</td>
+ </tr>
+ <tr>
+ <td>61</td>
+ <td>4.78%</td>
+ <td>Characteristics / Image / Intent to purchase</td>
+ <td>-1.000</td>
+ <td>-0.583</td>
+ </tr>
+ <tr>
+ <td>21</td>
+ <td>4.11%</td>
+ <td>Performances / Safety / Safety</td>
+ <td>-0.333</td>
+ <td>-0.386</td>
+ </tr>
+ <tr>
+ <td>60</td>
+ <td>3.87%</td>
+ <td>Characteristics / Image / Test results</td>
+ <td>-0.333</td>
+ <td>-0.572</td>
+ </tr>
+ <tr>
+ <td>491</td>
+ <td>3.61%</td>
+ <td>Performances / Environment / Environment</td>
+ <td>0.000</td>
+ <td>-0.473</td>
+ </tr>
+ <tr>
+ <td>58</td>
+ <td>3.49%</td>
+ <td>Performances / Cons. feedback / Recommendation</td>
+ <td>-1.000</td>
+ <td>-0.720</td>
+ </tr>
+ <tr>
+ <td>781</td>
+ <td>3.12%</td>
+ <td>Performances / Safety / Dry traction</td>
+ <td>-1.000</td>
+ <td>-0.831</td>
+ </tr>
+ <tr>
+ <td>132</td>
+ <td>3.03%</td>
+ <td>Attitude / Towards tyre type</td>
+ <td>-0.500</td>
+ <td>-0.389</td>
+ </tr>
+ <tr>
+ <td>488</td>
+ <td>2.55%</td>
+ <td>Performances / Wear life / Abnormal Wear</td>
+ <td>1.000</td>
+ <td>0.525</td>
+ </tr>
+ <tr>
+ <td>487</td>
+ <td>2.37%</td>
+ <td>Performances / Toughness/Robustness / <emph>&lt;idem></emph></td>
+ <td>0.000</td>
+ <td>-0.055</td>
+ </tr>
+ <tr>
+ <td>10</td>
+ <td>2.23%</td>
+ <td>Characteristics / Price / Value for money</td>
+ <td>-1.000</td>
+ <td>-1.014</td>
+ </tr>
+ <tr>
+ <td>484</td>
+ <td>2.16%</td>
+ <td>Performances / Wear life / Ageing</td>
+ <td>0.000</td>
+ <td>0.404</td>
+ </tr>
+ <tr>
+ <td>497</td>
+ <td>2.12%</td>
+ <td>Performances / Safety / Stopping distance</td>
+ <td>0.000</td>
+ <td>-0.390</td>
+ </tr>
+ <tr>
+ <td>489</td>
+ <td>2.01%</td>
+ <td>Characteristics / Price / Deal / Discount</td>
+ <td>-1.000</td>
+ <td>-0.573</td>
+ </tr>
+ <tr>
+ <td>558</td>
+ <td>2.00%</td>
+ <td>Performances / Track/Sport perf. / Track perf.</td>
+ <td>0.000</td>
+ <td>-0.474</td>
+ </tr>
+ <tr>
+ <td>504</td>
+ <td>1.92%</td>
+ <td>Performances / Ride perf. / Ride experience</td>
+ <td>-1.000</td>
+ <td>-0.616</td>
+ </tr>
+ <tr>
+ <td>505</td>
+ <td>1.65%</td>
+ <td>Performances / Ride perf. / Ride comfort</td>
+ <td>-0.500</td>
+ <td>-0.440</td>
+ </tr>
+ <tr>
+ <td>133</td>
+ <td>1.33%</td>
+ <td>Attitude / Towards tests</td>
+ <td>0.000</td>
+ <td>-0.288</td>
+ </tr>
+ <tr>
+ <td>784</td>
+ <td>1.31%</td>
+ <td>Performances / Safety / Off road traction</td>
+ <td>-0.667</td>
+ <td>-0.546</td>
+ </tr>
+ <tr>
+ <td>508</td>
+ <td>1.29%</td>
+ <td>Characteristics / Image / Look/aesthetic</td>
+ <td>0.000</td>
+ <td>-0.352</td>
+ </tr>
+ </tbody>
+ </table>
+ <p>
+ La table <h:ref href="#tbl-summary-frequent-qualifiers"/> permet
+ de faire la remarque suivante : pour les qualifieurs les plus
+ fréquents, la moyenne est souvent négative, et la médiane n'est
+ jamais positive. Le fait que la médiane ne soit pas toujours
+ entière tient aux posts faisant une comparaison de plusieurs
+ produits, comme expliqué plus haut.
+ </p>
+ <h2>Application de l'algorithme LSMR</h2>
+ <p>
+ Dans le cadre de cette application, nous sommes confrontés à un
+ jeu de données réel, ce qui pose de nouvelles contraintes. Pour
+ appliquer l'algorithme <emph>LSMR</emph>, nous avons dû
+ effectuer des adaptations de celui-ci afin de pouvoir
+ fonctionner dans un cas où le nombre
+ d'individus, <h:eq>N</h:eq>, est très grand. En effet,
+ l'application de l'algorithme <emph>LSMR</emph> demande une
+ décomposition en valeurs propres et vecteurs propres (partielle)
+ de la matrice noyau, <h:eq>K</h:eq>, de dimension <h:eq>N \times
+ N</h:eq>. Dans ce cas, on peut appliquer l'algorithme de Lanczos
+ <h:cite href="lanczos"/>, qui permet d'obtenir le résultat avec
+ une complexité de <h:eq>\mathcal{O} (s N ^ 2)</h:eq>. La
+ complexité spatiale, de manière bien plus prosaïque, est
+ déterminée par la construction et le stockage de la matrice
+ Laplacienne du graphe, <h:eq>L</h:eq>, et de la matrice noyau,
+ <h:eq>K</h:eq>, toutes deux de dimension <h:eq>N \times
+ N</h:eq>.
+ </p>
+ <p>
+ Afin de pouvoir effectuer une approximation de l'apprentissage
+ en un temps raisonnable, nous proposons une modification
+ ensembliste de l'algorithme <emph>LSMR</emph> adaptée à ce jeu
+ de données.
+ </p>
+ <h3>Méthode ensembliste : Bootstrap Aggregating</h3>
+ <p>
+ Afin de conserver une valeur de <h:eq>N</h:eq> acceptable, nous
+ tirons 20 différents sous-ensembles de 4000 points du jeu de
+ données avec remise, afin d'obtenir 20 jeux de données
+ différents de taille plus faible. Cette méthode est nommée
+ <emph>Bootstrap Aggregating</emph>, ou <emph>Bagging</emph>
+ <h:cite href="Breiman1996"/>.
+ </p>
+ <p>
+ Comme notre algorithme nécessite un certain nombre
+ d'hyperparamètres, nous considérons un sous-ensemble de
+ validation en plus des 4000 points pour le jeu
+ d'apprentissage. La métrique de validation <emph>aRMSE</emph>
+ est calculée pour chaque modèle, ce qui nous permet de
+ sélectionner les 10 candidats donnant la meilleure erreur de
+ régression.
+ </p>
+ <h3>Stacking</h3>
+ <p>
+ La méthode de <emph>bagging</emph> prévoit de traiter
+ l'apprentissage d'un modèle par ensemble. La prédiction pour un
+ nouvel individu s'effectue en prenant la moyenne de la
+ prédiction de tous les modèles, dans le cas de la régression.
+ </p>
+ <p>
+ Cette méthode a l'avantage de s'appliquer de manière naturelle dans le
+ cas de la régression multi-labels.
+ </p>
+ <p>
+ Nous utilisons aussi une deuxième approche d'agrégation, nommée
+ <emph>stacking</emph> <h:cite href="stacking"/>. Dans cette
+ approche, on considère un nouveau jeu de données
+ artificiel. Dans ce jeu de données, l'individu statistique est
+ toujours le même, mais il est décrit cette fois par les
+ prédictions de chacun des modèles retenus, et les labels sont
+ les mêmes que pour le jeu d'apprentissage original.
+ </p>
+ <p>
+ Étant donné le cadre multi-labels de l'apprentissage original,
+ nous considérons pour l'apprentissage par <emph>stacking</emph>
+ que les labels à ce stade sont indépendants. Pour chaque label,
+ on cherche donc à prédire la valeur du label en fonction des
+ prédictions de tous les modèles pour ce label.
+ </p>
+ <p>
+ Cette étape est également l'occasion de ne considérer dans le
+ jeu de données que les valeurs pertinentes. En effet, si l'on
+ revient à la construction du jeu de données, et si un
+ <emph>qualifier</emph> (label) n'est pas présent, la valeur
+ cible sera la valeur neutre, 0. Cependant, cette valeur n'est
+ pas vraiment pertinente pour l'apprentissage, ce qui pousse le
+ modèle à apprendre des valeurs faibles. Les prédictions sont
+ donc naturellement de norme inférieure à la vérité terrain. Pour
+ compenser ce biais, l'agrégation par label ne retient comme
+ individus que les posts présentant le <emph>qualifier</emph> en
+ question.
+ </p>
+ <p>
+ Enfin, pour éviter le sur-apprentissage, on ne considère pour
+ chaque modèle que les individus n'ayant pas servi à
+ l'apprentissage du modèle de <emph>bootstrap</emph>. Pour les
+ tâches de <emph>stacking</emph>, les valeurs de prédiction de
+ chaque modèle sur son jeu d'apprentissage sont remplacées par 0.
+ </p>
+ <p>
+ Le régresseur retenu est une régularisation <emph>ridge</emph>,
+ dont le régulariseur est recherché comme une puissance de 10
+ entre <h:eq>10^{-4}</h:eq> et <h:eq>10^{4}</h:eq>.
+ </p>
+ <h3>Résultats</h3>
+ <p>
+ En appliquant l'algorithme, sans effectuer de sélection de
+ variables, on obtient le résultat présenté en table
+ <h:ref href="#lizeo-lsmr-full"/>. Nous retenons que l'agrégation
+ par <emph>stacking</emph> avec régularisation Ridge donne un
+ meilleur résultat que l'agrégation moyenne.
+ </p>
+ <table latex-align="rr">
+ <caption id="lizeo-lsmr-full">
+ Application de l'algorithme <emph>LSMR</emph>,
+ avec <emph>bootstrap</emph>, toutes les variables, et les deux
+ agrégations possibles
+ </caption>
+ <thead>
+ <tr>
+ <th>Agrégation moyenne</th>
+ <th>Agrégation Ridge</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr><td>0.819</td><td>0.809</td></tr>
+ </tbody>
+ </table>
+ <h2>Comparaison d'algorithmes de sélection de variables</h2>
+ <p>
+ Afin d'évaluer la sélection de variables, nous avons sélectionné
+ 20 sous-ensembles de 4000 individus. La valeur des
+ hyperparamètres est obtenue en minimisant la métrique aRMSE du
+ modèle final. Nous évaluons deux autres algorithmes de sélection
+ de variables multi-labels : <emph>RFS</emph>
+ <h:cite href="rfs"/> et <emph>MIFS</emph>
+ <h:cite href="mifs"/>. Nous n'avons pas pu tuner et appliquer
+ l'algorithme <emph>SFUS</emph> en un temps raisonnable, à cause
+ de la décomposition en valeurs propres et vecteurs propres d'une
+ matrice <h:eq>d \times d</h:eq>.
+ </p>
+ <h3>RFS</h3>
+ <p>
+ L'algorithme <emph>RFS</emph> <h:cite href="rfs"/> effectue la
+ sélection de variables en minimisant le problème suivant :
+ </p>
+ <h:mini>
+ <h:variables>
+ W \in \mathbb{R}^{d, m}
+ </h:variables>
+ <h:objective>
+ \left\|XW - Y\right\|_{2, 1}^2
+ + \gamma \left\|W\right\|_{2, 1}
+ </h:objective>
+ </h:mini>
+ <p>
+ Ce problème utilise une régularisation <h:eq>l_{2, 1}</h:eq>,
+ mais utilise aussi cette même norme pour la fonction de
+ coût. Concrètement, cela permet d'ignorer certains individus
+ pour la sélection de variables.
+ </p>
+ <h3>MIFS</h3>
+ <p>
+ Nous utilisons aussi l'algorithme <emph>MIFS</emph>
+ <h:cite href="mifs"/>, qui est la base de notre approche
+ proposée. Pour rappel, le problème résolu par <emph>MIFS</emph>
+ est la minimisation suivante :
+ </p>
+ <h:mini>
+ <h:variables>
+ \substack{
+ W \in \mathbb{R}^{d, o} \\
+ V \in \mathbb{R}^{n, o} \\
+ B \in \mathbb{R}^{o, m}
+ }
+ </h:variables>
+ <h:objective>
+ \left\|XW - V\right\|_F^2
+ + \alpha \left\|Y - VB\right\|_F^2
+ + \beta \mathrm{tr} \left(V'LV\right)
+ + \gamma \left\|W\right\|_{2, 1}
+ </h:objective>
+ </h:mini>
+ <h3>Sélection de variables : étude préliminaire</h3>
+ <p>
+ Pour chaque sous-ensemble d'individus, on obtient une liste
+ ordonnée de variables. Pour calculer la sélection de variables
+ finale, nous calculons les rangs moyens de chaque variable pour
+ chaque algorithme. Les premières variables sont listées dans la
+ table <h:ref href="#tbl-lizeo-feature-selection"/>.
+ </p>
+ <table latex-align="lll">
+ <caption id="tbl-lizeo-feature-selection">
+ Sélection des 30 premières variables pour chaque algorithme.
+ </caption>
+ <thead>
+ <tr>
+ <th><strong>RSMS</strong></th>
+ <th><emph>MIFS</emph></th>
+ <th><emph>RFS</emph></th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><pre>disponible</pre></td>
+ <td><pre>classement\_adac</pre></td>
+ <td><pre>silence</pre></td>
+ </tr>
+ <tr>
+ <td><pre>d'origine</pre></td>
+ <td><pre>litres</pre></td>
+ <td><pre>accrochent</pre></td>
+ </tr>
+ <tr>
+ <td><pre>actuels</pre></td>
+ <td><pre>vii</pre></td>
+ <td><pre>flottement</pre></td>
+ </tr>
+ <tr>
+ <td><pre>sport</pre></td>
+ <td><pre>def\_90</pre></td>
+ <td><pre>bluffé</pre></td>
+ </tr>
+ <tr>
+ <td><pre>hiver</pre></td>
+ <td><pre>l'emergency</pre></td>
+ <td><pre>sécurisant</pre></td>
+ </tr>
+ <tr>
+ <td><pre>55</pre></td>
+ <td><pre>assez\_bon</pre></td>
+ <td><pre>décroche</pre></td>
+ </tr>
+ <tr>
+ <td><pre>véhicule</pre></td>
+ <td><pre>remonte</pre></td>
+ <td><pre>aquaplaning</pre></td>
+ </tr>
+ <tr>
+ <td><pre>malheureusement</pre></td>
+ <td><pre>90\_cv</pre></td>
+ <td><pre>regrette</pre></td>
+ </tr>
+ <tr>
+ <td><pre>3</pre></td>
+ <td><pre>defacyde</pre></td>
+ <td><pre>azenis</pre></td>
+ </tr>
+ <tr>
+ <td><pre>prix</pre></td>
+ <td><pre>rapprochement</pre></td>
+ <td><pre>l'abs</pre></td>
+ </tr>
+ <tr>
+ <td><pre>205</pre></td>
+ <td><pre>solidité</pre></td>
+ <td><pre>négatif</pre></td>
+ </tr>
+ <tr>
+ <td><pre>recherche</pre></td>
+ <td><pre>optimisées</pre></td>
+ <td><pre>routiers</pre></td>
+ </tr>
+ <tr>
+ <td><pre>r16</pre></td>
+ <td><pre>dois\_prendre</pre></td>
+ <td><pre>excellents</pre></td>
+ </tr>
+ <tr>
+ <td><pre>non</pre></td>
+ <td><pre>extended</pre></td>
+ <td><pre>pépère</pre></td>
+ </tr>
+ <tr>
+ <td><pre>4</pre></td>
+ <td><pre>attendant</pre></td>
+ <td><pre>demi</pre></td>
+ </tr>
+ <tr>
+ <td><pre>r17</pre></td>
+ <td><pre>l'exige</pre></td>
+ <td><pre>l'esp</pre></td>
+ </tr>
+ <tr>
+ <td><pre>été</pre></td>
+ <td><pre>justifie\_pas</pre></td>
+ <td><pre>soleil</pre></td>
+ </tr>
+ <tr>
+ <td><pre>l'indice</pre></td>
+ <td><pre>virages\_sans</pre></td>
+ <td><pre>mou</pre></td>
+ </tr>
+ <tr>
+ <td><pre>235</pre></td>
+ <td><pre>prévenir</pre></td>
+ <td><pre>confortables</pre></td>
+ </tr>
+ <tr>
+ <td><pre>215</pre></td>
+ <td><pre>promener</pre></td>
+ <td><pre>châssis</pre></td>
+ </tr>
+ <tr>
+ <td><pre>225</pre></td>
+ <td><pre>financière</pre></td>
+ <td><pre>catastrophique</pre></td>
+ </tr>
+ <tr>
+ <td><pre>marquage</pre></td>
+ <td><pre>pas\_1</pre></td>
+ <td><pre>pourri</pre></td>
+ </tr>
+ <tr>
+ <td><pre>cherche</pre></td>
+ <td><pre>carcasses</pre></td>
+ <td><pre>chauffe</pre></td>
+ </tr>
+ <tr>
+ <td><pre>195</pre></td>
+ <td><pre>écrit\_1</pre></td>
+ <td><pre>reproche</pre></td>
+ </tr>
+ <tr>
+ <td><pre>45</pre></td>
+ <td><pre>n'avait\_pas</pre></td>
+ <td><pre>gain</pre></td>
+ </tr>
+ <tr>
+ <td><pre>65</pre></td>
+ <td><pre>s\_max</pre></td>
+ <td><pre>feeling</pre></td>
+ </tr>
+ <tr>
+ <td><pre>vitesse</pre></td>
+ <td><pre>marketing</pre></td>
+ <td><pre>fou</pre></td>
+ </tr>
+ <tr>
+ <td><pre>charge</pre></td>
+ <td><pre>225\_75</pre></td>
+ <td><pre>d'urgence</pre></td>
+ </tr>
+ <tr>
+ <td><pre>xl</pre></td>
+ <td><pre>contrainte</pre></td>
+ <td><pre>savonnette</pre></td>
+ </tr>
+ <tr>
+ <td><pre>svp</pre></td>
+ <td><pre>moyens</pre></td>
+ <td><pre>clairement</pre></td>
+ </tr>
+ </tbody>
+ </table>
+ <p>
+ Qualitativement, les 30 premières variables indiquent un
+ avantage pour <emph>RFS</emph>. Les premières variables
+ sélectionnées par <strong>RSMS</strong> sont principalement des
+ éléments de dimension, c'est-à-dire des caractéristiques de
+ forme des pneumatiques, ce qui n'est pas l'objet de notre étude.
+ </p>
+ <h3>Évaluation de la sélection de variables</h3>
+ <p>
+ Nous pouvons aussi évaluer quantitativement la sélection de
+ variables. Nous choisissons un sous-ensemble de 4000 points, en
+ appliquant l'algorithme <emph>LSMR</emph> non modifié, pour
+ accélérer les calculs.
+ </p>
+ <figure>
+ <img src="images/featureselectionlizeo.svg" />
+ <figcaption id="fig-featureselectionlizeo">
+ Sélection de variables comparée pour avec LSMR non modifié
+ comme évaluateur
+ </figcaption>
+ </figure>
+ <p>
+ En évaluant le résultat de la sélection de variables
+ (figure <h:ref href="#fig-featureselectionlizeo"/>), on remarque
+ cependant que c'est bien notre approche qui procure le meilleur
+ résultat de sélection. En effet, l'erreur de régression est
+ minimale pour 5% des variables sélectionnées (soit environ 1000
+ variables), contrairement à <emph>MIFS</emph>
+ et <emph>RFS</emph> dont la sélection n'atteint la meilleure
+ efficacité qu'en sélectionnant toutes les variables. On remarque
+ aussi que la courbe de <strong>RSMS</strong> est plus abrupte
+ que les autres, ce qui signifie que la sélection est plus
+ efficace dès les premières centaines de variables sélectionnées.
+ </p>
+ <p>
+ Nous retenons la valeur des hyperparamètres issus du tuning
+ pour <strong>RSMS</strong> :
+ </p>
+ <ul>
+ <li>rang : <h:eq>o = 30</h:eq> ;</li>
+ <li><h:eq>\alpha = 10^{3}</h:eq> ;</li>
+ <li><h:eq>\beta = 2.5 \times 10^{-2}</h:eq> ;</li>
+ <li><h:eq>\gamma = 4 \times 10^{6}</h:eq> ;</li>
+ <li><h:eq>\delta = 4 \times 10^{2}</h:eq>.</li>
+ </ul>
+ <h2>Application de <strong>RSMS</strong> sur l'ensemble du jeu de
+ données</h2>
+ <p>
+ Étant donné que le jeu de données contient trop d'individus pour
+ construire et utiliser la matrice Laplacienne du graphe des
+ individus, nous considérons une version légèrement modifiée de
+ l'algorithme.
+ </p>
+ <h3>Optimisation par époques</h3>
+ <p>
+ Chaque étape de l'algorithme <strong>RSMS</strong> est une
+ itération de la descente de gradient. Il est possible d'utiliser
+ la version stochastique avec <emph>minibatch</emph>,
+ c'est-à-dire qu'au lieu de sélectionner un individu à chaque
+ itération, un sous-ensemble est sélectionné à la place. Cette
+ stratégie est souvent employée car elle permet expérimentalement
+ d'obtenir le résultat en moins d'itération qu'avec la version
+ stochastique. En contrepartie, le calcul du gradient doit se
+ faire pour tous les individus sélectionnés simultanément, ce qui
+ n'est pas un problème pour les architectures de calcul parallèle
+ modernes <h:cite href="alexnet"/>.
+ </p>
+ <p>
+ Afin de pouvoir réutiliser les matrices Laplacienne de graphe,
+ le partitionnement est le même à chaque époque. Nous obtenons le
+ résultat pour 10 époques.
+ </p>
+ <h3>Résultats</h3>
+ <p>
+ Les premières variables ainsi obtenues sont exposées dans la
+ table <h:ref href="#tbl-rsms-full-feature-selection"/>.
+ </p>
+ <table latex-align="l">
+ <caption id="tbl-rsms-full-feature-selection">
+ Sélection des 30 premières variables de la sélection de RSMS
+ par époques
+ </caption>
+ <thead>
+ <tr>
+ <th><strong>RSMS par époques</strong></th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr><td><pre>très</pre></td></tr>
+ <tr><td><pre>pas</pre></td></tr>
+ <tr><td><pre>content</pre></td></tr>
+ <tr><td><pre>bon</pre></td></tr>
+ <tr><td><pre>4</pre></td></tr>
+ <tr><td><pre>sport</pre></td></tr>
+ <tr><td><pre>bien</pre></td></tr>
+ <tr><td><pre>meilleurs</pre></td></tr>
+ <tr><td><pre>plus</pre></td></tr>
+ <tr><td><pre>neige</pre></td></tr>
+ <tr><td><pre>top</pre></td></tr>
+ <tr><td><pre>nokian</pre></td></tr>
+ <tr><td><pre>satisfait</pre></td></tr>
+ <tr><td><pre>prix</pre></td></tr>
+ <tr><td><pre>trop</pre></td></tr>
+ <tr><td><pre>emoji</pre></td></tr>
+ <tr><td><pre>3</pre></td></tr>
+ <tr><td><pre>2</pre></td></tr>
+ <tr><td><pre>vredestein</pre></td></tr>
+ <tr><td><pre>route</pre></td></tr>
+ <tr><td><pre>rapport</pre></td></tr>
+ <tr><td><pre>mal</pre></td></tr>
+ <tr><td><pre>excellent</pre></td></tr>
+ <tr><td><pre>dunlop</pre></td></tr>
+ <tr><td><pre>hiver</pre></td></tr>
+ <tr><td><pre>meilleur</pre></td></tr>
+ <tr><td><pre>bonne</pre></td></tr>
+ <tr><td><pre>sécurité</pre></td></tr>
+ <tr><td><pre>5</pre></td></tr>
+ <tr><td><pre>qualité</pre></td></tr>
+ </tbody>
+ </table>
+ <p>
+ Contrairement aux sélections de variables effectuées sur des
+ sous-ensembles des données
+ (table <h:ref href="#tbl-lizeo-feature-selection"/>), il est
+ plus clair que les premiers termes sélectionnés sont applicables
+ à tous les labels. En effet, dans les 30 premières variables, on
+ peut repérer les termes suivants :
+ </p>
+ <ul>
+ <li>
+ la combinaison de "<pre>très</pre>" et "<pre>pas</pre>" permet
+ d'indiquer une tonalité légèrement positive par défaut, et la
+ modifier en plus positif ou négatif, indépendamment du
+ label. La variable "<pre>très</pre>" n'est pas présente du
+ tout dans les 30 premières variables des sélections par
+ sous-ensemble, et seul <emph>MIFS</emph> sélectionne
+ "<pre>pas</pre>" (comme membre d'un
+ bi-gramme). <strong>RSMS</strong> par sous-ensembles
+ sélectionne cependant "<pre>non</pre>". Notons qu'il est très
+ important de conserver ces mots. Les tâches communes de
+ classification textuelle, comme la classification multi-labels
+ de documents, ne sont souvent pas affectées par la présence de
+ ces mots, qui sont alors considérés
+ comme <emph>stopword</emph> (mots-outil) et retirés du
+ texte. Dans notre cas, ils sont essentiels.
+ </li>
+ <li>
+ Nous avons relevé les termes d'appréciation généraux dans la
+ table <h:ref href="#tbl-lizeo-feature-selection-quali"/>.
+ </li>
+ </ul>
+ <table latex-align="llll">
+ <caption id="tbl-lizeo-feature-selection-quali">
+ Variables probablement utiles pour la tonalité de tous les
+ qualifieurs simultanément
+ </caption>
+ <thead>
+ <tr>
+ <th><strong>RSMS par époques</strong></th>
+ <th><emph>RSMS</emph></th>
+ <th><emph>MIFS</emph></th>
+ <th><emph>RFS</emph></th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><pre>très</pre></td>
+ <td><pre>malheureusement</pre></td>
+ <td><pre>assez\_bon</pre></td>
+ <td><pre>bluffé</pre></td>
+ </tr>
+ <tr>
+ <td><pre>pas</pre></td>
+ <td><pre>non</pre></td>
+ <td><pre>optimisées</pre></td>
+ <td><pre>regrette</pre></td>
+ </tr>
+ <tr>
+ <td><pre>content</pre></td>
+ <td></td>
+ <td><pre>justifie\_pas</pre></td>
+ <td><pre>négatif</pre></td>
+ </tr>
+ <tr>
+ <td><pre>bon</pre></td>
+ <td></td>
+ <td></td>
+ <td><pre>excellents</pre></td>
+ </tr>
+ <tr>
+ <td><pre>bien</pre></td>
+ <td></td>
+ <td></td>
+ <td><pre>catastrophique</pre></td>
+ </tr>
+ <tr>
+ <td><pre>meilleurs</pre></td>
+ <td></td>
+ <td></td>
+ <td><pre>pourri</pre></td>
+ </tr>
+ <tr>
+ <td><pre>plus</pre></td>
+ <td></td>
+ <td></td>
+ <td><pre>reproche</pre></td>
+ </tr>
+ <tr>
+ <td><pre>top</pre></td>
+ <td></td>
+ <td></td>
+ <td><pre>gain</pre></td>
+ </tr>
+ <tr>
+ <td><pre>satisfait</pre></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><pre>trop</pre></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><pre>mal</pre></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><pre>excellent</pre></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><pre>meilleur</pre></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><pre>bonne</pre></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><pre>qualité</pre></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ </tbody>
+ </table>
+ <figure>
+ <img src="images/featureselectionlizeofull.svg" />
+ <figcaption id="fig-featureselectionlizeofull">
+ Sélection de variables pour <strong>RSMS</strong> en comparant
+ l'optimisation par époques, et l'agrégation de l'optimisation
+ par sous-ensembles
+ </figcaption>
+ </figure>
+ <p>
+ La figure <h:ref href="#fig-featureselectionlizeofull"/> montre
+ que l'optimisation par époques obtient son meilleur résultat en
+ sélectionnant seulement 1% des variables (soit 5 fois moins que
+ l'agrégation de la sélection par sous-ensemble). Nous retenons
+ ces 200 meilleures variables.
+ </p>
+ <h3>Sélection de labels</h3>
+ <p>
+ En comparant les normes des colonnes de la
+ matrice <h:eq>B</h:eq>, on peut trouver les labels ayant une
+ plus forte norme, et donc ceux les mieux expliqués par les
+ variables sélectionnées. Grâce à cette information, on peut
+ identifier les labels difficiles. Nous constatons que les labels
+ fréquents ont plus tendance à être sélectionnés que les labels
+ moins fréquents. Pour les autres cas, nous présentons dans la
+ table <h:ref href="#tbl-unfrequent-selected-labels"/> la liste
+ des labels présents dans moins de 1% des documents, et dans la
+ table <h:ref href="#tbl-frequent-ignored-labels"/> la liste des
+ labels présents dans plus de 1% des documents. La
+ table <h:reft href="#bl-unfrequent-selected-labels"/> montre la
+ liste des qualifieurs relativement rares qui sont bien
+ représentés par le champ lexical sélectionné, tandis que la
+ table <h:ref href="#tbl-frequent-ignored-labels"/> montre que
+ certains labels fréquents sont ignorés pour la sélection de
+ variables. On note que l'image des produits est bien
+ retranscrite, ainsi que les caractéristiques techniques les plus
+ précises.
+ </p>
+ <table latex-align="rrl">
+ <caption id="tbl-unfrequent-selected-labels">
+ Rang de sélection des labels présents dans moins de 1% des
+ documents, parmi les 30 meilleurs labels
+ </caption>
+ <thead>
+ <tr>
+ <th>N<sup>o</sup></th>
+ <th>Rang</th>
+ <th>Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>65</td>
+ <td>9</td>
+ <td>Characteristics / Labelling / Braking on wet surfaces</td>
+ </tr>
+ <tr>
+ <td>135</td>
+ <td>10</td>
+ <td>Attitude / Towards brands / Towards asian and budget brands</td>
+ </tr>
+ <tr>
+ <td>54</td>
+ <td>11</td>
+ <td>Characteristics / Image / Origin</td>
+ </tr>
+ <tr>
+ <td>136</td>
+ <td>13</td>
+ <td>Attitude / Towards brands / Towards premium brands</td>
+ </tr>
+ <tr>
+ <td>67</td>
+ <td>14</td>
+ <td>Characteristics / Labelling / Rolling resistance</td>
+ </tr>
+ <tr>
+ <td>202</td>
+ <td>15</td>
+ <td>Image/Reputation / Reputation/Quality</td>
+ </tr>
+ <tr>
+ <td>50</td>
+ <td>16</td>
+ <td>Performances / Sportiness</td>
+ </tr>
+ <tr>
+ <td>30</td>
+ <td>17</td>
+ <td>Performances / Safety / Grip</td>
+ </tr>
+ <tr>
+ <td>57</td>
+ <td>18</td>
+ <td>Characteristics / Image / Awareness</td>
+ </tr>
+ <tr>
+ <td>204</td>
+ <td>19</td>
+ <td>Global Satisfaction</td>
+ </tr>
+ <tr>
+ <td>16</td>
+ <td>20</td>
+ <td>Performances / Services / Michelin OnWay / Warranty</td>
+ </tr>
+ <tr>
+ <td>212</td>
+ <td>21</td>
+ <td>Performances / Safety / Road Holding / On wet road / Under extreme conditions</td>
+ </tr>
+ <tr>
+ <td>211</td>
+ <td>22</td>
+ <td>Performances / Safety / Road Holding / On dry road or not specified</td>
+ </tr>
+ <tr>
+ <td>214</td>
+ <td>23</td>
+ <td>Performances / Safety / Safety Generic) / On wet road / Under extreme conditions</td>
+ </tr>
+ <tr>
+ <td>220</td>
+ <td>24</td>
+ <td>Performances / Safety / Grip / On dry road or not specified</td>
+ </tr>
+ <tr>
+ <td>221</td>
+ <td>25</td>
+ <td>Performances / Safety / Grip / On wet road</td>
+ </tr>
+ <tr>
+ <td>213</td>
+ <td>26</td>
+ <td>Performances / Safety / Safety Generic) / On dry road or not specified</td>
+ </tr>
+ <tr>
+ <td>207</td>
+ <td>27</td>
+ <td>Performances / Performances Generic)</td>
+ </tr>
+ <tr>
+ <td>19</td>
+ <td>28</td>
+ <td>Performances / Services / Other / Warranty</td>
+ </tr>
+ <tr>
+ <td>203</td>
+ <td>29</td>
+ <td>Image/Reputation / Recommendation</td>
+ </tr>
+ <tr>
+ <td>222</td>
+ <td>30</td>
+ <td>Performances / Safety / Motivity / On dry road or not specified</td>
+ </tr>
+ </tbody>
+ </table>
+ <table latex-align="rrl">
+ <caption id="tbl-frequent-ignored-labels">
+ Rang de sélection des labels présents dans plus de 1% des
+ documents
+ </caption>
+ <thead>
+ <tr>
+ <th>N<sup>o</sup></th>
+ <th>Rang</th>
+ <th>Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>52</td>
+ <td>1</td>
+ <td>Performances / Consumer feedback / Overall satisfaction</td>
+ </tr>
+ <tr>
+ <td>59</td>
+ <td>2</td>
+ <td>Characteristics / Image / Reputation</td>
+ </tr>
+ <tr>
+ <td>60</td>
+ <td>3</td>
+ <td>Characteristics / Image / Test results</td>
+ </tr>
+ <tr>
+ <td>21</td>
+ <td>4</td>
+ <td>Performances / Safety / Safety</td>
+ </tr>
+ <tr>
+ <td>61</td>
+ <td>5</td>
+ <td>Characteristics / Image / Intent to purchase</td>
+ </tr>
+ <tr>
+ <td>58</td>
+ <td>6</td>
+ <td>Performances / Consumer feedback / Recommendation</td>
+ </tr>
+ <tr>
+ <td>10</td>
+ <td>7</td>
+ <td>Characteristics / Price / Value for money</td>
+ </tr>
+ <tr>
+ <td>132</td>
+ <td>8</td>
+ <td>Attitude / Towards tyre type</td>
+ </tr>
+ <tr>
+ <td>133</td>
+ <td>12</td>
+ <td>Attitude / Towards tests</td>
+ </tr>
+ <tr>
+ <td>549</td>
+ <td>31</td>
+ <td>Performances / Safety / Traction</td>
+ </tr>
+ <tr>
+ <td>483</td>
+ <td>32</td>
+ <td>Performances / Wear life / Wear life</td>
+ </tr>
+ <tr>
+ <td>780</td>
+ <td>33</td>
+ <td>Performances / Safety / Wet traction</td>
+ </tr>
+ <tr>
+ <td>506</td>
+ <td>34</td>
+ <td>Performances / Ride performance / Noise</td>
+ </tr>
+ <tr>
+ <td>494</td>
+ <td>35</td>
+ <td>Performances / Safety / Handling</td>
+ </tr>
+ <tr>
+ <td>504</td>
+ <td>36</td>
+ <td>Performances / Ride performance / Ride experience</td>
+ </tr>
+ <tr>
+ <td>781</td>
+ <td>37</td>
+ <td>Performances / Safety / Dry traction</td>
+ </tr>
+ <tr>
+ <td>782</td>
+ <td>38</td>
+ <td>Performances / Safety / Snow/Winter traction</td>
+ </tr>
+ <tr>
+ <td>497</td>
+ <td>39</td>
+ <td>Performances / Safety / Stopping distance</td>
+ </tr>
+ <tr>
+ <td>505</td>
+ <td>40</td>
+ <td>Performances / Ride performance / Ride comfort</td>
+ </tr>
+ <tr>
+ <td>495</td>
+ <td>41</td>
+ <td>Performances / Safety / Steering</td>
+ </tr>
+ <tr>
+ <td>487</td>
+ <td>44</td>
+ <td>Performances / Toughness/Robustness / Toughness/Robustness</td>
+ </tr>
+ <tr>
+ <td>484</td>
+ <td>47</td>
+ <td>Performances / Wear life / Ageing</td>
+ </tr>
+ <tr>
+ <td>491</td>
+ <td>48</td>
+ <td>Performances / Environment / Environment</td>
+ </tr>
+ <tr>
+ <td>508</td>
+ <td>49</td>
+ <td>Characteristics / Image / Look/aesthetic</td>
+ </tr>
+ <tr>
+ <td>488</td>
+ <td>50</td>
+ <td>Performances / Wear life / Abnormal Wear</td>
+ </tr>
+ <tr>
+ <td>489</td>
+ <td>52</td>
+ <td>Characteristics / Price / Deal / Discount</td>
+ </tr>
+ <tr>
+ <td>558</td>
+ <td>53</td>
+ <td>Performances / Track/Sport performance / Track performance</td>
+ </tr>
+ <tr>
+ <td>784</td>
+ <td>58</td>
+ <td>Performances / Safety / Off road traction</td>
+ </tr>
+ </tbody>
+ </table>
+ <h2>Application : algorithme LSMR après sélection de variables et
+ de labels</h2>
+ <p>
+ Pour terminer, nous appliquons
+ l'algorithme <strong>LSMR</strong> avec bagging sur les deux
+ sous-ensembles de variables obtenus auparavant : les 993
+ variables de la sélection de l'agrégation de l'algorithme
+ <strong>RSMS</strong>, et les 199 variables de la sélection
+ de <strong>RSMS</strong> par époques. Nous ajoutons également
+ les 993 et 199 meilleures variables selon <emph>RFS</emph>
+ et <emph>MIFS</emph>. Le résultat est présenté dans la table
+ <h:ref href="#tbl-lizeo-final"/>. Pour rappel, effectuer
+ l'apprentissage pour toutes les variables
+ avec <strong>LSMR</strong> donne une métrique aRMSE de 0.809.
+ </p>
+ <p>
+ Le processus général pour l'apprentissage est résumé dans la
+ figure <h:ref href="#fig-rsms-lsmr-apprentissage"/>. Une
+ première étape consiste à appliquer la sélection de variables
+ avec <strong>RSMS</strong>, en effectuant un découpage par
+ mini-batch. Une fois la liste des variables obtenues,
+ l'application de <strong>LSMR</strong> sur des sous-ensembles
+ tirés avec remise permet d'obtenir plusieurs modèles, chacun
+ étant évalué sur un ensemble de validation afin d'obtenir une
+ métrique. Nous obtenons également un ensemble hors du sac
+ (<emph>out of bag</emph>), non utilisé pour l'apprentissage ou
+ la validation, avec la sortie du modèle. La métrique obtenue par
+ validation permet de sélectionner les modèles les plus
+ pertinents. L'agrégation s'effectue ensuite en cherchant à
+ prédire pour chaque label indépendamment, sa valeur à partir des
+ valeurs prédites par les modèles de bootstrap. Afin de ne pas
+ réutiliser les individus ayant servi à l'apprentissage ou à la
+ validation, la valeur de ceux-ci est remplacée par la valeur de
+ prédiction moyenne. On obtient donc les variables à identifier,
+ des modèles de bootstrap, et un modèle de stacking.
+ </p>
+ <p>
+ Pour l'application du modèle sur un nouveau post, les étapes
+ sont décrites dans la figure
+ <h:ref href="#fig-rsms-lsmr-inference"/>. Les mots du texte
+ correspondants aux variables sélectionnés sont reconnus, puis
+ chaque modèle de bootstrap effectue une prédiction, et enfin le
+ modèle de stacking permet d'obtenir une valeur pour tous les
+ labels.
+ </p>
+ <table latex-align="rrrrr">
+ <caption id="tbl-lizeo-final">
+ Évaluation avec <strong>LSMR</strong> + bagging (aRMSE) des
+ deux ensembles de variables retenus : agrégation
+ de <strong>RSMS</strong> sur des sous-ensembles, et
+ optimisation de <strong>RSMS</strong> sur le jeu de données
+ complet par époques
+ </caption>
+ <thead>
+ <tr>
+ <td><strong>Pourcentage de variables</strong></td>
+ <td><strong>RSMS</strong> par époques</td>
+ <td><strong>RSMS</strong> agrégé</td>
+ <td><emph>RFS</emph></td>
+ <td><emph>MIFS</emph></td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>5% (993 variables)</td>
+ <td>0.810</td>
+ <td><strong>0.807</strong></td>
+ <td>0.815</td>
+ <td>0.819</td>
+ </tr>
+ <tr>
+ <td>1% (199 variables)</td>
+ <td><strong>0.810</strong></td>
+ <td>0.812</td>
+ <td>0.817</td>
+ <td>0.820</td>
+ </tr>
+ </tbody>
+ </table>
+ <figure>
+ <img src="images/lsmrrsmsapprentissage.svg" />
+ <figcaption id="fig-rsms-lsmr-apprentissage">
+ Schéma de synthèse de l'application de <strong>RSMS</strong>
+ et <strong>LSMR</strong> sur le jeu de données total
+ </figcaption>
+ </figure>
+ <figure>
+ <img src="images/lsmrrsmsinference.svg" />
+ <figcaption id="fig-rsms-lsmr-inference">
+ Schéma de synthèse de l'application de <strong>RSMS</strong>
+ et <strong>LSMR</strong> sur le jeu de données total :
+ application sur un nouveau post non labellisé
+ </figcaption>
+ </figure>
+ <h2>Conclusion</h2>
+ <p>
+ Nous avons évalué notre algorithme de sélection de variables
+ multi-labels, <strong>RSMS</strong>, sur un jeu de données
+ textuel réel, en appliquant notre approche de régression
+ multi-labels <strong>LSMR</strong> pour le valider. Selon notre
+ mode d'application de <strong>RSMS</strong>, par époques ou en
+ agrégeant les rangs des variables sélectionnées sur des
+ sous-ensembles, nous obtenons respectivement une meilleure
+ sélection de variables qualitativement, et une sélection plus
+ adaptée au problème, en comparaison avec les
+ algorithmes <emph>RFS</emph> et <emph>MIFS</emph>. Dans le
+ premier cas, cette évaluation a montré l'utilité de la sélection
+ de variables pour la réduction de dimension. Dans le second cas,
+ elle a montré que la sélection de variables permet d'obtenir une
+ plus faible erreur de régression.
+ </p>
+ <h1>Conclusion et perspectives</h1>
+ <h2>Bilan des travaux effectués</h2>
+ <p>
+ Dans cette thèse, nous avons présenté un état de l'art de
+ l'apprentissage semi-supervisé et multi-labels pour la
+ régression, en insistant également sur la sélection de
+ variables. Ceci nous a amené à proposer un algorithme de
+ régression semi-supervisé, <emph>LapS3L</emph>.
+ </p>
+ <p>
+ Cet algorithme utilise les données non labellisées de deux
+ façons :
+ </p>
+ <ul>
+ <li>
+ une première étape d'extraction de variables non supervisée
+ permet d'obtenir de nouvelles variables permettant d'exprimer
+ une relation linéaire entre les variables et la variable
+ cible. Cette étape est tirée de
+ l'algorithme <emph>SSSL</emph>.
+ </li>
+ <li>
+ une seconde étape qui utilise une régularisation Laplacienne,
+ semi-supervisée, permettant de relier les variables réelles et
+ les variables extraites.
+ </li>
+ </ul>
+ <p>
+ <emph>LapS3L</emph> obtient de bons résultats de généralisation
+ pour la régression, sur des jeux de données publics, et sur un
+ jeu de données spécifique.
+ </p>
+ <p>
+ Afin d'adapter <emph>LapS3L</emph> aux problèmes de régression
+ multi-labels, nous avons modifié la régularisation de la seconde
+ partie en ajoutant un terme multi-labels : concrètement, si deux
+ labels obtiennent des valeurs similaires sur les mêmes
+ individus, alors on peut les considérer comme similaires. À
+ partir de ces similarités entre labels, il est possible
+ d'utiliser pour la régularisation l'hypothèse suivante : si deux
+ labels sont similaires, alors les modèles servant à effectuer
+ leur prédiction doivent être similaires.
+ </p>
+ <p>
+ Nous avons montré que l'algorithme résultant, <emph>LSMR</emph>,
+ est compétitif avec l'état de l'art de la régression
+ multi-labels, tout en donnant de meilleures performances que la
+ régularisation multi-labels seule.
+ </p>
+ <p>
+ Pour faciliter l'apprentissage, nous nous sommes aussi penchés
+ sur la sélection de variables semi-supervisée et
+ multi-labels. Étant donné le nombre important de labels que nous
+ serions amenés à traiter, nous avons proposé un compromis entre
+ la sélection de variables mono-label et multi-labels en guidant
+ la sélection de variables par la sélection de
+ labels. Concrètement, nous avons conçu notre algorithme pour
+ résoudre simultanément le problème de sélection de variables, et
+ la sélection de labels, afin que les variables retenues ne
+ puissent pas être influencées par les labels dont la
+ modélisation est trop difficile ou impossible.
+ </p>
+ <p>
+ Enfin, nous avons appliqué <strong>LSMR</strong>
+ et <strong>RSMS</strong> sur un jeu de données réel, de
+ l'entreprise Lizeo, ayant de nombreuses particularités qui nous
+ ont amené à adapter légèrement nos travaux. La version retenue
+ de <strong>LSMR</strong> utilise la technique de <emph>Bootstrap
+ Aggregating</emph>, ou <emph>Bagging</emph>, qui vise à
+ ré-échantillonner (avec remise) le jeu de données pour apprendre
+ un modèle par échantillon, puis une aggrégation des prédictions
+ par un modèle de <emph>stacking</emph>. Ce modèle final nous
+ permet d'ignorer les valeurs non pertinentes, une spécificité du
+ jeu de données. Contrairement à <emph>MIFS</emph>
+ et <emph>RFS</emph>, les variables sélectionnées
+ par <emph>RSMS</emph> permettent soit d'obtenir une erreur de
+ régression plus faible de <emph>LSMR</emph>, soit d'obtenir un
+ modèle très simple.
+ </p>
+ <h2>Perspectives d'amélioration</h2>
+ <p>
+ Les pistes d'amélioration sont nombreuses pour nos travaux.
+ </p>
+ <p>
+ En ce qui concerne <strong>LSMR</strong>, nous pourrions tenter
+ d'utiliser d'autres régularisations multi-labels. En effet,
+ indépendamment de la performance de <strong>LSMR</strong>, les
+ résultats obtenus par la régularisation Laplacienne multi-labels
+ semblent montrer les limites de cette approche, en comparant
+ avec la régularisation <emph>CMTL</emph>. Cette dernière est
+ similaire, à ceci près que l'a-priori sur la structure des
+ labels est inféré à partir des données. Nous pourrions également
+ envisager d'intégrer la sélection de labels dans la méthode
+ d'apprentissage <strong>LSMR</strong>, de façon à ne pas
+ contraindre le modèle sur les labels qu'il ne pourra de toutes
+ façons pas représenter fidèlement.
+ </p>
+ <p>
+ Nous pourrions aussi tenter de modifier les a-priori dont nous
+ disposons sur les labels grâce aux connaissances métier. En
+ effet, les labels forment une hiérarchie : certains sont plus
+ génériques et recouvrent des sous-labels plus spécifiques. Par
+ exemple, si le terme "savonnette" est tantôt employé pour la
+ tenue sur route humide ou sur route enneigée, cela traduit une
+ proximité naturelle entre ces deux labels. Cette proximité
+ pourrait être retrouvée en inspectant simplement la hiérarchie
+ des <emph>qualifiers</emph>.
+ </p>
+ <p>
+ Pour <emph>RSMS</emph>, nous pourrions envisager d'utiliser une
+ régularisation non convexe, telle que la régularisation
+ <h:eq>\ell_{2, 1 - 2}</h:eq>.
+ </p>
+ <p>
+ En ce qui concerne l'application, il reste à harmoniser la
+ classification et la régression. En effet, le score prédit pour
+ chaque label n'est pas toujours intéressant ; il ne l'est que si
+ le <emph>qualifier</emph> est bien mentionné dans le texte. Bien
+ que l'agrégation par <emph>stacking</emph> permette d'ignorer le
+ score prédit pour les qualifier non présents, les modèles
+ bootstrap cherchent à obtenir la valeur 0 si le qualifier n'est
+ pas présent. Cette idée devrait donc être au cœur de
+ l'optimisation d'un algorithme unifiant la classification et la
+ régression.
+ </p>
+ <h:appendix/>
+ <h1>Publications personnelles</h1>
+ <h2>Revues internationales</h2>
+ <ul>
+ <li>
+ Seif-Eddine Benkabou,
+ Khalid Benabdeslem,
+ <strong>Vivien Kraus</strong>,
+ Kilian Bourhis,
+ Bruno Canitia,
+ <emph>Local Anomaly Detection for Multivariate Time Series by
+ Temporal Dependency Based on Poisson Model</emph>, in
+ revision,
+ <emph>IEEE Transactions on Neural Networks and Learning
+ Systems</emph>
+ </li>
+ </ul>
+ <h2>Conférences internationales</h2>
+ <ul>
+ <li>
+ <strong>Vivien Kraus</strong>,
+ Khalid Benabdeslem,
+ Bruno Canitia,
+ <emph>Laplacian-based Semi-supervised Multi-Label
+ Regression.</emph>, in
+ <emph>International Joint Conference on Neural Networks
+ (IJCNN).</emph>
+ IEEE, 2020.
+ </li>
+ <li>
+ <strong>Vivien Kraus</strong>,
+ Seif-Eddine Benkabou,
+ Khalid Benabdeslem,
+ Frédéric Cherqui,
+ <emph>An improved Laplacian semi-supervised regression</emph>, in
+ <emph>IEEE 30th International Conference on Tools with
+ Artificial Intelligence (ICTAI).</emph>
+
+ IEEE, 2018. p 564-570.
+ </li>
+ </ul>
+ <h2>Conférences nationales</h2>
+ <ul>
+ <li>
+ Seif-Eddine Benkabou,
+ Khalid Benabdeslem,
+ <strong>Vivien Kraus</strong>,
+ Kilian Bourhis
+ and Bruno Canitia.
+
+ <emph>Détection contextuelle d'anomalies à partir de séries
+ temporelles multi-variées à base de modèle de
+ Poisson</emph>,
+
+ in
+
+ <emph>Conférence sur l'Apprentissage automatique (CAp
+ 2019)</emph>.
+ </li>
+ <li>
+ <strong>Vivien Kraus</strong>,
+ Khalid Benabdeslem,
+ Frédéric Cherqui,
+
+ <emph>Régression Laplacienne semi-supervisée pour la
+ reconstitution des dates de pose des réseaux
+ d'assainissement</emph>,
+
+ <emph>Extraction et Gestion des Connaissances (EGC18)</emph>
+
+ EGC 2018.
+ </li>
+ </ul>
+ <h2>Travaux en cours</h2>
+ <ul>
+ <li>
+ <strong>Vivien Kraus</strong>,
+ Khalid Benabdeslem,
+ Bruno Canitia.
+
+ <emph>RSMS: Robust Semi-supervised Multi-label feature
+ Selection for regression.</emph>
+
+ Preprint, 2021.
+ </li>
+ </ul>
+
+ <!-- ____________________________________________
+ −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
+ Fin du manuscrit, début de la bibliographie.
+ −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− -->
+
+ <h:bibliography style="unsrt">
+ <b:inproceedings id="ji_simple_2012">
+ <b:title>
+ A simple algorithm for semi-supervised learning with
+ improved generalization error bound
+ </b:title>
+ <b:author>
+ Ji, Ming and Yang, Tianbao and Lin, Binbin and Jin, Rong and
+ Han, Jiawei
+ </b:author>
+ <b:booktitle>
+ Proceedings of the 29th International Coference on
+ International Conference on Machine Learning
+ </b:booktitle>
+ <b:pages>835--842</b:pages>
+ <b:year>2012</b:year>
+ </b:inproceedings>
+ <b:article id="belkin_manifold_2006">
+ <b:title>
+ Manifold regularization: A geometric framework for learning
+ from labeled and unlabeled examples
+ </b:title>
+ <b:author>
+ Belkin, Mikhail and Niyogi, Partha and Sindhwani, Vikas
+ </b:author>
+ <b:journal>Journal of machine learning research</b:journal>
+ <b:volume>7</b:volume>
+ <b:number>Nov</b:number>
+ <b:pages>2399-2434</b:pages>
+ <b:year>2006</b:year>
+ </b:article>
+ <b:book id="chapelle_semi-supervised_2006">
+ <b:title>Semi-Supervised Learning</b:title>
+ <b:isbn>978-0-262-03358-9</b:isbn>
+ <b:url>http://mitpress.universitypressscholarship.com/view/10.7551/mitpress/9780262033589.001.0001/upso-9780262033589</b:url>
+ <b:urldate>2017-10-05</b:urldate>
+ <b:publisher>The MIT Press</b:publisher>
+ <b:editor>Chapelle, Olivier and Scholkopf, Bernhard and Zien, Alexander</b:editor>
+ <b:month>sep</b:month>
+ <b:year>2006</b:year>
+ <b:doi>10.7551/mitpress/9780262033589.001.0001</b:doi>
+ </b:book>
+ <b:inproceedings id="zhu_semi-supervised_nodate">
+ <b:title>
+ Semi-Supervised Learning Using Gaussian Fields and Harmonic
+ Functions
+ </b:title>
+ <b:author>
+ Zhu, Xiaojin and Ghahramani, Zoubin and Lafferty, John D
+ </b:author>
+ <b:booktitle>
+ Proceedings of the 20th International conference on Machine
+ learning (ICML-03)
+ </b:booktitle>
+ <b:pages>912-919</b:pages>
+ <b:year>2003</b:year>
+ </b:inproceedings>
+ <b:article id="doquire_graph_2013">
+ <b:title>
+ A graph Laplacian based approach to semi-supervised feature
+ selection for regression problems
+ </b:title>
+ <b:volume>121</b:volume>
+ <b:issn>09252312</b:issn>
+ <b:url>http://linkinghub.elsevier.com/retrieve/pii/S0925231213001537</b:url>
+ <b:doi>10.1016/j.neucom.2012.10.028</b:doi>
+ <b:language>en</b:language>
+ <b:urldate>2017-10-06</b:urldate>
+ <b:journal>Neurocomputing</b:journal>
+ <b:author>Doquire, Gauthier and Verleysen, Michel</b:author>
+ <b:month>dec</b:month>
+ <b:year>2013</b:year>
+ <b:pages>5--13</b:pages>
+ </b:article>
+ <b:article id="alalga_soft-constrained_2016">
+ <b:title>
+ Soft-constrained Laplacian score for semi-supervised
+ multi-label feature selection
+ </b:title>
+ <b:volume>47</b:volume>
+ <b:issn>0219-1377, 0219-3116</b:issn>
+ <b:url>http://link.springer.com/10.1007/s10115-015-0841-8</b:url>
+ <b:doi>10.1007/s10115-015-0841-8</b:doi>
+ <b:language>en</b:language>
+ <b:number>1</b:number>
+ <b:urldate>2017-10-03</b:urldate>
+ <b:journal>Knowledge and Information Systems</b:journal>
+ <b:author>
+ Alalga, Abdelouahid and Benabdeslem, Khalid and Taleb, Nora
+ </b:author>
+ <b:month>apr</b:month>
+ <b:year>2016</b:year>
+ <b:pages>75-98</b:pages>
+ </b:article>
+ <b:inproceedings id="sousa_kernelized_nodate">
+ <b:title>
+ Kernelized Constrained Gaussian Fields and Harmonic
+ Functions for Semi-supervised Learning
+ </b:title>
+ <b:abstract>
+ Graph-based semi-supervised learning (SSL) methods are
+ effective on many application domains. Despite such an
+ effectiveness, many of these methods are transductive in
+ nature, being uncapable to provide generalization for the
+ entire sample space. In this paper, we generalize three
+ existing graph-based transductive methods through kernel
+ expansions on reproducing kernel Hilbert spaces. In
+ addition, our methods can easily generate an inductive model
+ in a parameter-free way, given a graph Laplacian constructed
+ from both labeled and unlabeled examples and a label
+ matrix. Through experiments on benchmark data sets, we show
+ that the proposed methods are effective on inductive SSL
+ tasks in comparison to manifold regularization methods.
+ </b:abstract>
+ <b:language>en</b:language>
+ <b:author>Sousa, Celso A R</b:author>
+ <b:booktitle>
+ 2020 International Joint Conference on Neural Networks
+ (IJCNN)
+ </b:booktitle>
+ <b:pages>1--8</b:pages>
+ <b:year>2020</b:year>
+ <b:organization>IEEE</b:organization>
+ </b:inproceedings>
+ <b:inproceedings id="liu_semi-supervised_2006">
+ <b:title>
+ Semi-supervised multi-label learning by constrained
+ non-negative matrix factorization
+ </b:title>
+ <b:volume>6</b:volume>
+ <b:url>https://vvvvw.aaai.org/Papers/AAAI/2006/AAAI06-067.pdf</b:url>
+ <b:urldate>2017-10-09</b:urldate>
+ <b:booktitle>
+ Proceedings of the 21st national conference on Artificial
+ intelligence-Volume 1
+ </b:booktitle>
+ <b:author>Liu, Yi and Jin, Rong and Yang, Liu</b:author>
+ <b:year>2006</b:year>
+ <b:pages>421-426</b:pages>
+ </b:inproceedings>
+ <b:incollection id="gunopulos_constrained_2011">
+ <b:address>Berlin, Heidelberg</b:address>
+ <b:title>
+ Constrained Laplacian Score for Semi-supervised Feature
+ Selection
+ </b:title>
+ <b:volume>6911</b:volume>
+ <b:isbn>978-3-642-23779-9 978-3-642-23780-5</b:isbn>
+ <b:url>http://link.springer.com/10.1007/978-3-642-23780-5_23</b:url>
+ <b:urldate>2017-10-05</b:urldate>
+ <b:booktitle>
+ Machine Learning and Knowledge Discovery in Databases
+ </b:booktitle>
+ <b:publisher>Springer Berlin Heidelberg</b:publisher>
+ <b:author>Benabdeslem, Khalid and Hindawi, Mohammed</b:author>
+ <b:editor>
+ Gunopulos, Dimitrios and Hofmann, Thomas and Malerba, Donato
+ and Vazirgiannis, Michalis
+ </b:editor>
+ <b:year>2011</b:year>
+ <b:doi>10.1007/978-3-642-23780-5_23</b:doi>
+ <b:pages>204--218</b:pages>
+ </b:incollection>
+ <b:article id="zhang_semi-supervised_2009">
+ <b:title>Semi-Supervised Multi-Task Regression</b:title>
+ <b:author>Zhang, Yu and Yeung, Dit-Yan</b:author>
+ <b:journal>
+ Machine Learning and Knowledge Discovery in Databases
+ </b:journal>
+ <b:pages>617--631</b:pages>
+ <b:year>2009</b:year>
+ <b:publisher>Springer</b:publisher>
+ <b:abstract>
+ Labeled data are needed for many machine learning
+ applications but the amount available in some applications
+ is scarce. Semi-supervised learning and multi-task learning
+ are two of the approaches that have been proposed to
+ alleviate this problem. In this paper, we seek to integrate
+ these two approaches for regression applications. We first
+ propose a new supervised multi-task regression method called
+ SMTR, which is based on Gaussian processes (GP) with the
+ assumption that the kernel parameters for all tasks share a
+ common prior. We then incorporate unlabeled data into SMTR
+ by changing the kernel function of the GP prior to a
+ data-dependent kernel function, resulting in a
+ semi-supervised extension of SMTR, called SSMTR. Moreover,
+ we incorporate pairwise information into SSMTR to further
+ boost the learning performance for applications in which
+ such information is available. Experiments conducted on two
+ commonly used data sets for multi-task regression
+ demonstrate the effectiveness of our methods.
+ </b:abstract>
+ </b:article>
+ <b:inproceedings id="mifs">
+ <b:title>Multi-Label Informed Feature Selection.</b:title>
+ <b:booktitle>
+ Proceedings of the Twenty-Fifth International Joint
+ Conference on Artificial Intelligence
+ </b:booktitle>
+ <b:author>
+ Jian, Ling and Li, Jundong and Shu, Kai and Liu, Huan
+ </b:author>
+ <b:year>2016</b:year>
+ <b:pages>1627--1633</b:pages>
+ </b:inproceedings>
+ <b:inproceedings id="drucker1997support">
+ <b:title>Support vector regression machines</b:title>
+ <b:author>
+ Drucker, Harris and Burges, Christopher JC and Kaufman,
+ Linda and Smola, Alex J and Vapnik, Vladimir
+ </b:author>
+ <b:booktitle>
+ Advances in neural information processing systems
+ </b:booktitle>
+ <b:pages>155--161</b:pages>
+ <b:year>1997</b:year>
+ </b:inproceedings>
+ <b:article id="chapelle_optimization_2008">
+ <b:title>Optimization Techniques for Semi-Supervised Support Vector Machines</b:title>
+ <b:volume>9</b:volume>
+ <b:issn>1532-4435</b:issn>
+ <b:url>http://dl.acm.org/citation.cfm?id=1390681.1390688</b:url>
+ <b:journal>Journal of machine learning research</b:journal>
+ <b:author>Chapelle, Olivier and Sindhwani, Vikas and Keerthi, Sathiya S.</b:author>
+ <b:month>jun</b:month>
+ <b:year>2008</b:year>
+ <b:pages>203--233</b:pages>
+ </b:article>
+ <b:inproceedings id="bennett1999semi">
+ <b:title>Semi-supervised support vector machines</b:title>
+ <b:author>Bennett, Kristin P and Demiriz, Ayhan</b:author>
+ <b:booktitle>Advances in Neural Information processing systems</b:booktitle>
+ <b:pages>368--374</b:pages>
+ <b:year>1999</b:year>
+ </b:inproceedings>
+ <b:article id="chen2012laplacian">
+ <b:title>
+ Laplacian embedded regression for scalable manifold
+ regularization
+ </b:title>
+ <b:author>Chen, Lin and Tsang, Ivor W and Xu, Dong</b:author>
+ <b:journal>
+ IEEE transactions on neural networks and learning systems
+ </b:journal>
+ <b:volume>23</b:volume>
+ <b:number>6</b:number>
+ <b:pages>902--915</b:pages>
+ <b:year>2012</b:year>
+ <b:publisher>IEEE</b:publisher>
+ </b:article>
+ <b:article id="selftraining">
+ <b:author>H. Scudder</b:author>
+ <b:journal>
+ IEEE Transactions on Information Theory,
+ </b:journal>
+ <b:title>
+ Probability of error of some adaptive pattern-recognition
+ machines,
+ </b:title>
+ <b:year>1965</b:year>
+ <b:volume>11</b:volume>
+ <b:number>3</b:number>
+ <b:pages>363-371</b:pages>
+ <b:doi>10.1109/TIT.1965.1053799</b:doi>
+ </b:article>
+ <b:article id="cramer2002origins">
+ <b:title>The origins of logistic regression</b:title>
+ <b:author>Cramer, JS</b:author>
+ <b:journal>Tinbergen Institute Working Paper</b:journal>
+ <b:volume>2002</b:volume>
+ <b:number>119/4</b:number>
+ <b:year>2002</b:year>
+ </b:article>
+ <b:inproceedings id="levatic_semi-supervised_2014">
+ <b:title>Semi-supervised learning for multi-target regression</b:title>
+ <b:url>http://link.springer.com/chapter/10.1007/978-3-319-17876-9_1</b:url>
+ <b:urldate>2017-10-11</b:urldate>
+ <b:booktitle>International Workshop on New Frontiers in Mining Complex Patterns</b:booktitle>
+ <b:publisher>Springer</b:publisher>
+ <b:author>Levatić, Jurica and Ceci, Michelangelo and Kocev, Dragi and Džeroski, Sašo</b:author>
+ <b:year>2014</b:year>
+ <b:pages>3--18</b:pages>
+ </b:inproceedings>
+ <b:inproceedings id="arazo_pseudo-labeling_nodate">
+ <b:title>
+ Pseudo-labeling and confirmation bias in deep
+ semi-supervised learning
+ </b:title>
+ <b:author>
+ Arazo, Eric and Ortego, Diego and Albert, Paul and O’Connor,
+ Noel E and McGuinness, Kevin
+ </b:author>
+ <b:booktitle>
+ 2020 International Joint Conference on Neural Networks
+ (IJCNN)
+ </b:booktitle>
+ <b:pages>1--8</b:pages>
+ <b:year>2020</b:year>
+ <b:organization>IEEE</b:organization>
+ <b:abstract>
+ Semi-supervised learning, i.e. jointly learning from labeled
+ and unlabeled samples, is an active research topic due to
+ its key role on relaxing human supervision. In the context
+ of image classification, recent advances to learn from
+ unlabeled samples are mainly focused on consistency
+ regularization methods that encourage invariant predictions
+ for different perturbations of unlabeled samples. We,
+ conversely, propose to learn from unlabeled data by
+ generating soft pseudo-labels using the network
+ predictions. We show that a naive pseudo-labeling overfits
+ to incorrect pseudo-labels due to the so-called confirmation
+ bias and demonstrate that mixup augmentation and setting a
+ minimum number of labeled samples per mini-batch are
+ effective regularization techniques for reducing it. The
+ proposed approach achieves state-of-the-art results in
+ CIFAR-10/100, SVHN, and Mini-ImageNet despite being much
+ simpler than other methods. These results demonstrate that
+ pseudo-labeling alone can outperform consistency
+ regularization methods, while the opposite was supposed in
+ previous work. Source code is available at
+ https://git.io/fjQsC.
+ </b:abstract>
+ <b:language>en</b:language>
+ </b:inproceedings>
+ <b:inproceedings id="bennett_semi-supervised_1998">
+ <b:address>Cambridge, MA, USA</b:address>
+ <b:series>NIPS'98</b:series>
+ <b:title>Semi-supervised Support Vector Machines</b:title>
+ <b:url>http://dl.acm.org/citation.cfm?id>3009055.3009107</b:url>
+ <b:booktitle>
+ Proceedings of the 11th International Conference on Neural
+ Information Processing Systems
+ </b:booktitle>
+ <b:publisher>MIT Press</b:publisher>
+ <b:author>Bennett, Kristin P. and Demiriz, Ayhan</b:author>
+ <b:year>1998</b:year>
+ <b:pages>368--374</b:pages>
+ </b:inproceedings>
+ <b:article id="levatic_self_training_2017">
+ <b:title>
+ Self-training for multi-target regression with tree
+ ensembles
+ </b:title>
+ <b:volume>123</b:volume>
+ <b:issn>09507051</b:issn>
+ <b:url>https://linkinghub.elsevier.com/retrieve/pii/S0950705117300813</b:url>
+ <b:doi>10.1016/j.knosys.2017.02.014</b:doi>
+ <!-- <b:abstract> -->
+ <!-- Semi-supervised learning (SSL) aims to use unlabeled data as -->
+ <!-- an additional source of information in order to improve upon -->
+ <!-- the performance of supervised learning methods. The -->
+ <!-- availability of labeled data is often limited due to the -->
+ <!-- expensive and/or tedious annotation process, while unlabeled -->
+ <!-- data could be easily available in large amounts. This is -->
+ <!-- particularly true for predictive modelling problems with a -->
+ <!-- structured output space. In this study, we address the task -->
+ <!-- of SSL for multi-target regression (MTR), where the output -->
+ <!-- space consists of multiple numerical values. We extend the -->
+ <!-- self-training approach to perform SSL for MTR by using a -->
+ <!-- random forest of predictive clustering trees. In -->
+ <!-- self-training, a model iteratively uses its own most -->
+ <!-- reliable predictions, hence a good measure for the -->
+ <!-- reliability of predictions is essential. Given that -->
+ <!-- reliability estimates for MTR predictions have not yet been -->
+ <!-- studied, we propose four such estimates, based on mechanisms -->
+ <!-- provided within ensemble learning. In addition to these four -->
+ <!-- scores, we use two benchmark scores (oracle and random) to -->
+ <!-- empirically determine the performance limits of -->
+ <!-- selftraining. We also propose an approach to automatically -->
+ <!-- select a threshold for the identification of the most -->
+ <!-- reliable predictions to be used in the next iteration. An -->
+ <!-- empirical evaluation on a large collection of datasets for -->
+ <!-- MTR shows that self-training with any of the proposed -->
+ <!-- reliability scores is able to consistently improve over -->
+ <!-- supervised random forests and multi-output support vector -->
+ <!-- regression. This is also true when the reliability threshold -->
+ <!-- is selected automatically. -->
+ <!-- </b:abstract> -->
+ <b:language>en</b:language>
+ <b:urldate>2020-09-09</b:urldate>
+ <b:journal>Knowledge-Based Systems</b:journal>
+ <b:author>
+ Levatić, Jurica and Ceci, Michelangelo and Kocev, Dragi and
+ Džeroski, Sašo
+ </b:author>
+ <b:month>may</b:month>
+ <b:year>2017</b:year>
+ <b:pages>41--60</b:pages>
+ </b:article>
+ <b:inproceedings id="blum_combining_1998">
+ <b:address>New York, NY, USA</b:address>
+ <b:series>COLT' 98</b:series>
+ <b:title>
+ Combining Labeled and Unlabeled Data with Co-training
+ </b:title>
+ <b:isbn>1-58113-057-0</b:isbn>
+ <b:url>http://doi.acm.org/10.1145/279943.279962</b:url>
+ <b:doi>10.1145/279943.279962</b:doi>
+ <b:booktitle>
+ Proceedings of the Eleventh Annual Conference on
+ Computational Learning Theory
+ </b:booktitle>
+ <b:publisher>ACM</b:publisher>
+ <b:author>Blum, Avrim and Mitchell, Tom</b:author>
+ <b:year>1998</b:year>
+ <b:pages>92--100</b:pages>
+ </b:inproceedings>
+ <b:inproceedings id="zhou_semi-supervised_2005">
+ <b:title>
+ Semi-Supervised Regression with Co-Training.
+ </b:title>
+ <b:volume>5</b:volume>
+ <b:url>http://cs.nju.edu.cn/_upload/tpl/00/c5/197/template197/publications/ijcai05.pdf</b:url>
+ <b:urldate>2017-10-12</b:urldate>
+ <b:booktitle>
+ Proceedings of the 19th international joint conference on
+ Artificial intelligence
+ </b:booktitle>
+ <b:author>Zhou, Zhi-Hua and Li, Ming</b:author>
+ <b:year>2005</b:year>
+ <b:pages>908--913</b:pages>
+ </b:inproceedings>
+ <b:inproceedings id="barkia_semi-supervised_2011">
+ <b:title>
+ Semi-supervised Feature Importance Evaluation with Ensemble
+ Learning
+ </b:title>
+ <b:isbn>978-1-4577-2075-8 978-0-7695-4408-3</b:isbn>
+ <b:url>http://ieeexplore.ieee.org/document/6137207/</b:url>
+ <b:doi>10.1109/ICDM.2011.129</b:doi>
+ <b:urldate>2017-10-03</b:urldate>
+ <b:publisher>IEEE</b:publisher>
+ <b:booktitle>
+ 2011 IEEE 11th International Conference on Data Mining
+ </b:booktitle>
+ <b:pages>31--40</b:pages>
+ <b:month>dec</b:month>
+ <b:year>2011</b:year>
+ <b:organization>IEEE</b:organization>
+ <b:author>
+ Barkia, Hasna and Elghazel, Haytham and Aussem, Alex
+ </b:author>
+ </b:inproceedings>
+ <b:inproceedings id="zhao_semi-supervised_2007">
+ <b:title>
+ Semi-supervised feature selection via spectral analysis
+ </b:title>
+ <b:url>http://epubs.siam.org/doi/abs/10.1137/1.9781611972771.75</b:url>
+ <b:urldate>2017-10-09</b:urldate>
+ <b:booktitle>
+ Proceedings of the 2007 SIAM International Conference on
+ Data Mining
+ </b:booktitle>
+ <b:publisher>SIAM</b:publisher>
+ <b:author>Zhao, Zheng and Liu, Huan</b:author>
+ <b:year>2007</b:year>
+ <b:pages>641--646</b:pages>
+ </b:inproceedings>
+ <b:article id="benabdeslem_efficient_2014">
+ <b:title>
+ Efficient Semi-Supervised Feature Selection: Constraint,
+ Relevance, and Redundancy
+ </b:title>
+ <b:volume>26</b:volume>
+ <b:issn>1041-4347</b:issn>
+ <b:shorttitle>
+ Efficient Semi-Supervised Feature Selection
+ </b:shorttitle>
+ <b:url>http://ieeexplore.ieee.org/document/6520860/</b:url>
+ <b:doi>10.1109/TKDE.2013.86</b:doi>
+ <b:number>5</b:number>
+ <b:urldate>2017-10-05</b:urldate>
+ <b:journal>
+ IEEE Transactions on Knowledge and Data Engineering
+ </b:journal>
+ <b:author>Benabdeslem, Khalid and Hindawi, Mohammed</b:author>
+ <b:month>may</b:month>
+ <b:year>2014</b:year>
+ <b:pages>1131--1143</b:pages>
+ </b:article>
+ <b:inproceedings id="hindawi_local--global_2013">
+ <b:address>New York, NY, USA</b:address>
+ <b:series>CIKM '13</b:series>
+ <b:title>
+ Local-to-global semi-supervised feature selection
+ </b:title>
+ <b:isbn>978-1-4503-2263-8</b:isbn>
+ <b:url>http://doi.acm.org/10.1145/2505515.2505542</b:url>
+ <b:doi>10.1145/2505515.2505542</b:doi>
+ <b:abstract>
+ Variable-weighting approaches are well-known in the context
+ of embedded feature selection. Generally, this task is
+ performed in a global way, when the algorithm selects a
+ single cluster-independent subset of features (global
+ feature selection). However, there exist other approaches
+ that aim to select cluster-specific subsets of features
+ (local feature selection). Global and local feature
+ selection have different objectives, nevertheless, in this
+ paper we propose a novel embedded approach which locally
+ weights the variables towards a global feature
+ selection. The proposed approach is presented in the
+ semi-supervised paradigm. Experiments on some known data
+ sets are presented to validate our model and compare it with
+ some representative methods.
+ </b:abstract>
+ <b:urldate>2017-10-09</b:urldate>
+ <b:booktitle>
+ Proceedings of the 22nd ACM international conference on
+ Conference on information &amp; knowledge management
+ </b:booktitle>
+ <b:publisher>ACM</b:publisher>
+ <b:author>Hindawi, Mohammed and Benabdeslem, Khalid</b:author>
+ <b:year>2013</b:year>
+ <b:keywords>
+ semi-supervised learning, constraints, feature selection,
+ variable weighting
+ </b:keywords>
+ <b:pages>2159--2168</b:pages>
+ </b:inproceedings>
+ <b:inproceedings id="collobert2008unified">
+ <b:title>
+ A unified architecture for natural language processing: Deep
+ neural networks with multitask learning
+ </b:title>
+ <b:author>Collobert, Ronan and Weston, Jason</b:author>
+ <b:booktitle>
+ Proceedings of the 25th international conference on Machine
+ learning
+ </b:booktitle>
+ <b:pages>160--167</b:pages>
+ <b:year>2008</b:year>
+ </b:inproceedings>
+ <b:inproceedings id="argyriou2008spectral">
+ <b:title>
+ A spectral regularization framework for multi-task structure
+ learning
+ </b:title>
+ <b:author>
+ Argyriou, Andreas and Pontil, Massimiliano and Ying, Yiming
+ and Micchelli, Charles A
+ </b:author>
+ <b:booktitle>
+ Advances in neural information processing systems
+ </b:booktitle>
+ <b:pages>25--32</b:pages>
+ <b:year>2008</b:year>
+ </b:inproceedings>
+ <b:inproceedings id="sarcos">
+ <b:title>
+ Locally weighted projection regression:
+ An <h:eq>\mathcal{O}(n)</h:eq> algorithm for incremental
+ real time learning in high dimensional spaces
+ </b:title>
+ <b:author>Vijayakumar, S. and Schaal, S.</b:author>
+ <b:booktitle>
+ Proceedings of the Seventeenth International Conference on
+ Machine Learning (ICML 2000)
+ </b:booktitle>
+ <b:volume>1</b:volume>
+ <b:pages>288-293</b:pages>
+ <b:address>Stanford, CA</b:address>
+ <b:year>2000</b:year>
+ <b:note>clmc</b:note>
+ <b:url>http://www-clmc.usc.edu/publications/V/vijayakumar-ICML2000.pdf</b:url>
+ </b:inproceedings>
+ <b:article id="spyromitros_xioufis_multi_target_2016">
+ <b:title>
+ Multi-Target Regression via Input Space Expansion: Treating
+ Targets as Inputs
+ </b:title>
+ <b:volume>104</b:volume>
+ <b:issn>0885-6125, 1573-0565</b:issn>
+ <b:shorttitle>
+ Multi-Target Regression via Input Space Expansion
+ </b:shorttitle>
+ <b:url>http://arxiv.org/abs/1211.6581</b:url>
+ <b:doi>10.1007/s10994-016-5546-z</b:doi>
+ <!-- <b:abstract> -->
+ <!-- In many practical applications of supervised learning the -->
+ <!-- task involves the prediction of multiple target variables -->
+ <!-- from a common set of input variables. When the prediction -->
+ <!-- targets are binary the task is called multi-label -->
+ <!-- classification, while when the targets are continuous the -->
+ <!-- task is called multi-target regression. In both tasks, -->
+ <!-- target variables often exhibit statistical dependencies and -->
+ <!-- exploiting them in order to improve predictive accuracy is a -->
+ <!-- core challenge. A family of multi-label classification -->
+ <!-- methods address this challenge by building a separate model -->
+ <!-- for each target on an expanded input space where other -->
+ <!-- targets are treated as additional input variables. Despite -->
+ <!-- the success of these methods in the multi-label -->
+ <!-- classification domain, their applicability and effectiveness -->
+ <!-- in multi-target regression has not been studied until -->
+ <!-- now. In this paper, we introduce two new methods for -->
+ <!-- multi-target regression, called Stacked Single-Target and -->
+ <!-- Ensemble of Regressor Chains, by adapting two popular -->
+ <!-- multi-label classification methods of this -->
+ <!-- family. Furthermore, we highlight an inherent problem of -->
+ <!-- these methods - a discrepancy of the values of the -->
+ <!-- additional input variables between training and prediction - -->
+ <!-- and develop extensions that use out-of-sample estimates of -->
+ <!-- the target variables during training in order to tackle this -->
+ <!-- problem. The results of an extensive experimental evaluation -->
+ <!-- carried out on a large and diverse collection of datasets -->
+ <!-- show that, when the discrepancy is appropriately mitigated, -->
+ <!-- the proposed methods attain consistent improvements over the -->
+ <!-- independent regressions baseline. Moreover, two versions of -->
+ <!-- Ensemble of Regression Chains perform significantly better -->
+ <!-- than four state-of-the-art methods including -->
+ <!-- regularization-based multi-task learning methods and a -->
+ <!-- multi-objective random forest approach. -->
+ <!-- </b:abstract> -->
+ <b:number>1</b:number>
+ <b:urldate>2017-10-16</b:urldate>
+ <b:journal>Machine Learning</b:journal>
+ <b:author>
+ Spyromitros-Xioufis, Eleftherios and Tsoumakas, Grigorios
+ and Groves, William and Vlahavas, Ioannis
+ </b:author>
+ <b:month>jul</b:month>
+ <b:year>2016</b:year>
+ <b:note>arXiv: 1211.6581</b:note>
+ <b:keywords>Computer Science - Learning</b:keywords>
+ <b:pages>55--98</b:pages>
+ <b:annote>
+ Comment: Accepted for publication in Machine Learning
+ journal. This replacement contains major improvements
+ compared to the previous version, including a deeper
+ theoretical and experimental analysis and an extended
+ discussion of related work.
+ </b:annote>
+ </b:article>
+ <b:article id="argyriou_multitask_nodate">
+ <b:title>Multi-Task Feature Learning</b:title>
+ <!-- <b:abstract> -->
+ <!-- We present a method for learning a low-dimensional -->
+ <!-- representation which is shared across a set of multiple -->
+ <!-- related tasks. The method builds upon the wellknown 1-norm -->
+ <!-- regularization problem using a new regularizer which -->
+ <!-- controls the number of learned features common for all the -->
+ <!-- tasks. We show that this problem is equivalent to a convex -->
+ <!-- optimization problem and develop an iterative algorithm for -->
+ <!-- solving it. The algorithm has a simple interpretation: it -->
+ <!-- alternately performs a supervised and an unsupervised step, -->
+ <!-- where in the latter step we learn commonacross-tasks -->
+ <!-- representations and in the former step we learn task-specific -->
+ <!-- functions using these representations. We report experiments -->
+ <!-- on a simulated and a real data set which demonstrate that -->
+ <!-- the proposed method dramatically improves the performance -->
+ <!-- relative to learning each task independently. Our algorithm -->
+ <!-- can also be used, as a special case, to simply select – not -->
+ <!-- learn – a few common features across the tasks. -->
+ <!-- </b:abstract> -->
+ <b:language>en</b:language>
+ <b:author>
+ Argyriou, Andreas and Evgeniou, Theodoros and Pontil,
+ Massimiliano
+ </b:author>
+ <b:year>2007</b:year>
+ <b:journal>
+ Advances in neural information processing systems
+ </b:journal>
+ <b:pages>41--48</b:pages>
+ </b:article>
+ <b:article id="tibshirani1996regression">
+ <b:title>
+ Regression shrinkage and selection via the lasso
+ </b:title>
+ <b:author>Tibshirani, Robert</b:author>
+ <b:journal>
+ Journal of the Royal Statistical Society: Series B
+ (Methodological)
+ </b:journal>
+ <b:volume>58</b:volume>
+ <b:number>1</b:number>
+ <b:pages>267--288</b:pages>
+ <b:year>1996</b:year>
+ <b:publisher>Wiley Online Library</b:publisher>
+ </b:article>
+ <b:article id="jalali_dirty_nodate">
+ <b:title>A Dirty Model for Multi-task Learning</b:title>
+ <!-- <b:abstract> -->
+ <!-- We consider multi-task learning in the setting of multiple -->
+ <!-- linear regression, and where some relevant features could be -->
+ <!-- shared across the tasks. Recent research has studied the use -->
+ <!-- of ℓ1/ℓq norm block-regularizations with q \textgreater 1 -->
+ <!-- for such blocksparse structured problems, establishing -->
+ <!-- strong guarantees on recovery even under high-dimensional -->
+ <!-- scaling where the number of features scale with the number -->
+ <!-- of observations. However, these papers also caution that the -->
+ <!-- performance of such block-regularized methods are very -->
+ <!-- dependent on the extent to which the features are shared -->
+ <!-- across tasks. Indeed they show [8] that if the extent of -->
+ <!-- overlap is less than a threshold, or even if parameter -->
+ <!-- values in the shared features are highly uneven, then block -->
+ <!-- ℓ1/ℓq regularization could actually perform worse than -->
+ <!-- simple separate elementwise ℓ1 regularization. Since these -->
+ <!-- caveats depend on the unknown true parameters, we might not -->
+ <!-- know when and which method to apply. Even otherwise, we are -->
+ <!-- far away from a realistic multi-task setting: not only do -->
+ <!-- the set of relevant features have to be exactly the same -->
+ <!-- across tasks, but their values have to as well. -->
+ <!-- </b:abstract> -->
+ <b:language>en</b:language>
+ <b:author>
+ Jalali, Ali and Sanghavi, Sujay and Ruan, Chao and
+ Ravikumar, Pradeep K
+ </b:author>
+ <b:journal>
+ Advances in neural information processing systems
+ </b:journal>
+ <b:volume>23</b:volume>
+ <b:pages>964--972</b:pages>
+ <b:year>2010</b:year>
+ </b:article>
+ <b:article id="he_laplacian_nodate">
+ <b:title>Laplacian Score for Feature Selection</b:title>
+ <!-- <b:abstract> -->
+ <!-- In supervised learning scenarios, feature selection has been -->
+ <!-- studied widely in the literature. Selecting features in -->
+ <!-- unsupervised learning scenarios is a much harder problem, -->
+ <!-- due to the absence of class labels that would guide the -->
+ <!-- search for relevant information. And, almost all of previous -->
+ <!-- unsupervised feature selection methods are “wrapper” -->
+ <!-- techniques that require a learning algorithm to evaluate the -->
+ <!-- candidate feature subsets. In this paper, we propose a -->
+ <!-- “filter” method for feature selection which is independent of -->
+ <!-- any learning algorithm. Our method can be performed in -->
+ <!-- either supervised or unsupervised fashion. The proposed -->
+ <!-- method is based on the observation that, in many real world -->
+ <!-- classification problems, data from the same class are often -->
+ <!-- close to each other. The importance of a feature is -->
+ <!-- evaluated by its power of locality preserving, or, Laplacian -->
+ <!-- Score. We compare our method with data variance -->
+ <!-- (unsupervised) and Fisher score (supervised) on two data -->
+ <!-- sets. Experimental results demonstrate the effectiveness and -->
+ <!-- efficiency of our algorithm. -->
+ <!-- </b:abstract> -->
+ <b:language>en</b:language>
+ <b:author>
+ He, Xiaofei and Cai, Deng and Niyogi, Partha
+ </b:author>
+ <b:journal>
+ Advances in neural information processing systems
+ </b:journal>
+ <b:volume>18</b:volume>
+ <b:pages>507--514</b:pages>
+ <b:year>2005</b:year>
+ </b:article>
+ <b:article id="malsar">
+ <b:author>Zhou, Jiayu and Chen, J and Ye, J</b:author>
+ <b:year>2012</b:year>
+ <b:month>01</b:month>
+ <b:title>MALSAR: Multi-tAsk Learning via StructurAl Regularization</b:title>
+ </b:article>
+ <b:article id="zhu_multilabel_2017">
+ <b:title>
+ Multi-Label Learning with Global and Local Label Correlation
+ </b:title>
+ <b:url>http://arxiv.org/abs/1704.01415</b:url>
+ <!-- <b:abstract> -->
+ <!-- It is well-known that exploiting label correlations is -->
+ <!-- important to multi-label learning. Existing approaches -->
+ <!-- either assume that the label correlations are global and -->
+ <!-- shared by all instances; or that the label correlations are -->
+ <!-- local and shared only by a data subset. In fact, in the -->
+ <!-- real-world applications, both cases may occur that some -->
+ <!-- label correlations are globally applicable and some are -->
+ <!-- shared only in a local group of instances. Moreover, it is -->
+ <!-- also a usual case that only partial labels are observed, -->
+ <!-- which makes the exploitation of the label correlations much -->
+ <!-- more difficult. That is, it is hard to estimate the label -->
+ <!-- correlations when many labels are absent. In this paper, we -->
+ <!-- propose a new multi-label approach GLOCAL dealing with both -->
+ <!-- the full-label and the missinglabel cases, exploiting global -->
+ <!-- and local label correlations simultaneously, through -->
+ <!-- learning a latent label representation and optimizing label -->
+ <!-- manifolds. The extensive experimental studies validate the -->
+ <!-- effectiveness of our approach on both full-label and -->
+ <!-- missing-label data. -->
+ <!-- </b:abstract> -->
+ <b:language>en</b:language>
+ <b:urldate>2020-09-17</b:urldate>
+ <b:journal>
+ IEEE Transactions on Knowledge and Data Engineering
+ </b:journal>
+ <b:author>
+ Zhu, Yue and Kwok, James T. and Zhou, Zhi-Hua
+ </b:author>
+ <b:month>apr</b:month>
+ <b:year>2017</b:year>
+ <b:note>arXiv: 1704.01415</b:note>
+ <b:keywords>
+ Computer Science - Machine Learning, Computer Science -
+ Artificial Intelligence
+ </b:keywords>
+ </b:article>
+ <b:article id="rank">
+ <b:title>Convex Multi-Task Feature Learning</b:title>
+ <!-- <b:abstract> -->
+ <!-- We present a method for learning sparse representations -->
+ <!-- shared across multiple tasks. This method is a -->
+ <!-- generalization of the well-known singletask 1-norm -->
+ <!-- regularization. It is based on a novel non-convex -->
+ <!-- regularizer which controls the number of learned features -->
+ <!-- common across the tasks. We prove that the method is -->
+ <!-- equivalent to solving a convex optimization problem for -->
+ <!-- which there is an iterative algorithm which converges to an -->
+ <!-- optimal solution. The algorithm has a simple interpretation: -->
+ <!-- it alternately performs a supervised and an unsupervised -->
+ <!-- step, where in the former step it learns task-specific -->
+ <!-- functions and in the latter step it learns -->
+ <!-- common-across-tasks sparse representations for these -->
+ <!-- functions. We also provide an extension of the algorithm -->
+ <!-- which learns sparse nonlinear representations using -->
+ <!-- kernels. We report experiments on simulated and real data -->
+ <!-- sets which demonstrate that the proposed method can both -->
+ <!-- improve the performance relative to learning each task -->
+ <!-- independently and lead to a few learned features common -->
+ <!-- across related tasks. Our algorithm can also be used, as a -->
+ <!-- special case, to simply select – not learn – a few common -->
+ <!-- variables across the tasks. -->
+ <!-- </b:abstract> -->
+ <b:language>en</b:language>
+ <b:author>
+ Argyriou, Andreas and Evgeniou, Theodoros and Pontil,
+ Massimiliano
+ </b:author>
+ <b:journal>Machine learning</b:journal>
+ <b:volume>73</b:volume>
+ <b:number>3</b:number>
+ <b:pages>243--272</b:pages>
+ <b:year>2008</b:year>
+ <b:publisher>Springer</b:publisher>
+ </b:article>
+ <b:article id="zha_spectral_nodate">
+ <b:title>Spectral Relaxation for K-means Clustering</b:title>
+ <!-- <b:abstract> -->
+ <!-- The popular K-means clustering partitions a data set by -->
+ <!-- minimizing a sum-of-squares cost function. A coordinate -->
+ <!-- descend method is then used to find local minima. In this -->
+ <!-- paper we show that the minimization can be reformulated as a -->
+ <!-- trace maximization problem associated with the Gram matrix -->
+ <!-- of the data vectors. Furthermore, we show that a relaxed -->
+ <!-- version of the trace maximization problem possesses global -->
+ <!-- optimal solutions which can be obtained by computing a -->
+ <!-- partial eigendecomposition of the Gram matrix, and the -->
+ <!-- cluster assignment for each data vectors can be found by -->
+ <!-- computing a pivoted QR decomposition of the eigenvector -->
+ <!-- matrix. As a by-product we also derive a lower bound for the -->
+ <!-- minimum of the sum-of-squares cost function. -->
+ <!-- </b:abstract> -->
+ <b:language>en</b:language>
+ <b:author>
+ Zha, Hongyuan and He, Xiaofeng and Ding, Chris and Gu, Ming
+ and Simon, Horst D
+ </b:author>
+ <b:journal>
+ Advances in neural information processing systems
+ </b:journal>
+ <b:volume>14</b:volume>
+ <b:pages>1057--1064</b:pages>
+ <b:year>2001</b:year>
+ </b:article>
+ <b:article id="cmtl">
+ <b:title>
+ Clustered Multi-Task Learning Via Alternating Structure
+ Optimization
+ </b:title>
+ <!-- <b:abstract> -->
+ <!-- Multi-task learning (MTL) learns multiple related tasks -->
+ <!-- simultaneously to improve generalization -->
+ <!-- performance. Alternating structure optimization (ASO) is a -->
+ <!-- popular MTL method that learns a shared low-dimensional -->
+ <!-- predictive structure on hypothesis spaces from multiple -->
+ <!-- related tasks. It has been applied successfully in many real -->
+ <!-- world applications. As an alternative MTL approach, -->
+ <!-- clustered multi-task learning (CMTL) assumes that multiple -->
+ <!-- tasks follow a clustered structure, i.e., tasks are -->
+ <!-- partitioned into a set of groups where tasks in the same -->
+ <!-- group are similar to each other, and that such a clustered -->
+ <!-- structure is unknown a priori. The objectives in ASO and -->
+ <!-- CMTL differ in how multiple tasks are -->
+ <!-- related. Interestingly, we show in this paper the -->
+ <!-- equivalence relationship between ASO and CMTL, providing -->
+ <!-- significant new insights into ASO and CMTL as well as their -->
+ <!-- inherent relationship. The CMTL formulation is non-convex, -->
+ <!-- and we adopt a convex relaxation to the CMTL formulation. We -->
+ <!-- further establish the equivalence relationship between the -->
+ <!-- proposed convex relaxation of CMTL and an existing convex -->
+ <!-- relaxation of ASO, and show that the proposed convex CMTL -->
+ <!-- formulation is significantly more efficient especially for -->
+ <!-- high-dimensional data. In addition, we present three -->
+ <!-- algorithms for solving the convex CMTL formulation. We -->
+ <!-- report experimental results on benchmark datasets to -->
+ <!-- demonstrate the efficiency of the proposed algorithms. -->
+ <!-- </b:abstract> -->
+ <b:language>en</b:language>
+ <b:author>
+ Zhou, Jiayu and Chen, Jianhui and Ye, Jieping
+ </b:author>
+ <b:journal>
+ Advances in neural information processing systems
+ </b:journal>
+ <b:volume>24</b:volume>
+ <b:pages>702--710</b:pages>
+ <b:year>2011</b:year>
+ </b:article>
+ <b:article id="cappedl1">
+ <b:title>Analysis of multi-stage convex relaxation for sparse regularization.</b:title>
+ <b:author>Zhang, Tong</b:author>
+ <b:journal>Journal of Machine Learning Research</b:journal>
+ <b:volume>11</b:volume>
+ <b:number>3</b:number>
+ <b:year>2010</b:year>
+ </b:article>
+ <b:inproceedings id="msmtfl">
+ <b:title>Multi-stage multi-task feature learning</b:title>
+ <b:author>Gong, Pinghua and Ye, Jieping and Zhang, Chang-shui</b:author>
+ <b:booktitle>Advances in neural information processing systems</b:booktitle>
+ <b:pages>1988--1996</b:pages>
+ <b:year>2012</b:year>
+ </b:inproceedings>
+ <b:inproceedings id="msmtflrank">
+ <b:title>Multi-Stage Multi-Task Learning with Reduced Rank.</b:title>
+ <b:author>Han, Lei and Zhang, Yu</b:author>
+ <b:booktitle>Proceedings of the Thirtieth AAAI Conference on Artificial Intelligence</b:booktitle>
+ <b:pages>1638--1644</b:pages>
+ <b:year>2016</b:year>
+ </b:inproceedings>
+ <b:article id="l21m2">
+ <b:title>
+ Feature Selection With <h:eq>\ell_{2,1-2}</h:eq> Regularization
+ </b:title>
+ <b:volume>29</b:volume>
+ <b:issn>2162-237X, 2162-2388</b:issn>
+ <b:url>https://ieeexplore.ieee.org/document/8259312/</b:url>
+ <b:doi>10.1109/TNNLS.2017.2785403</b:doi>
+ <b:abstract>
+ Feature selection aims to select a subset of features from
+ high-dimensional data according to a predefined selecting
+ criterion. Sparse learning has been proven to be a powerful
+ technique in feature selection. Sparse regularizer, as a key
+ component of sparse learning, has been studied for several
+ years. Although convex regularizers have been used in many
+ works, there are some cases where nonconvex regularizers
+ outperform convex regularizers. To make the process of
+ selecting relevant features more effective, we propose a
+ novel nonconvex sparse metric on matrices as the sparsity
+ regularization in this paper. The new nonconvex regularizer
+ could be written as the difference of
+ the <h:eq>\ell_{2,1}</h:eq> norm and the
+ Frobenius <h:eq>\ell_{2,2}</h:eq> norm, which is named the
+ <h:eq>\ell_{2,1-2}</h:eq>. To find the solution of the
+ resulting nonconvex formula, we design an iterative
+ algorithm in the framework of ConCave–Convex Procedure
+ (CCCP) and prove its strong global convergence. An adopted
+ alternating direction method of multipliers is embedded to
+ solve the sequence of convex subproblems in CCCP
+ efficiently. Using the scaled cluster indictors of data
+ points as pseudolabels, we also
+ apply <h:eq>\ell_{2,1-2}</h:eq> to the unsupervised case. To
+ the best of our knowledge, it is the first work considering
+ nonconvex regularization for matrices in the unsupervised
+ learning scenario. Numerical experiments are performed on
+ realworld data sets to demonstrate the effectiveness of the
+ proposed method.
+ </b:abstract>
+ <b:language>en</b:language>
+ <b:number>10</b:number>
+ <b:urldate>2020-09-20</b:urldate>
+ <b:journal>
+ IEEE Trans. Neural Netw. Learning Syst.
+ </b:journal>
+ <b:author>
+ Shi, Yong and Miao, Jianyu and Wang, Zhengyu and Zhang, Peng
+ and Niu, Lingfeng
+ </b:author>
+ <b:month>oct</b:month>
+ <b:year>2018</b:year>
+ <b:pages>4967--4982</b:pages>
+ </b:article>
+ <b:article id="li_convex_2013">
+ <b:title>Convex and scalable weakly labeled svms</b:title>
+ <b:volume>14</b:volume>
+ <b:url>http://www.jmlr.org/papers/volume14/li13a/li13a.pdf</b:url>
+ <b:number>1</b:number>
+ <b:urldate>2017-10-09</b:urldate>
+ <b:journal>The Journal of Machine Learning Research</b:journal>
+ <b:author>
+ Li, Yu-Feng and Tsang, Ivor W. and Kwok, James T. and Zhou,
+ Zhi-Hua
+ </b:author>
+ <b:year>2013</b:year>
+ <b:pages>2151--2188</b:pages>
+ </b:article>
+ <b:book id="basu_constrained_2009">
+ <b:address>Boca Raton</b:address>
+ <b:series>
+ Chapman &amp; Hall/CRC data mining and knowledge discovery
+ series
+ </b:series>
+ <b:title>
+ Constrained clustering: advances in algorithms, theory, and applications
+ </b:title>
+ <b:isbn>978-1-58488-996-0</b:isbn>
+ <b:shorttitle>Constrained clustering</b:shorttitle>
+ <b:publisher>CRC Press</b:publisher>
+ <b:editor>
+ Basu, Sugato and Davidson, Ian and Wagstaff, Kiri Lou
+ </b:editor>
+ <b:year>2009</b:year>
+ <b:note>OCLC: ocn144226504</b:note>
+ <b:keywords>
+ Cluster analysis, Computer algorithms, Data mining, Data
+ processing
+ </b:keywords>
+ <b:annote>A Chapman &amp; Hall book."</b:annote>
+ </b:book>
+ <b:inproceedings id="joachims1999transductive">
+ <b:title>
+ Transductive inference for text classification using support
+ vector machines
+ </b:title>
+ <b:author>Joachims, Thorsten</b:author>
+ <b:booktitle>ICML</b:booktitle>
+ <b:volume>99</b:volume>
+ <b:pages>200--209</b:pages>
+ <b:year>1999</b:year>
+ </b:inproceedings>
+ <b:inproceedings id="blum_learning_2001">
+ <b:address>San Francisco, CA, USA</b:address>
+ <b:series>ICML '01</b:series>
+ <b:title>
+ Learning from Labeled and Unlabeled Data Using Graph Mincuts
+ </b:title>
+ <b:isbn>1-55860-778-1</b:isbn>
+ <b:url>http://dl.acm.org/citation.cfm?id=645530.757779</b:url>
+ <b:booktitle>
+ Proceedings of the Eighteenth International Conference on
+ Machine Learning
+ </b:booktitle>
+ <b:publisher>Morgan Kaufmann Publishers Inc.</b:publisher>
+ <b:author>Blum, Avrim and Chawla, Shuchi</b:author>
+ <b:year>2001</b:year>
+ <b:pages>19--26</b:pages>
+ </b:inproceedings>
+ <b:article id="nigam2000text">
+ <b:title>
+ Text classification from labeled and unlabeled documents
+ using EM
+ </b:title>
+ <b:author>
+ Nigam, Kamal and McCallum, Andrew Kachites and Thrun,
+ Sebastian and Mitchell, Tom
+ </b:author>
+ <b:journal>Machine learning</b:journal>
+ <b:volume>39</b:volume>
+ <b:number>2</b:number>
+ <b:pages>103--134</b:pages>
+ <b:year>2000</b:year>
+ <b:publisher>Springer</b:publisher>
+ </b:article>
+ <b:article id="azriel_semi-supervised_2016">
+ <b:title>Semi-Supervised linear regression</b:title>
+ <b:journal>arXiv preprint arXiv:1612.02391</b:journal>
+ <b:author>
+ Azriel, David and Brown, Lawrence D and Sklar, Michael and
+ Berk, Richard and Buja, Andreas and Zhao, Linda
+ </b:author>
+ <b:year>2016</b:year>
+ </b:article>
+ <b:inproceedings id="amini_semi-supervised_2002">
+ <b:address>
+ Amsterdam, The Netherlands, The Netherlands
+ </b:address>
+ <b:series>ECAI'02</b:series>
+ <b:title>
+ Semi-supervised Logistic Regression
+ </b:title>
+ <b:isbn>978-1-58603-257-9</b:isbn>
+ <b:url>http://dl.acm.org/citation.cfm?id=3000905.3000988</b:url>
+ <b:booktitle>
+ Proceedings of the 15th European Conference on Artificial
+ Intelligence
+ </b:booktitle>
+ <b:publisher>IOS Press</b:publisher>
+ <b:author>Amini, Massih-Reza and Gallinari, Patrick</b:author>
+ <b:year>2002</b:year>
+ <b:keywords>
+ machine learning, semi-supervised learning
+ </b:keywords>
+ <b:pages>390--394</b:pages>
+ </b:inproceedings>
+ <b:techreport id="cai_semi-supervised_2006">
+ <b:title>Semi-supervised regression using spectral techniques</b:title>
+ <b:author>Cai, Deng and He, Xiaofei and Han, Jiawei</b:author>
+ <b:year>2006</b:year>
+ </b:techreport>
+ <b:article id="zhou_semi-supervised_nodate">
+ <b:title>
+ Semi-Supervised Regression with Co-Training
+ </b:title>
+ <!-- <b:abstract> -->
+ <!-- In many practical machine learning and data mining -->
+ <!-- applications, unlabeled training examples are readily -->
+ <!-- available but labeled ones are fairly expensive to -->
+ <!-- obtain. Therefore, semi-supervised learning algorithms such -->
+ <!-- as co-training have attracted much attention. Previous -->
+ <!-- research mainly focuses on semi-supervised -->
+ <!-- classification. In this paper, a co-training style -->
+ <!-- semi-supervised regression algorithm, i.e. COREG, is -->
+ <!-- proposed. This algorithm uses two k-nearest neighbor -->
+ <!-- regressors with different distance metrics, each of which -->
+ <!-- labels the unlabeled data for the other regressor where the -->
+ <!-- labeling confidence is estimated through consulting the -->
+ <!-- influence of the labeling of unlabeled examples on the -->
+ <!-- labeled ones. Experiments show that COREG can effectively -->
+ <!-- exploit unlabeled data to improve regression estimates. -->
+ <!-- </b:abstract> -->
+ <b:language>en</b:language>
+ <b:author>Zhou, Zhi-Hua and Li, Ming</b:author>
+ <b:pages>6</b:pages>
+ </b:article>
+ <b:article id="ryan_semi-supervised_2015">
+ <b:title>
+ On semi-supervised linear regression in covariate shift
+ problems.
+ </b:title>
+ <b:volume>16</b:volume>
+ <b:url>http://www.jmlr.org/papers/volume16/ryan15a/ryan15a.pdf</b:url>
+ <b:urldate>2017-10-10</b:urldate>
+ <b:journal>Journal of Machine Learning Research</b:journal>
+ <b:author>Ryan, Kenneth Joseph and Culp, Mark Vere</b:author>
+ <b:year>2015</b:year>
+ <b:pages>3183--3217</b:pages>
+ </b:article>
+ <b:article id="moscovich_minimax-optimal_nodate">
+ <b:author>
+ Amit Moscovich and Ariel Jaffe and Boaz Nadler
+ </b:author>
+ <b:editor>
+ Aarti Singh and Xiaojin (Jerry) Zhu
+ </b:editor>
+ <b:title>
+ Minimax-optimal semi-supervised regression on unknown
+ manifolds
+ </b:title>
+ <b:booktitle>
+ Proceedings of the 20th International Conference on
+ Artificial Intelligence and Statistics
+ </b:booktitle>
+ <b:series>Proceedings of Machine Learning Research</b:series>
+ <b:volume>54</b:volume>
+ <b:pages>933--942</b:pages>
+ <b:publisher>PMLR}</b:publisher>
+ <b:year>2017</b:year>
+ </b:article>
+ <b:inproceedings id="ho1995random">
+ <b:title>Random decision forests</b:title>
+ <b:author>Ho, Tin Kam</b:author>
+ <b:booktitle>
+ Proceedings of 3rd international conference on document
+ analysis and recognition
+ </b:booktitle>
+ <b:volume>1</b:volume>
+ <b:pages>278--282</b:pages>
+ <b:year>1995</b:year>
+ <b:organization>IEEE</b:organization>
+ </b:inproceedings>
+ <b:article id="nusvm">
+ <b:title>New support vector algorithms</b:title>
+ <b:author>
+ Schölkopf, Bernhard and Smola, Alex J and Williamson, Robert
+ C and Bartlett, Peter L
+ </b:author>
+ <b:journal>Neural computation</b:journal>
+ <b:volume>12</b:volume>
+ <b:number>5</b:number>
+ <b:pages>1207--1245</b:pages>
+ <b:year>2000</b:year>
+ <b:publisher>MIT Press</b:publisher>
+ </b:article>
+ <b:article id="davies2001factors">
+ <b:title>
+ Factors influencing the structural deterioration and
+ collapse of rigid sewer pipes
+ </b:title>
+ <b:author>
+ Davies, JP and Clarke, BA and Whiter, JT and Cunningham, RJ
+ </b:author>
+ <b:journal>Urban water</b:journal>
+ <b:volume>3</b:volume>
+ <b:number>1-2</b:number>
+ <b:pages>73--89</b:pages>
+ <b:year>2001</b:year>
+ <b:publisher>Elsevier</b:publisher>
+ </b:article>
+ <b:article id="ahmadi_2014_influence">
+ <b:author>
+ Mehdi Ahmadi and Frédéric Cherqui and Jean-Christophe De
+ Massiac and Pascal Le Gauffre
+ </b:author>
+ <b:title>
+ Influence of available data on sewer inspection program
+ efficiency
+ </b:title>
+ <b:journal>Urban Water Journal</b:journal>
+ <b:volume>11</b:volume>
+ <b:number>8</b:number>
+ <b:pages>641-656</b:pages>
+ <b:year >2014</b:year>
+ <b:doi>10.1080/1573062X.2013.831910</b:doi>
+ </b:article>
+ <b:article id="harvey2014predicting">
+ <b:author>Harvey, Robert Richard and McBean, Edward Arthur</b:author>
+ <b:title>
+ Predicting the structural condition of individual sanitary
+ sewer pipes with random forests
+ </b:title>
+ <b:journal>Canadian Journal of Civil Engineering</b:journal>
+ <b:volume>41</b:volume>
+ <b:number>4</b:number>
+ <b:pages>294-303</b:pages>
+ <b:year>2014</b:year>
+ <b:doi>10.1139/cjce-2013-0431</b:doi>
+ <b:url>https://doi.org/10.1139/cjce-2013-0431</b:url>
+ </b:article>
+ <b:article id="zhao_learning_2015">
+ <b:title>
+ Learning from normalized local and global discriminative
+ information for semi-supervised regression and
+ dimensionality reduction
+ </b:title>
+ <b:volume>324</b:volume>
+ <b:issn>00200255</b:issn>
+ <b:url>http://linkinghub.elsevier.com/retrieve/pii/S0020025515004533</b:url>
+ <b:doi>10.1016/j.ins.2015.06.021</b:doi>
+ <b:language>en</b:language>
+ <b:urldate>2018-08-14</b:urldate>
+ <b:journal>Information Sciences</b:journal>
+ <b:author>
+ Zhao, Mingbo and Chow, Tommy W.S. and Wu, Zhou and Zhang,
+ Zhao and Li, Bing
+ </b:author>
+ <b:month>dec</b:month>
+ <b:year>2015</b:year>
+ <b:pages>286--309</b:pages>
+ </b:article>
+ <b:article id="zhang2012trace">
+ <b:title>
+ Trace ratio optimization-based semi-supervised nonlinear
+ dimensionality reduction for marginal manifold visualization
+ </b:title>
+ <b:author>
+ Zhang, Zhao and Chow, Tommy WS and Zhao, Mingbo
+ </b:author>
+ <b:journal>
+ IEEE Transactions on Knowledge and Data Engineering
+ </b:journal>
+ <b:volume>25</b:volume>
+ <b:number>5</b:number>
+ <b:pages>1148--1161</b:pages>
+ <b:year>2012</b:year>
+ <b:publisher>IEEE</b:publisher>
+ </b:article>
+ <b:inproceedings id="gasse_optimality_2015">
+ <b:address>Lille, France</b:address>
+ <b:series>Journal of Machine Learning Reasearch Proceedings</b:series>
+ <b:title>On the Optimality of Multi-Label Classification under Subset Zero-One Loss for Distributions Satisfying the Composition Property</b:title>
+ <b:volume>37</b:volume>
+ <b:url>https://hal.archives-ouvertes.fr/hal-01234346</b:url>
+ <b:booktitle>International Conference on Machine Learning</b:booktitle>
+ <b:author>Gasse, Maxime and Aussem, Alex and Elghazel, Haytham</b:author>
+ <b:editor>Bach, Francis R. and Blei, David M.</b:editor>
+ <b:month>jul</b:month>
+ <b:year>2015</b:year>
+ <b:pages>2531--2539</b:pages>
+ </b:inproceedings>
+ <b:article id="borchani_survey_2015">
+ <b:title>A survey on multi-output regression</b:title>
+ <b:volume>5</b:volume>
+ <b:url>http://onlinelibrary.wiley.com/doi/10.1002/widm.1157/full</b:url>
+ <b:number>5</b:number>
+ <b:urldate>2017-10-11</b:urldate>
+ <b:journal>Wiley Interdisciplinary Reviews: Data Mining and Knowledge Discovery</b:journal>
+ <b:author>Borchani, Hanen and Varando, Gherardo and Bielza, Concha and Larrañaga, Pedro</b:author>
+ <b:year>2015</b:year>
+ <b:pages>216--233</b:pages>
+ </b:article>
+ <b:article id="read2011classifier">
+ <b:title>Classifier chains for multi-label classification</b:title>
+ <b:author>Read, Jesse and Pfahringer, Bernhard and Holmes, Geoff and Frank, Eibe</b:author>
+ <b:journal>Machine learning</b:journal>
+ <b:volume>85</b:volume>
+ <b:number>3</b:number>
+ <b:pages>333</b:pages>
+ <b:year>2011</b:year>
+ <b:publisher>Springer</b:publisher>
+ </b:article>
+ <b:article id="liu_easy--hard_2017">
+ <b:title>An easy-to-hard learning paradigm for multiple classes and multiple labels</b:title>
+ <b:volume>18</b:volume>
+ <b:number>1</b:number>
+ <b:journal>The Journal of Machine Learning Research</b:journal>
+ <b:author>Liu, Weiwei and Tsang, Ivor W. and Müller, Klaus-Robert</b:author>
+ <b:year>2017</b:year>
+ <b:pages>3300--3337</b:pages>
+ </b:article>
+ <b:inproceedings id="yu_learning_2005">
+ <b:title>Learning Gaussian processes from multiple tasks</b:title>
+ <b:booktitle>Proceedings of the 22nd international conference on Machine learning</b:booktitle>
+ <b:publisher>ACM</b:publisher>
+ <b:author>Yu, Kai and Tresp, Volker and Schwaighofer, Anton</b:author>
+ <b:year>2005</b:year>
+ <b:pages>1012--1019</b:pages>
+ </b:inproceedings>
+ <b:incollection id="chen_feature-aware_2012">
+ <b:title>Feature-aware Label Space Dimension Reduction for Multi-label Classification</b:title>
+ <b:url>http://papers.nips.cc/paper/4561-feature-aware-label-space-dimension-reduction-for-multi-label-classification.pdf</b:url>
+ <b:booktitle>Advances in Neural Information Processing Systems 25</b:booktitle>
+ <b:publisher>Curran Associates, Inc.</b:publisher>
+ <b:author>Chen, Yao-nan and Lin, Hsuan-tien</b:author>
+ <b:editor>Pereira, F. and Burges, C. J. C. and Bottou, L. and Weinberger, K. Q.</b:editor>
+ <b:year>2012</b:year>
+ <b:pages>1529--1537</b:pages>
+ </b:incollection>
+ <b:inproceedings id="luo_adaptive_2017">
+ <b:title>Adaptive Semi-Supervised Learning with Discriminative Least Squares Regression</b:title>
+ <b:isbn>978-0-9992411-0-3</b:isbn>
+ <b:url>https://www.ijcai.org/proceedings/2017/337</b:url>
+ <b:doi>10.24963/ijcai.2017/337</b:doi>
+ <b:language>en</b:language>
+ <b:urldate>2017-10-10</b:urldate>
+ <b:publisher>International Joint Conferences on Artificial Intelligence Organization</b:publisher>
+ <b:author>Luo, Minnan and Zhang, Lingling and Nie, Feiping and Chang, Xiaojun and Qian, Buyue and Zheng, Qinghua</b:author>
+ <b:month>aug</b:month>
+ <b:year>2017</b:year>
+ <b:pages>2421--2427</b:pages>
+ </b:inproceedings>
+ <b:article id="agd">
+ <b:author>Nesterov, Yu</b:author>
+ <b:year>2007</b:year>
+ <b:month>01</b:month>
+ <b:pages></b:pages>
+ <b:title>
+ Gradient methods for minimizing composite functions
+ </b:title>
+ <b:volume>140</b:volume>
+ <b:journal>
+ Université catholique de Louvain, Center for Operations
+ Research and Econometrics (CORE), CORE Discussion Papers
+ </b:journal>
+ <b:doi>10.1007/s10107-012-0629-</b:doi>
+ </b:article>
+ <b:article id="randomsearch">
+ <b:author>James Bergstra and Yoshua Bengio</b:author>
+ <b:title>Random Search for Hyper-Parameter Optimization</b:title>
+ <b:journal>Journal of Machine Learning Research</b:journal>
+ <b:year>2012</b:year>
+ <b:volume>13</b:volume>
+ <b:number>10</b:number>
+ <b:pages>281-305</b:pages>
+ <b:url>http://jmlr.org/papers/v13/bergstra12a.html</b:url>
+ </b:article>
+ <b:article id="demsar_statistical_2006">
+ <b:title>Statistical Comparisons of Classifiers over Multiple Data Sets</b:title>
+ <b:volume>7</b:volume>
+ <b:issn>1532-4435</b:issn>
+ <b:url>http://dl.acm.org/citation.cfm?id=1248547.1248548</b:url>
+ <b:journal>Journal of machine learning research</b:journal>
+ <b:author>Demšar, Janez</b:author>
+ <b:month>dec</b:month>
+ <b:year>2006</b:year>
+ <b:pages>1--30</b:pages>
+ </b:article>
+ <b:inproceedings id="robust">
+ <b:author>Chen, Jianhui and Zhou, Jiayu and Ye, Jieping</b:author>
+ <b:year>2011</b:year>
+ <b:month>08</b:month>
+ <b:pages>42--50</b:pages>
+ <b:title>
+ Integrating low-rank and group-sparse structures for robust
+ multi-task learning
+ </b:title>
+ <b:doi>10.1145/2020408.2020423</b:doi>
+ <b:booktitle>
+ Proceedings of the 17th ACM SIGKDD International Conference
+ on Knowledge Discovery and Data Mining
+ </b:booktitle>
+ </b:inproceedings>
+ <b:article id="sfus">
+ <b:title>
+ Web image annotation via subspace-sparsity collaborated
+ feature selection
+ </b:title>
+ <b:author>
+ Ma, Zhigang
+ and Nie, Feiping
+ and Yang, Yi
+ and Uijlings, Jasper RR
+ and Sebe, Nicu
+ </b:author>
+ <b:journal>IEEE Transactions on Multimedia</b:journal>
+ <b:volume>14</b:volume>
+ <b:number>4</b:number>
+ <b:pages>1021--1030</b:pages>
+ <b:year>2012</b:year>
+ <b:publisher>IEEE</b:publisher>
+ </b:article>
+ <b:incollection id="rfs">
+ <b:title>
+ Efficient and Robust Feature Selection via
+ Joint <h:eq>\ell_{2,1}</h:eq>-Norms Minimization
+ </b:title>
+ <b:url>http://papers.nips.cc/paper/3988-efficient-and-robust-feature-selection-via-joint-l21-norms-minimization.pdf</b:url>
+ <b:booktitle>
+ Advances in Neural Information Processing Systems 23
+ </b:booktitle>
+ <b:publisher>Curran Associates, Inc.</b:publisher>
+ <b:author>
+ Nie, Feiping
+ and Huang, Heng
+ and Cai, Xiao
+ and Ding, Chris H.
+ </b:author>
+ <b:editor>
+ Lafferty, J. D.
+ and Williams, C. K. I.
+ and Shawe-Taylor, J.
+ and Zemel, R. S.
+ and Culotta, A.
+ </b:editor>
+ <b:year>{2010}</b:year>
+ <b:pages>{1813--1821}</b:pages>
+ </b:incollection>
+ <b:article id="lanczos">
+ <b:author>Lanczos, Cornelius</b:author>
+ <b:year>1950</b:year>
+ <b:month>10</b:month>
+ <b:pages></b:pages>
+ <b:title>
+ An Iteration Method for the solution of the Eigenvalue
+ Problem of Linear Differential and Integral Operators
+ </b:title>
+ <b:volume>45</b:volume>
+ <b:journal>
+ Journal of Research of the National Bureau of Standards
+ </b:journal>
+ <b:doi>10.6028/jres.045.026</b:doi>
+ </b:article>
+ <b:article id="Breiman1996">
+ <b:author>Breiman, Leo</b:author>
+ <b:title>Bagging Predictors</b:title>
+ <b:journal>Machine Learning</b:journal>
+ <b:year>1996</b:year>
+ <b:month>Aug</b:month>
+ <!-- <b:day>01</b:day> -->
+ <b:volume>24</b:volume>
+ <b:number>2</b:number>
+ <b:pages>123-140</b:pages>
+ <b:abstract>
+ Bagging predictors is a method for generating multiple
+ versions of a predictor and using these to get an aggregated
+ predictor. The aggregation averages over the versions when
+ predicting a numerical outcome and does a plurality vote
+ when predicting a class. The multiple versions are formed by
+ making bootstrap replicates of the learning set and using
+ these as new learning sets. Tests on real and simulated data
+ sets using classification and regression trees and subset
+ selection in linear regression show that bagging can give
+ substantial gains in accuracy. The vital element is the
+ instability of the prediction method. If perturbing the
+ learning set can cause significant changes in the predictor
+ constructed, then bagging can improve accuracy.
+ </b:abstract>
+ <b:issn>1573-0565</b:issn>
+ <b:doi>10.1023/A:1018054314350</b:doi>
+ <b:url>https://doi.org/10.1023/A:1018054314350</b:url>
+ </b:article>
+ <b:article id="stacking">
+ <b:author>Wolpert, David</b:author>
+ <b:year>1992</b:year>
+ <b:month>12</b:month>
+ <b:pages>241-259</b:pages>
+ <b:title>Stacked Generalization</b:title>
+ <b:volume>5</b:volume>
+ <b:journal>Neural Networks</b:journal>
+ <b:doi>10.1016/S0893-6080(05)80023-1</b:doi>
+ </b:article>
+ <b:article id="alexnet">
+ <b:title>Imagenet classification with deep convolutional neural networks</b:title>
+ <b:author>Krizhevsky, Alex and Sutskever, Ilya and Hinton, Geoffrey E</b:author>
+ <b:journal>Communications of the ACM</b:journal>
+ <b:volume>60</b:volume>
+ <b:number>6</b:number>
+ <b:pages>84--90</b:pages>
+ <b:year>2017</b:year>
+ <b:publisher>ACM New York, NY, USA</b:publisher>
+ </b:article>
+ </h:bibliography>
+ </body>
+</html>
diff --git a/manuscrit.xsl b/manuscrit.xsl
new file mode 100644
index 0000000..15d10fa
--- /dev/null
+++ b/manuscrit.xsl
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:html="http://www.w3.org/1999/xhtml"
+ xmlns:m="http://planete-kraus.eu/ns/manuscrit">
+
+ <xsl:import href="http://h4sp.planete-kraus.eu/transform/latex.xsl" />
+
+ <xsl:output method="text" indent="no"/>
+ <xsl:strip-space elements="*" />
+
+ <xsl:template match="/">
+ <xsl:variable name="auteur">
+ <xsl:variable name="espacé">
+ <xsl:apply-templates select="/html:html/html:head/m:author" />
+ </xsl:variable>
+ <xsl:value-of select="normalize-space($espacé)" />
+ </xsl:variable>
+ <xsl:variable name="titre">
+ <xsl:variable name="espacé">
+ <xsl:apply-templates select="/html:html/html:head/html:title" />
+ </xsl:variable>
+ <xsl:value-of select="normalize-space($espacé)" />
+ </xsl:variable>
+ <xsl:text>\documentclass[11pt,a4paper,twoside,openright]{book}&#xA;</xsl:text>
+ <xsl:text>\usepackage[utf8]{inputenc}&#xA;</xsl:text>
+ <xsl:text>\usepackage[T1]{fontenc}&#xA;</xsl:text>
+ <xsl:text>\usepackage[french]{babel}&#xA;</xsl:text>
+ <xsl:text>\usepackage{graphicx}&#xA;</xsl:text>
+ <xsl:text>\usepackage{grffile}&#xA;</xsl:text>
+ <xsl:text>\usepackage{longtable}&#xA;</xsl:text>
+ <xsl:text>\usepackage{wrapfig}&#xA;</xsl:text>
+ <xsl:text>\usepackage{rotating}&#xA;</xsl:text>
+ <xsl:text>\usepackage[normalem]{ulem}&#xA;</xsl:text>
+ <xsl:text>\usepackage{amsmath}&#xA;</xsl:text>
+ <xsl:text>\usepackage{textcomp}&#xA;</xsl:text>
+ <xsl:text>\usepackage{amssymb}&#xA;</xsl:text>
+ <xsl:text>\usepackage{capt-of}&#xA;</xsl:text>
+ <xsl:text>\usepackage{hyperref}&#xA;</xsl:text>
+ <xsl:text>\usepackage{optidef}&#xA;</xsl:text>
+ <xsl:text>\usepackage{tikz}&#xA;</xsl:text>
+ <xsl:text>\usepackage{subcaption}&#xA;</xsl:text>
+ <xsl:text>\usepackage{geometry}&#xA;</xsl:text>
+ <xsl:text>\usepackage{import}&#xA;</xsl:text>
+ <xsl:text>\usepackage{caption}&#xA;</xsl:text>
+ <xsl:text>\usepackage{algorithm}&#xA;</xsl:text>
+ <xsl:text>\usepackage{algorithmicx}&#xA;</xsl:text>
+ <xsl:text>\usepackage{algpseudocode}&#xA;</xsl:text>
+ <xsl:text>\usepackage{pdfpages}&#xA;</xsl:text>
+ <xsl:text>\usepackage{svg}&#xA;</xsl:text>
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:text>\author{</xsl:text><xsl:value-of select="$auteur" /><xsl:text>}&#xA;</xsl:text>
+ <xsl:text>\title{</xsl:text><xsl:value-of select="$titre" /><xsl:text>}&#xA;</xsl:text>
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:text>\begin{document}&#xA;</xsl:text>
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:text>\makeatletter&#xA;</xsl:text>
+ <xsl:text>\@ifundefined{srcdir}{}{&#xA;</xsl:text>
+ <xsl:text> \graphicspath{{\srcdir}}&#xA;</xsl:text>
+ <xsl:text> \newcommand{\insrcdir}[1]{\srcdir#1}&#xA;</xsl:text>
+ <xsl:text> \let\oldpgfimage\pgfimage&#xA;</xsl:text>
+ <xsl:text> \renewcommand{\pgfimage}[2][]{\oldpfgfimage[#1]{\insrcdir{images/#2}}}&#xA;</xsl:text>
+ <xsl:text>}&#xA;</xsl:text>
+ <xsl:text>\makeatother&#xA;</xsl:text>
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:text>\let\mylistof\listof&#xA;</xsl:text>
+ <xsl:text>\renewcommand\listof[2]{\mylistof{algorithm}{Liste des algorithmes}}&#xA;</xsl:text>
+ <xsl:text>\makeatletter&#xA;</xsl:text>
+ <xsl:text>\providecommand*{\toclevel@algorithm}{0}&#xA;</xsl:text>
+ <xsl:text>\makeatother&#xA;</xsl:text>
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:text>\includepdf{page-de-garde.pdf}&#xA;</xsl:text>
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:apply-templates />
+ <xsl:text>\end{document}&#xA;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="m:résumé">
+ <xsl:text>\section*{Résumé}&#xA;</xsl:text>
+ <xsl:apply-templates />
+ </xsl:template>
+
+ <xsl:template match="m:mots-clés">
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:text>\vspace{1cm}&#xA;</xsl:text>
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:text>\textbf{Mots-clés}~: &#xA;</xsl:text>
+ <xsl:apply-templates />
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:text>\clearpage&#xA;</xsl:text>
+ <xsl:text>&#xA;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="m:mot-clé[position() = last()]">
+ <xsl:apply-templates /><xsl:text>.&#xA;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="m:mot-clé">
+ <xsl:apply-templates /><xsl:text>, </xsl:text>
+ </xsl:template>
+
+ <xsl:template match="m:abstract">
+ <xsl:text>\section*{Abstract}&#xA;</xsl:text>
+ <xsl:apply-templates />
+ </xsl:template>
+
+ <xsl:template match="m:keywords">
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:text>\vspace{1cm}&#xA;</xsl:text>
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:text>\textbf{Keywords}~: &#xA;</xsl:text>
+ <xsl:apply-templates />
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:text>\cleardoublepage&#xA;</xsl:text>
+ <xsl:text>&#xA;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="m:keyword[position() = last()]">
+ <xsl:apply-templates /><xsl:text>.&#xA;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="m:keyword">
+ <xsl:apply-templates /><xsl:text>, </xsl:text>
+ </xsl:template>
+
+ <xsl:template match="html:head">
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/page-de-garde.xsl b/page-de-garde.xsl
new file mode 100644
index 0000000..f0c20fd
--- /dev/null
+++ b/page-de-garde.xsl
@@ -0,0 +1,168 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:html="http://www.w3.org/1999/xhtml"
+ xmlns:m="http://planete-kraus.eu/ns/manuscrit">
+
+ <xsl:import href="http://h4sp.planete-kraus.eu/transform/latex.xsl" />
+
+ <xsl:output method="text"/>
+
+ <xsl:template match="/">
+ <xsl:variable name="numéro-ordre-nnt">
+ <xsl:variable name="espacé">
+ <xsl:apply-templates select="/html:html/html:head/m:page-de-garde/m:numéro-ordre-nnt" />
+ </xsl:variable>
+ <xsl:value-of select="normalize-space($espacé)" />
+ </xsl:variable>
+ <xsl:variable name="page-de-garde-titre">
+ <xsl:variable name="espacé">
+ <xsl:apply-templates select="/html:html/html:head/m:page-de-garde/m:page-de-garde-titre" />
+ </xsl:variable>
+ <xsl:value-of select="normalize-space($espacé)" />
+ </xsl:variable>
+ <xsl:variable name="l-université">
+ <xsl:variable name="espacé">
+ <xsl:apply-templates select="/html:html/html:head/m:page-de-garde/m:l-université" />
+ </xsl:variable>
+ <xsl:value-of select="normalize-space($espacé)" />
+ </xsl:variable>
+ <xsl:variable name="école-doctorale">
+ <xsl:variable name="espacé">
+ <xsl:apply-templates select="/html:html/html:head/m:page-de-garde/m:école-doctorale" />
+ </xsl:variable>
+ <xsl:value-of select="normalize-space($espacé)" />
+ </xsl:variable>
+ <xsl:variable name="spécialité">
+ <xsl:variable name="espacé">
+ <xsl:apply-templates select="/html:html/html:head/m:page-de-garde/m:spécialité" />
+ </xsl:variable>
+ <xsl:value-of select="normalize-space($espacé)" />
+ </xsl:variable>
+ <xsl:variable name="date-soutenance">
+ <xsl:variable name="espacé">
+ <xsl:apply-templates select="/html:html/html:head/m:page-de-garde/m:date-soutenance" />
+ </xsl:variable>
+ <xsl:value-of select="normalize-space($espacé)" />
+ </xsl:variable>
+ <xsl:variable name="auteur">
+ <xsl:variable name="espacé">
+ <xsl:apply-templates select="/html:html/html:head/m:author" />
+ </xsl:variable>
+ <xsl:value-of select="normalize-space($espacé)" />
+ </xsl:variable>
+ <xsl:variable name="titre">
+ <xsl:variable name="espacé">
+ <xsl:apply-templates select="/html:html/html:head/html:title" />
+ </xsl:variable>
+ <xsl:value-of select="normalize-space($espacé)" />
+ </xsl:variable>
+ <xsl:text>\documentclass[11pt,a4paper]{book}&#xA;</xsl:text>
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:text>\usepackage[utf8]{inputenc}&#xA;</xsl:text>
+ <xsl:text>\usepackage[T1]{fontenc}&#xA;</xsl:text>
+ <xsl:text>\usepackage{graphicx}&#xA;</xsl:text>
+ <xsl:text>\usepackage[french]{babel}&#xA;</xsl:text>
+ <xsl:text>\usepackage[inner=2.5cm, outer=2.5cm, top=2.5cm, bottom=2.5cm]{geometry}&#xA;</xsl:text>
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:text>\makeatletter&#xA;</xsl:text>
+ <xsl:text>\@ifundefined{srcdir}{}{&#xA;</xsl:text>
+ <xsl:text> \graphicspath{{\srcdir}}&#xA;</xsl:text>
+ <xsl:text>}&#xA;</xsl:text>
+ <xsl:text>\makeatother&#xA;</xsl:text>
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:text>\begin{document}&#xA;</xsl:text>
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:text>\setlength{\parindent}{0pt}&#xA;</xsl:text>
+ <xsl:text>\thispagestyle{empty}&#xA;</xsl:text>
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:text>\begin{center}&#xA;</xsl:text>
+ <xsl:text>\includegraphics[height=3cm]{images/the-logo.png}&#xA;</xsl:text>
+ <xsl:text>\end{center}&#xA;</xsl:text>
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:text>\fontsize{11pt}{13pt}\selectfont&#xA;</xsl:text>
+ <xsl:text>N\textsuperscript{o} d’ordre NNT~: </xsl:text><xsl:value-of select="$numéro-ordre-nnt" /><xsl:text>&#xA;</xsl:text>
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:text>\vspace{1cm}&#xA;</xsl:text>
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:text>\begin{center}&#xA;</xsl:text>
+ <xsl:text>\fontsize{14pt}{16pt}\selectfont&#xA;</xsl:text>
+ <xsl:text>\textbf{\uppercase{</xsl:text><xsl:value-of select="$page-de-garde-titre" /><xsl:text>}}\\&#xA;</xsl:text>
+ <xsl:text>\fontsize{12pt}{14pt}\selectfont&#xA;</xsl:text>
+ <xsl:text>opérée au sein de\\&#xA;</xsl:text>
+ <xsl:text>\textbf{</xsl:text><xsl:value-of select="$l-université" /><xsl:text>}&#xA;</xsl:text>
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:text>\vspace{0.5cm}&#xA;</xsl:text>
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:text>\textbf{</xsl:text><xsl:value-of select="$école-doctorale" /><xsl:text>}&#xA;</xsl:text>
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:text>\vspace{0.5cm}&#xA;</xsl:text>
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:text>\textbf{Spécialité de doctorat~: </xsl:text><xsl:value-of select="$spécialité" /><xsl:text>}&#xA;</xsl:text>
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:text>\vspace{1.5cm}&#xA;</xsl:text>
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:text>Soutenue publiquement le </xsl:text><xsl:value-of select="$date-soutenance" /><xsl:text>, par~:\\&#xA;</xsl:text>
+ <xsl:text>\fontsize{14pt}{16pt}\selectfont&#xA;</xsl:text>
+ <xsl:text>\textbf{</xsl:text><xsl:value-of select="$auteur" /><xsl:text>}&#xA;</xsl:text>
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:text>\vspace{1.5cm}&#xA;</xsl:text> <!-- Adapter à la longueur du titre -->
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:text>\rule[20pt]{\textwidth}{0.5pt}&#xA;</xsl:text>
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:text>\fontsize{25pt}{22pt}\selectfont&#xA;</xsl:text>
+ <xsl:text>\textbf{</xsl:text><xsl:value-of select="$titre" /><xsl:text>}&#xA;</xsl:text>
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:text>\rule{\textwidth}{0.5pt}&#xA;</xsl:text>
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:text>\vspace{2cm}&#xA;</xsl:text> <!-- Adapter à la longueur du titre -->
+ <xsl:text>\end{center}&#xA;</xsl:text> <!-- Adapter à la longueur du titre -->
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:text>\fontsize{12pt}{14pt}\selectfont&#xA;</xsl:text>
+ <xsl:text>Devant le jury composé de~:&#xA;</xsl:text>
+ <xsl:text>\bigskip&#xA;</xsl:text>
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:text>\fontsize{11pt}{13pt}\selectfont&#xA;</xsl:text>
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:apply-templates select="/html:html/html:head/m:page-de-garde/m:jury" />
+ <xsl:text>&#xA;</xsl:text>
+ <xsl:text>\end{document}&#xA;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="m:jury">
+ <xsl:text>\begin{itemize}&#xA;</xsl:text>
+ <xsl:apply-templates />
+ <xsl:text>\end{itemize}&#xA;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="m:membre">
+ <xsl:variable name="name">
+ <xsl:apply-templates />
+ </xsl:variable>
+ <xsl:variable name="grade">
+ <xsl:call-template name="escape-latex">
+ <xsl:with-param name="str" select="@grade" />
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="affiliation">
+ <xsl:call-template name="escape-latex">
+ <xsl:with-param name="str" select="@affiliation" />
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="rôle">
+ <xsl:call-template name="escape-latex">
+ <xsl:with-param name="str" select="@rôle" />
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:text>\item </xsl:text>
+ <xsl:value-of select="normalize-space($name)" />
+ <xsl:text>, </xsl:text>
+ <xsl:value-of select="$grade" />
+ <xsl:text>, </xsl:text>
+ <xsl:value-of select="$affiliation" />
+ <xsl:text>, </xsl:text>
+ <xsl:value-of select="$rôle" />
+ <xsl:text>&#xA;</xsl:text>
+ </xsl:template>
+</xsl:stylesheet>