Modélisation SVM : Problème Clinique et Pseudo-Code

Telechargé par wajdizanteni2003
Modélisation Algébrique et Algorithmique des SVM :
Du Problème Clinique au Pseudo-Code
Fondements et Implémentation du Primal et du Dual
4 juin 2026
1 Le Problème Clinique Fil Rouge de Référence
Pour comprendre la transition entre les équations et les algorithmes, nous définissons un
micro-dataset clinique de N= 2 patients décrit par d= 2 biomarqueurs :
Patient 1 (x1) : Biomarqueurs x1=2
1, Étiquette y1= +1 (Patient Répondeur)
Patient 2 (x2) : Biomarqueurs x2=1
2, Étiquette y2=1(Patient Non-Répondeur)
On fixe la constante de pénalité à C= 10.0et le taux d’apprentissage à η= 0.1.
2 Modèle Primal : Descente de Sous-Gradient
2.1 Formulation de l’Objectif et Algèbre du Sous-Gradient
Le problème primal en marge souple cherche à minimiser la fonction de coût combinant la
régularisation de Tikhonov et la perte charnière (Hinge Loss) :
J(θ, b) = 1
2θ2+C
N
X
i=1
max 0,1yi(θTxi+b)(1)
Pour un patient i, on définit sa marge fonctionnelle par γi=yi(θTxi+b). La fonction de perte
n’étant pas dérivable en γi= 1, on utilise le calcul des sous-gradients par rapport au vecteur de
poids θRdet au biais bR:
Si γi1 =⇒ ∇θJi=θ, bJi= 0 (2)
Si γi<1 =⇒ ∇θJi=θCyixi,bJi=Cyi(3)
2.2 Résolution Algébrique Manuelle (Itération 1)
On initialise θ=0
0et b= 0.
1. Évaluation du Patient 1 :
γ1= 1 ·0 02
1+ 0= 0
Puisque γ1<1, la contrainte est violée. On calcule les sous-gradients et on met à jour les
paramètres :
θJ1=0
010 ·(1) ·2
1=20
10,bJ1=10 ·(1) = 10
θθηθJ1=2
1, b bηbJ1= 1
1
2. Éévaluation du Patient 2 (avec les nouveaux paramètres) :
γ2=1·2 11
2+ 1=1·(2 + 2 + 1) = 5
Puisque γ2<1, le second point viole également la marge :
θJ2=2
110 ·(1) ·1
2=12
21,bJ2=10 ·(1) = 10
θ2
10.112
21=0.8
1.1, b 10.1(10) = 0
2.3 Pseudo-Code Algébrique du SVM Primal
Le pseudo-code suivant traduit cette dynamique algébrique pour l’implémentation :
Entrées : X (N x d), y (N x 1), C, lr, n_iters
Initialisation : theta = vecteur_zero(d, 1), b = 0.0
Pour epoch allant de 1 à n_iters :
Pour chaque indice i de 0 à N-1 :
score_marge = y[i] * (produit_scalaire(X[i], theta) + b)
Si score_marge >= 1.0 :
theta = theta - lr * theta
Sinon :
theta = theta - lr * (theta - C * y[i] * X[i])
b = b - lr * (-C * y[i])
Retourner theta, b
3 Modèle Dual : Algorithme d’Uzawa / Gradient Projeté
3.1 Construction Algébrique des Matrices Spatiales
Dans le dual, nous n’utilisons plus θ. Le paysage géométrique est entièrement encodé par les
relations inter-patients via le noyau (ici linéaire K(xi, xj)=xT
ixj).
1. Matrice de Gram K(taille 2×2) :
K=xT
1x1xT
1x2
xT
2x1xT
2x2=2(2) + 1(1) 2(1) + 1(2)
1(2) + 2(1) 1(1) + 2(2)=5 4
4 5
2. Matrice Sandwich de Wolfe Q:
Q= (yyT)K=(+1)(+1) ·5 (+1)(1) ·4
(1)(+1) ·4 (1)(1) ·5=54
4 5
3.2 Mécanique d’Uzawa (Itération 1)
On initialise le vecteur d’influence α=0
0, le multiplicateur d’égalité λ= 0 et le multipli-
cateur de borne µ=0
0. Le gradient de l’objectif dual par rapport à αs’écrit :
αL=1+λy µ=54
4 5 0
01
1+00
0=1
1
2
On effectue le pas de descente de gradient suivi de la projection sur la boîte [0, C]:
αclip(αηαL,0, C) = clip 0
00.11
1,0,10=0.1
0.1
Mise à jour de la contrainte d’égalité Pαiyi= 0 via son résidu :
résidu = 0.1(1) + 0.1(1) = 0 =λλ+η(0) = 0
3.3 Pseudo-Code Algébrique du SVM Dual
Ce pseudo-code montre comment l’algorithme d’Uzawa gère l’optimisation sous-jacente :
Entrées : X (N x d), y (N x 1), C, lr, n_iters, kernel_function
Initialisation :
K = calculer_matrice_de_gram(X, kernel_function) # Taille N x N
Q = (y @ y.T) * K # Produit element par element
alpha = vecteur_zero(N, 1)
lambda_eq = 0.0
mu_ineq = vecteur_zero(N, 1)
ones = vecteur_un(N, 1)
Pour itération allant de 1 à n_iters :
grad_alpha = (Q @ alpha) - ones + (lambda_eq * y) - mu_ineq
alpha = alpha - lr * grad_alpha
alpha = clip(alpha, 0.0, C)
residu_egalite = somme_elements(alpha * y)
lambda_eq = lambda_eq + lr * residu_egalite
mu_ineq = max(0.0, mu_ineq + lr * (-alpha))
# Extraction finale du biais dans l’espace Map
Masque_SV = (alpha > 1e-5) & (alpha < C - 1e-5)
K_partiel = K[Tous_les_points, Masque_SV]
f_brut_sv = K_partiel.T @ (alpha * y)
b = moyenne(y[Masque_SV] - f_brut_sv)
Retourner alpha, b
3
1 / 3 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!