Documente Academic
Documente Profesional
Documente Cultură
RAPORT
Proiect ISIA: Masina cu Vectori Suport;
Tema: Autentificare validitate Banconte
Realizat de:
Anghel Alexandru-Dan,
1
CUPRINS
Noțiuni de bază
Raportul Bias-Varianță 3
Validare Încrucișată (Cross-Validation) 6
C6lasificatori cu Margine Maximă 7
Clasificatori cu Vector Suport 8
Mașini cu Vectori Suport 10
Cod Functional 10
Ce problemă rezolvăm 12
Explicarea Codului Funcțional 13
Librării Folosite 13
Împărțirea datelor Train & Test 13
Măsurarea Performanței 14
Variația Parametrilor 14
Concluzii 17
2
I. Noțiuni de bază
Raportul Bias-Varianță
Bias algoritmic:
Introdus prin alegerea algoritmilor, ipotezele acestora și limitările lor inerente.
Algoritmi diferiți pot face ipoteze diferite despre date, iar aceste ipoteze pot afecta
capacitatea modelului de a generaliza.
Bias de eșantionare:
Apare atunci când setul de date de antrenament nu reprezintă cu exactitate distribuția
reală a datelor. Dacă un model de autentificare de bancnote este instruit folosind doar
bancnote românești, acesta ar putea funcționa bine pentru aceste tipuri de bancnote, dar slab
pentru bancnote străine.
Acest lucru se poate întâmpla atunci când procesul de colectare a datelor este
denaturat sau când anumite grupuri sau caracteristici sunt suprareprezentate sau
subreprezentate în setul de date.
Exemplu:
3
Fie urmatorul set de date:
set de antrenare
set de test
4
Calculând suma patratelor, putem compara randamentul celor doi algoritmi atât pentru
setul de antrenare cât și pentru setul de test.
k
SP(g ( x ) )=∑ (f ( x ) −g ( x ) )
2
x=0
OBS: Diferența intre S Ptrain ( ℜ g lin )și S Ptest ( ℜ g lin ) se numește varianță.
5
Varianța
Cross Validation
Prin Validare încrucișată, putem estima modul optim de împărțire a unei baze de
date în setul de antrenament respectiv de test, în proporția dorită. De asemenea, putem
compara diferite metode de Machine Learning (Random Forest, K-means, SVM) și observa
Bias-ul și Varianța lor pe același set de date.
Presupunem un split de 75%-25% între datele de antrenare respectiv test.
Validarea Încrucișată va împărți setul de date în 4 sectoare egale, și va efectua combinări
după următorul model:
Soft Margins
7
Marginile fine au apărut ca o măsură de a reduce Bias-ul și Varianța in seturile de
antrenare respectiv de testare. Acestea constau in acceptarea unui numar mic, in raport cu
setul de date, de misclasificari căt și un numar de observații in interiorul marginii.
8
SVC pentru set de date
bidimensional
Hiperplan unidimensional
Pentru a delimita corect acest set de date, îl vom aduce Într-un spațiu superior.
2
Y =Dosag e
9
Un Clasificator cu Vectori Suport care folosește o funcție pentru a lucra cu o
formă a setului de date într-o dimensiune superioară (numite funcții “Kernel”) se
numește Mașină cu Vectori Suport (Support Vector Machine – SVM).
SVM este capabil să definească hiperplanuri în orice dimensiune.
Deși SVM a fost inițial conceput pentru clasificare liniară, acesta poate fi extins la
probleme de clasificare non-liniară prin utilizarea funcțiilor “kernel”. Kernelul transformă
datele într-un spațiu dimensional superior în care separarea liniară poate fi posibilă.
Kernelurile populare includ cel liniar, polinomial, funcția bază radială (RBF) și sigmoid.
Alegerea kernelului potrivit depinde de natura datelor și de complexitatea relațiilor dintre
caracteristici.
@author: Master2
"""
"========= SETUP =============="
import numpy as np
import random
data = np.genfromtxt('data_banknote_authentication.csv',delimiter=',')
# print(data)
L=len(data)
# print(L)
W=len(data[0])
# print(W)
shuf_data=np.zeros([L,W])
# print(len(shuf_data[0]))
X=np.arange(L)
"============================================"
10
"================================== APPLICATION FUNCTION ===================================="
X = dataset[:,:-1]
y = dataset[:,-1]
"========================================"
"================================================================================="
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
"====================================================="
y_pred = model.predict(X_test)
"============================================================"
ac=accuracy_score(y_test,y_pred)
print(f"Accuracy: {ac:.4f}")
"======================================="
print("===================")
print(" ")
"======================================================================="
11
print(" ")
"=====================================================================================================
========="
Ce problemă rezolvăm
Clasificăm autenticitatea bancnotelor folosind o bază de date formate din urmatoarele
clase:
Varianța imaginii bancnotei transformate prin Wavelet
Asimetria imaginii bancnotei transformate prin Wavelet
Curtoza imaginii bancnotei transformate prin Wavelet
Entropia imaginii bancnotei transformate prin Wavelet
Clasa (autentic/fals)
Curtoza = parametru statistic folosit pentru caracterizarea curbelor granulometrice cumulative, coefficient
de ascuțime
Wavelet = oscilație asemănătoare unei unde cu o amplitudine care începe de la zero, crește sau scade și
apoi revine la zero de o dată sau de mai multe ori. Undatele sunt denumite „oscilatii scurte”. A fost stabilită
o taxonomie a waveletelor, bazată pe numărul și direcția impulsurilor sale. Waveletele sunt impregnate cu
proprietăți specifice care le fac utile pentru procesarea semnalului.
Ce librării am folosit
12
Numpy
Folosit pentru a aranja un vector cu valori de la 0 la 1371
X=np.arange(L)
Sklearn
svm
Folosit pentru realizarea modelului de predictie
model = svm.SVC(kernel='linear', decision_function_shape='ovr',C=C)
model.fit (X_train, y_train)
model_selection train_test_split
Folosit pentru împărțirea setului de date in date de
antrenament respectiv de test în raport 75%-25%
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size =0.25 , random_state = 0)
preprocessing StandardScaler
Folosit pentru standardizarea setului de antrenare & test
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
sc.fit_transform standardizează setul de date: media noilor valori
este 0, iar devierea este mai mica de 1.
sc.transform aplică transformarea deja computată de
sc.fit_transform de la setul de antrenament la setul de test
metrics confusion_matrix
13
Realizeaza o matrice de 2x2 ce prezinta numarul de pozitive,
negative, positive false respectiv negative false. Metrică folosită
pentru măsurarea performanței.
Predicted Predicted
Positive Negative
Actual TP FN
Positive
Actual FP TN
Negative
cm = confusion_matrix(y_test, y_pred)
metrics accuracy_score
Realizează acuratețea predicțiilor din matrice după urmatoarea
formula:
TP+TN
Accuracy=
TP+TN + FP+ FN
Variația Parametrilor
I. C, CostVal, C_val
Fixat a fi ‘liniar’.
Este cel mai simplu kernel și utilizează o linie dreaptă pentru separarea datelor.
III. decision_function_shape
15
Fixat a fi ‘ovr’ (One vs. Rest)
A vs (B & C & D)
B vs (A & C & D)
C vs (A & B & D)
D vs (A & B & C)
A vs B B vs C C vs D
A vs C B vs D
A vs D
Concluzii
16
Implementarea codului compară eficient performanța modelului SVM într-un
interval de valori de cost folosind validarea încrucișată. Analizând atât seturile de date
originale, cât și cele amestecate (shuf_data), codul oferă o evaluare cuprinzătoare a
capacității de generalizare a modelului de învățare. Variația parametrului de cost ne permite
să observăm modul în care regularizarea are impact asupra capacității de predicție a
modelului. Structura modulară a codului permite adaptarea și extinderea ușoară la alte
seturi de date și sarcini de clasificare. Extinderi posibile pot fi:
Experimentarea cu mai multe tipuri de kernel & decision_function_shape în cadrul
SVM
Ilustrarea grafică a efectului variației valorilor de cost asupra acurateții.
Folosirea mai multor metrici de evaluare, cum ar fi scorul de precizie, de recall și
F1-score
TP
Precision=
TP+ FP
TP
Recall=
TP+ FN
2∗precision∗recall 2∗TP
F 1score = =
precision+recall 2∗TP+ FP+ FN
17