Section courante

A propos

Section administrative du site

 Langage  Elément  Tutoriel  Annexe 
ABAP/4
Ada
Assembleur
Assembly & bytecode
ASP (Active Server Pages)
Basic
C
C++
C# (C Sharp)
Cobol
ColdFusion
Fortran
HTML
Java
JavaScript
LISP
Logo
LotusScript
Oberon
Pascal
Perl
PHP
PL/1
Prolog
Python
Rebol
REXX
Ruby
Rust
SAS
NoSQL
SQL
Swift
X++ (Axapta)
GNAT
SMALLAda
VHDL
Assembleur 370
Assembleur 1802
Assembleur 4004
Assembleur 6502
Assembleur 6800
Assembleur 68000
Assembleur 8080 et 8085
Assembleur 8089
Assembleur 80x86
Assembleur AGC4
Assembleur ARM
Assembleur DPS 8000
Assembleur i860
Assembleur Itanium
Assembleur MIPS
Assembleur PDP-11
Assembleur PowerPC
Assembleur RISC-V
Assembleur SPARC
Assembleur SuperH
Assembleur UNIVAC I
Assembleur VAX
Assembleur Z80
Assembleur Z8000
Assembleur z/Architecture
ASSEMBLER/MONITOR 64
Micol Assembler
GFA Assembler
A86
MASM (Macro Assembler)
TASM (Turbo Assembler)
CIL
Jasmin
LLVM
MSIL
Parrot
P-Code (PCode)
SWEET16
G-Pascal
ASP 1.0
ASP 2.0
ASP 3.0
ASP.NET
ASP.NET Core
ABasiC (Amiga)
Adam SmartBASIC
Altair BASIC
AmigaBASIC (Amiga)
AMOS Basic (Amiga)
Atari Basic (Atari 400, 600 XL, 800, 800XL)
Basic Apple II (Integer BASIC/APPLESOFT)
Basic Commodore 64 (CBM-BASIC)
Basic Commodore 128 (BASIC 7.0)
Basic Commodore VIC-20 (CBM-BASIC 2.0)
Basic Coco 1 (Color Basic)
Basic Coco 2 (Extended Color Basic)
Basic Coco 3 (Extended Color Basic 2.0)
BASICA (PC DOS)
Basic Pro
BBC BASIC
Blitz BASIC (Amiga)
DarkBASIC
Dartmouth BASIC
GFA-Basic (Atari ST/Amiga)
GWBASIC (MS-DOS)
Liberty BASIC
Locomotive BASIC (Amstrad CPC)
MSX-Basic
Omikron Basic (Atari ST)
Oric Extended Basic
Power Basic
Quick Basic/QBasic (MS-DOS)
Sinclair BASIC (ZX80, ZX81, ZX Spectrum)
ST BASIC (Atari ST)
Turbo Basic
Vintage BASIC
VBScript
Visual Basic (VB)
Visual Basic .NET (VB .NET)
Visual Basic pour DOS
Yabasic
BeckerBASIC
SIMONS' BASIC
Basic09 d'OS-9
Disk Extended Color Basic
Basic09 d'OS-9
Disk Extended Color Basic
Access
Excel
Visual Basic pour Windows
Visual Basic .NET pour Windows
C Shell Unix (csh)
C pour Amiga
C pour Atari ST
C pour DOS
C pour Falcon030
C pour GEMDOS (Atari ST)
C pour Linux
C pour PowerTV OS
C pour OS/2
C pour Unix
C pour Windows
Aztec C
CoCo-C
GNU C
HiSoft C
IBM C/2
Introl-C
Lattice C
Microsoft C
MinGW C
MSX-C
Open Watcom C
OS-9 C Compiler
Pure C
Quick C
Turbo C
HiSoft C for Atari ST
HiSoft C for CP/M (Amstrad CPC)
C++ pour OS/2
C++ pour Windows
Borland C++
C++Builder
IBM VisualAge C++
Intel C++
MinGW C++
Open Watcom C++
Symantec C++
Turbo C++
Visual C++
Visual C++ .NET
Watcom C++
Zortech C++
C# (C Sharp) pour Windows
Apple III Cobol
Microsoft Cobol
BlueDragon
Lucee
OpenBD
Railo
Smith Project
Microsoft Fortran
WATFOR-77
CSS
FBML
Open Graph
SVG
XML
XSL/XSLT
LESS
SASS
GCJ (GNU)
JSP
Jython
Visual J++
Node.js
TypeScript
AutoLISP
ACSLogo
LotusScript pour Windows
Amiga Oberon
Oberon .NET
Apple Pascal
Delphi/Kylix/Lazarus
Free Pascal
GNU Pascal
HighSpeed Pascal
IBM Personal Computer Pascal
Lisa Pascal
Maxon Pascal
MPW Pascal
OS-9 Pascal
OSS Personal Pascal
Pascal-86
Pascal du Cray Research
Pascal/VS
Pascal-XT
PURE Pascal
QuickPascal
RemObjets Chrome
Sun Pascal
THINK Pascal
Tiny Pascal (TRS-80)
Turbo Pascal
UCSD Pascal
VAX Pascal
Virtual Pascal
Turbo Pascal for CP/M-80
Turbo Pascal for DOS
Turbo Pascal for Macintosh
Turbo Pascal for Windows
CodeIgniter (Cadre d'application)
Drupal (Projet)
Joomla! (Projet)
Phalanger (PHP .NET)
phpBB (Projet)
Smarty (balise)
Twig (balise)
Symfony (Cadre d'application)
WordPress (Projet)
Zend (Cadre d'application)
PL360
PL/M-80
PL/M-86
Turbo Prolog
CPython
IronPython
Jython
PyPy
AREXX
Regina REXX
JMP
Btrieve
Cassandra
Clipper
CouchDB
dBASE
Hbase
Hypertable
MongoDB
Redis
Access
BigQuery
DB2
H2
Interbase
MySQL
Oracle
PostgreSQL
SAP HANA
SQL Server
Sybase
U-SQL
Introduction
Référence des classes et des fonctions
Les premiers pas
Apprentissage statistique : le cadre et l'objet estimateur dans scikit-learn
Travailler avec des données textuelles
Norme
Standard
Loi

Les premiers pas

En général, un problème d'apprentissage prend en compte un ensemble de n échantillons de données et tente ensuite de prédire les propriétés de données inconnues. Si chaque échantillon est constitué de plusieurs nombres et, par exemple, d'une entrée multidimensionnelle (c'est-à-dire de données multivariées), on dit qu'il possède plusieurs attributs ou caractéristiques.

Vous pouvez séparer les problèmes d'apprentissage en quelques grandes catégories :

Ensemble d'entraînement et ensemble de test

L'apprentissage automatique consiste à apprendre certaines propriétés d'un ensemble de données et à les appliquer à de nouvelles données. C'est pourquoi une pratique courante dans l'apprentissage automatique pour évaluer un algorithme consiste à diviser les données disponibles en deux ensembles, l'un que nous appelons l'ensemble d'entraînement sur lequel nous apprenons les propriétés des données et l'autre que nous appelons l'ensemble de test sur lequel nous testons ces propriétés.

Chargement d'un exemple d'ensemble de données

scikit-learn est fourni avec quelques ensembles de données standard, par exemple les ensembles de données iris et digits pour la classification et l'ensemble de données prix des maisons à Boston pour la régression.

Dans ce qui suit, nous démarrons un interpréteur Python à partir de l'interpréteur de commande, puis chargeons les ensembles de données iris et digits. Notre convention de notation est que $ désigne le prompt de l'interpréteur de commande tandis que >>> désigne le prompt de l'interpréteur Python :

$ python
>>> from sklearn import datasets
>>> iris = datasets.load_iris()
>>> digits = datasets.load_digits()

Un ensemble de données est un objet de type dictionnaire contenant toutes les données et certaines métadonnées sur les données. Ces données sont entreposées dans le membre .data, étant un tableau n_samples, n_features. Dans le cas d'un problème supervisé, une ou plusieurs variables de réponse sont entreposées dans le membre .target.

Par exemple, dans le cas de l'ensemble de données digits, digits.data donne accès aux fonctionnalités pouvant être utilisées pour classer les échantillons digits :

>>> print(digits.data)
[[  0.   0.   5. ...,   0.   0.   0.]
 [  0.   0.   0. ...,  10.   0.   0.]
 [  0.   0.   0. ...,  16.   9.   0.]
 ...,
 [  0.   0.   1. ...,   6.   0.   0.]
 [  0.   0.   2. ...,  12.   0.   0.]
 [  0.   0.  10. ...,  12.   1.   0.]]

et digits.target donne la vérité fondamentale pour l'ensemble de données de chiffres, c'est-à-dire le nombre correspondant à chaque image de chiffre que nous essayons d'apprendre :

>>> digits.target
array([0, 1, 2, ..., 8, 9, 8])

Forme des tableaux de données

Les données sont toujours un tableau en 2 dimensions de forme (n_samples, n_features), bien que les données d'origine puissent avoir une forme différente. Dans le cas des chiffres, chaque échantillon d'origine est une image de forme (8, 8) et peut être consulté à l'aide de :

>>> digits.images[0]
array([[  0.,   0.,   5.,  13.,   9.,   1.,   0.,   0.],
       [  0.,   0.,  13.,  15.,  10.,  15.,   5.,   0.],
       [  0.,   3.,  15.,   2.,   0.,  11.,   8.,   0.],
       [  0.,   4.,  12.,   0.,   0.,   8.,   8.,   0.],
       [  0.,   5.,   8.,   0.,   0.,   9.,   8.,   0.],
       [  0.,   4.,  11.,   0.,   1.,  12.,   7.,   0.],
       [  0.,   2.,  14.,   5.,  10.,  12.,   0.,   0.],
       [  0.,   0.,   6.,  13.,  10.,   0.,   0.,   0.]])

L'exemple simple de cet ensemble de données illustre comment, à partir du problème initial, on peut façonner les données pour les utiliser dans scikit-learn.

Apprentissage et prédiction

Dans le cas de l'ensemble de données de chiffres, la tâche consiste à prédire, à partir d'une image, quel chiffre elle représente. On nous donne des échantillons de chacune des 10 classes possibles (les chiffres de zéro à neuf) sur lesquels nous ajustons un estimateur pour pouvoir prédire les classes auxquelles appartiennent les échantillons invisibles.

Dans scikit-learn, un estimateur pour la classification est un objet Python implémentant les méthodes fit(X, y) et predict(T).

Un exemple d'estimateur est la classe sklearn.svm.SVC implémentant la classification des vecteurs de support. Le constructeur d'un estimateur prend comme arguments les paramètres du modèle, mais pour le moment, nous considérerons l'estimateur comme une boîte noire :

>>> from sklearn import svm
>>> clf = svm.SVC(gamma=0.001, C=100.)

Choix des paramètres du modèle

Dans cet exemple, nous définissons manuellement la valeur de gamma. Il est possible de trouver automatiquement de bonnes valeurs pour les paramètres en utilisant des outils tels que la recherche de grille et la validation croisée.

Nous appelons notre instance d'estimateur clf, car il s'agit d'un classificateur. Il doit maintenant être ajusté au modèle, c'est-à-dire qu'il doit apprendre du modèle. Cela se fait en passant notre ensemble d'apprentissage à la méthode fit. Comme ensemble d'apprentissage, utilisons toutes les images de notre ensemble de données à l'exception de la dernière. Nous sélectionnons cet ensemble d'apprentissage avec la syntaxe Python [:-1], qui produit un nouveau tableau contenant toutes les entrées de digits.data sauf la dernière :

>>> clf.fit(digits.data[:-1], digits.target[:-1])
SVC(C=100.0, cache_size=200, class_weight=None, coef0=0.0, degree=3,
  gamma=0.001, kernel='rbf', max_iter=-1, probability=False,
  random_state=None, shrinking=True, tol=0.001, verbose=False)

Vous pouvez maintenant prédire de nouvelles valeurs. En particulier, nous pouvons demander au classificateur quel est le chiffre de notre dernière image dans l'ensemble de données de chiffres, que nous n'avons pas utilisé pour entraîner le classificateur :

>>> clf.predict(digits.data[-1])
array([8])

L'image correspondante est la suivante :

Comme vous pouvez le constater, il s'agit d'une tâche difficile : les images sont de mauvaise résolution. Êtes-vous d'accord avec le classificateur ?

Persistance du modèle

Il est possible de sauvegarder un modèle dans scikit en utilisant le modèle de persistance intégré de Python, à savoir pickle :

>>> from sklearn import svm
>>> from sklearn import datasets
>>> clf = svm.SVC()
>>> iris = datasets.load_iris()
>>> X, y = iris.data, iris.target
>>> clf.fit(X, y)
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0,
  kernel='rbf', max_iter=-1, probability=False, random_state=None,
  shrinking=True, tol=0.001, verbose=False)

>>> import pickle
>>> s = pickle.dumps(clf)
>>> clf2 = pickle.loads(s)
>>> clf2.predict(X[0])
array([0])
>>> y[0]
0

Dans le cas spécifique de scikit, il peut être plus intéressant d'utiliser le remplacement de pickle par joblib (joblib.dump et joblib.load), étant plus efficace sur les mégadonnées, mais ne peut pickler que sur le disque et non sur une chaîne de caractères :

>>> from sklearn.externals import joblib
>>> joblib.dump(clf, 'filename.pkl')

Plus tard, vous pouvez recharger le modèle pickle (éventuellement dans un autre processus Python) avec :

>>> clf = joblib.load('filename.pkl')

Remarque

joblib.dump renvoie une liste de noms de fichiers. Chaque tableau numpy individuel contenu dans l'objet clf est sérialisé en tant que fichier séparé sur le système de fichiers. Tous les fichiers doivent être dans le même dossier lors du rechargement du modèle avec joblib.load.

Notez que pickle présente certains problèmes de sécurité et de maintenabilité.



PARTAGER CETTE PAGE SUR
Dernière mise à jour : Mardi, le 5 novembre 2024