De quelques variables aux premières données#
Notre Arduino UNO Q dispose de Python côté Linux. Nous avons déjà présenté l’architecture de la carte dans la rubrique consacrée à l’Arduino UNO Q .
Pour cette première expérience, utilisons simplement Python pour manipuler quelques données.
- Quelques variables
- Des données de température et d’humidité
- Une règle simple pour prendre une décision
Et c’est volontaire.
1. Bonjour UNO Q !#
Avant d’écrire le programme, décrivons simplement l’algorithme :
Pseudo-code
AFFICHER « Bonjour UNO Q ! »
STOCKER 27 dans température
STOCKER 42 dans humidité
AFFICHER température
AFFICHER humidité
Notre premier programme est particulièrement simple :
print("Bonjour UNO Q !")
temperature = 27
humidite = 42
print("Température :", temperature, "°C")
print("Humidité :", humidite, "%")
La machine connaît maintenant deux valeurs :
température = 27 °C
humidité = 42 %
Nous venons simplement de stocker des informations dans des variables et de les afficher.
Pour l’instant, la machine observe ces valeurs.
2. Faire prendre une décision à la machine#
Ajoutons maintenant une règle.
Pseudo-code
SI température est supérieure à 25
ET humidité est inférieure à 50
ALORS
décider « arroser »
SINON
décider « ne pas arroser »
FIN SI
AFFICHER la température
AFFICHER l’humidité
AFFICHER la décision
Demandons maintenant à Python de réaliser cet algorithme :
temperature = 27
humidite = 42
if temperature > 25 and humidite < 50:
decision = "arroser"
else:
decision = "ne pas arroser"
print("Température :", temperature, "°C")
print("Humidité :", humidite, "%")
print("Décision :", decision)
Cette fois, le programme produit une décision.
La règle est simple :
- température > 25
- humidité < 50
- décision : arroser
C’est nous qui avons écrit cette règle. La machine applique donc une règle programmée.
3. Et si nous avions plusieurs observations ?#
Prenons maintenant plusieurs mesures :
observations = [
(22, 70),
(24, 65),
(27, 42),
(29, 35),
(25, 55),
]
Chaque élément contient :
(température, humidité)
POUR CHAQUE observation dans les observations
récupérer température et humidité
SI température est supérieure à 25
ET humidité est inférieure à 50
ALORS
décider « arroser »
SINON
décider « ne pas arroser »
FIN SI
AFFICHER température, humidité et décision
FIN POUR
Parcourons ces observations :
for temperature, humidite in observations:
if temperature > 25 and humidite < 50:
decision = "arroser"
else:
decision = "ne pas arroser"
print(
"Température :", temperature,
"°C | Humidité :", humidite,
"% | Décision :", decision
)
Nous avons maintenant un petit ensemble de données. La règle reste programmée par nous.
4. Et si les données nous aidaient ?#
Donnons maintenant à chaque observation une étiquette indiquant le résultat attendu :
[22, 70]→ non[24, 65]→ non[27, 42]→ oui[29, 35]→ oui[25, 55]→ non
Nous pouvons représenter ce jeu de données ainsi :
donnees = [
([22, 70], "non"),
([24, 65], "non"),
([27, 42], "oui"),
([29, 35], "oui"),
([25, 55], "non"),
]
Pseudo-code
POUR CHAQUE observation dans les données
lire les caractéristiques
lire le résultat attendu
FIN POUR
IDENTIFIER les caractéristiques
IDENTIFIER le résultat attendu
Nous avons maintenant les premiers éléments que l’on retrouvera en Machine Learning :
- données
- observations
- caractéristiques
- résultat attendu
Les deux caractéristiques sont la température et l’humidité. Le résultat attendu est oui ou non.
5. Un premier calcul à partir des données#
Regardons uniquement les températures.
Pour les réponses oui :
- 27
- 29
Pour les réponses non :
- 22
- 24
- 25
Calculons la moyenne de chaque groupe.
Pseudo-code
CRÉER une liste pour les températures « oui »
CRÉER une liste pour les températures « non »
POUR CHAQUE observation dans les données
récupérer température et étiquette
SI l’étiquette vaut « oui »
ALORS
ajouter température à la liste « oui »
SINON
ajouter température à la liste « non »
FIN SI
FIN POUR
CALCULER la moyenne des températures « oui »
CALCULER la moyenne des températures « non »
CALCULER le seuil situé entre les deux moyennes
temperatures_oui = []
temperatures_non = []
for features, label in donnees:
temperature = features[0]
if label == "oui":
temperatures_oui.append(temperature)
else:
temperatures_non.append(temperature)
moyenne_oui = sum(temperatures_oui) / len(temperatures_oui)
moyenne_non = sum(temperatures_non) / len(temperatures_non)
seuil = (moyenne_oui + moyenne_non) / 2
Le programme obtient :
- Températures oui :
[27, 29] - Températures non :
[22, 24, 25] - Moyenne oui :
28.0 - Moyenne non :
23.666... - Seuil : environ
25.83 °C
Pour une nouvelle observation 28 °C, 40 %, le programme compare 28 > 25.83 et prédit oui.
6. Est-ce déjà de l’intelligence artificielle ?#
Nous nous rapprochons du Machine Learning.
Nous avons utilisé les données pour calculer automatiquement un seuil. Le seuil vient donc des exemples plutôt que d’une valeur écrite directement dans la règle.
Le modèle reste toutefois limité : l’humidité ne participe pas encore au calcul du seuil.
Franchissons maintenant une nouvelle étape.
7. Vers des poids appris#
Nous avons suivi cette progression :
- programme
- règle écrite à la main
- données
- seuil calculé
Pourquoi ne pas laisser le modèle déterminer l’importance de chacune de nos mesures ?
Par exemple :
- température → poids ?
- humidité → poids ?
Nous pourrions alors calculer :
score =
température × poids_température
+ humidité × poids_humidité
+ biais
Cette fois, nous voulons que le modèle apprenne les poids à partir des données.
Si nous ne donnons plus directement les poids au programme, comment va-t-il réussir à les trouver ?