Fonctions Mathématiques et Numpy
Fonctions Mathématiques et Numpy
f= lambda x: x**2
if (x>0) | (y>0):
on ne peut pas modifier un tuple tandis qu'on peut modifier une liste
slicing a trois elements : list[origine:fin:pas) le debut et la fin de la liste peut etre ignore et on peut bien
utilise un pas negatif
METHODE
[Link]()
[Link](element) pour compter le nombre de fois qu'une valeur apparait dns la liste
print(index,valeur)
[Link]()
[Link]()
[Link](list,valeur par defaut) ca va creer un dictionnaire dansles cles sont les element de la liste et
les valeurs la valeur par defaut
for i in dict:
for i in [Link]()
list comprehension
list_1=[]
list_2=[]
Built-in function
all(list_1) retourne True si tous elements sont True ou des nombres nn nuls
les fonctions list(),dict(),tuple() nous permettent de creer des listes ,des tuples et des dictionnaires
x=25
ville="Paris"
message=" la temperature {} a la ville {}".format(x,ville)
La fonction open:
with open([Link],'w') as f:
[Link]("Bonjour")
with open([Link],'r') as f:
[Link]()
le module statistics
le module random
print([Link](la sequence)
on met [Link](0 ou n'importe quelle nombre ) au debut pour obtenir le meme resultat a chaque
fois
print([Link](range(100),10)) pour faire une liste de dix elements selectionnes au hasard dans la
liste
le module os
le module glob
ND ARRAY de numpy
[Link]
[Link](a,b) pour créer un tableau Avec des nombre au hasard de dimension a ligne b
colonnes
[Link](a) nous permet de créer une matrice identité Avec a ligne et a colonne
[Link](debut,fin,pas)
quel qué soit le constructeur qu'on utilise on peut utiliser en parametre dtype=
par exemple:
[Link](a,b,dtype=np.float64)
[Link]((a,b)) nous permet de changer Les dimensions d'un tableau mais on doit Garder Le même
nombre d'element
[Link]() supprimé les 1 Dan's Les dimensions pour ne rester qu'avec (a,)
a:b:c c est le as
MASQUE BOOLEEN
A=[Link](0,10,[5,5]) cree un tableau de dimension 5*5 avec des chiffres entre 0 et 10
A[(A<5) &(A>2)]
A[(A<5) |(A>2)]
MATH ET STATS
[Link](axis=) renvoi une liste de somme selon les axes(colonnes ou lignes)
[Link]() renvoi le produit comme dans toutes ses fonctions on peut toujours preciser l'axe
[Link]() trouver le minimum on peut precisr l'axe pour trouver une liste de minimum selon les axes
[Link](axis) nous permet de trouver la position du minimum en gros si on choisit comme axe la ligne
ca va nous donner l'indexe de la colonne et inversement
[Link]() nous donne l'ordre dans lequel on devrait mettre les indexes s'il fallait trier
FONCTION MATH
[Link](A)
Statistiques
[Link]() la moyenne(on peut toujours preciser l'axe)
[Link]()
[Link](A,return_counts=True) retourne une liste des element et une iste de combien de fois ils
apparaissent
[Link]() [Link]() [Link]() permettent de calculer tout en ignorant les valeurs manquantes
A[[Link](A)]=0 si on veut remplacer toutes les valeurs manquantes par une valeur
ALGEBRE LINEAIRE
A.T transposee de a
BROADCASTING
Le broadcasting consiste a etendre les dimensions d'un tableau pour effectuer une peration
On peut effectuer le broadcasting si les dimensions sont egales entre elles,ou l'une egale a 1
PYPLOT
import [Link] as plt
[Link](x,y,c=,lw=,ls=) (ou [Link] pour un nuage de points) x et y etant deux array de memes
dimensions (x sur les abscisses et y sur les ordonnees)
Les parametrs c(pour la couleur de la ligne,on peut mettre c='red' par exemple),lw(l'epaisseur de la ligne
par exemple lw=2),ls(par exemple si on veut des tirets ls="--")
CYCLE DE VIE
Debut de la figure: [Link]()
Contenu:
[Link](x,x**3,label='cubique')
[Link]('axe x')
[Link]('axe y')
[Link]()
Affichage: [Link]()
Sauvegarde: [Link]('[Link]')
NB: on peut avoir plusieurs graphic à l'interieur d'une figure en utilisant la fonction subplot:
[Link]
après avoir sélectionné un graphique on donne son contenu puis on fait pareil pour les autres
graphiques
fig,ax = [Link]()
[Link](x,y)
[Link]()
en sachant que fig est un objet(la feuille de papier) et ax est un tableau ndarray qui contient nos objets
L'avantage est que la methode oriente objet a plus de fonctionnalite par exemple on peut creer deux
graphiques qui partagent la meme abscisse
fig,ax = [Link](2,1,sharex=True)
ax[0].plot(x,y)
ax[1].plot(x,sin(x))
[Link]()
GRAPHIQUES MPORTANTS:
--SCATTER PLOT
--GRAPHIQUE 3D
ax= [Link](projection="3d")
[Link](x[:,0],x[:,1],x[:,2],c=y)
ex:
X= [Link](0,5,100)
Y= [Link](0,5,100)
X,Y=[Link](X,Y)
Z=f(X,Y)
ax=[Link](projection='3d')
--HISTOGRAMME
[Link](x[:,0],bins=) le parametre bins determine le nombre de section que l'on desire avoir dans notre
histogramme
on peut mettre deux histogrammes dans un meme graphique comme on l'a fait avec les courbes et on
peut aussifare des histogrammes en 2d
ou
[Link](X,Y,Z,cmap=)
[Link]()
--Imageshow
SCIPY
Il pEut nous aider a interpoler(relier des points):
f= interpld(x,y,kind='linear') le parametre kind nous aide a determiner le type d'interpolation dans ce cas
on utilise une interpolation linear mais il y en a d'autres(cubic,etc)
new_x=[Link](0,10,30) on cree d'autres tableau qui vont nous aider a placer des points dans les
vides
result=f(new_x)
[Link](x,y)
[Link](new_x,result,c='r') puis on affiche les deux nuage de points l'ancien et celui qui nous permet
d'interpoler
le module OPTIMIZE
--Optimize:
la fonction minimize nous permet de trouver le minimum de n'importe quel fonction mathematique,elle
peut etre utiliser avec les fonctions de deux,trois,quatre dimensions
def f(x):
return x**2+2x+3
x=[Link](-10,10,100)
[Link](x,f(x))
result=[Link](f,x0=5).x
EN 2d
x0=[Link]((2,1))
result=[Link](f,x0=x0).x
le module SIGNAL
Fonction detrend nous permet d'eliminer les tendances lineaires de la fOnction
Le module fftpack
La transformation de fourier : nous permet de decomposer un signal(compose de plusieurs frequences)
en frequence ,le reultat est appele spectre( reliant les frequences sur l'axe des x et les amplitudes sur les
y)
[Link]([Link](frequence),power)
[Link](fourier)
NDIMAGE
TRAITEMENT D'IMAGE:
DILATION: imprime les pixels
open_x=nd_image.binary_opening(X) cette fonction nous permet d'effectuer les deux afin de traiter une
image
[Link](open_x)
PANDAS
CHARGER UN DATASET
import pandas as pd
data=pd.read_csv("[Link]")
data=pd.read_excel("[Link]")
data=pd.read_json("[Link]") ,etc
[Link]
[Link]
[Link]()
data["colonne"].value_counts nous permet de voir les differentes categories devaleur dans la colonne et
combien de fois ils apparaissent
data["colonne"].value_counts.[Link]()
data["colonne"].hist(bins=)
data["colonne"].plot()
data["colonne"].[Link](x=,y=)
[Link].scatter_matrix(data["colonne"])
LA FONCTION GRPOUPBY
[Link](["colonne"].mean()
[Link](["colonne1","colonne2"].mean()
data.set_index("nom de la colonne")
[Link][0,0]
[Link][0,"age"]
0:2 avec iloc selectionne les deux premiere ligne 2 est exclus
0:2 avec loc selectionne les trois premiere ligne 2 est inclus
BOOLEAN INDEXING
TIME SERIES
En general pandas comprend plusieurs format de date mais si il n'y arrive pas on peut effectuer la
conversion avec la fonction to_datetime
pd.to_datetime('2023/03/30')
La fonction resample nous permet de regrouper les donnees selon une frequence(mois,semaine)
on peut utilser la fonction aggregate pour utiliser plusieurs fonctions par dessus la fonction resample
MOVING AVERAGE
Au lieu de faire la moyenne sur toutes les valeurs on fait la moyenne sur une fenetre de valeur on decalle
d'une valeur et refait la moyenne et ainsi de suite
La moyenne mobile exponentielle les valeurs perdent peu a peu dupoids avec le temps grace aux factuer
de lissage alpha
le parametre on nous permet d'indiquer sur quel colonne en assemble(ce doit etre une colonne qu'ils
ont en commun), le parametre how indique comment on assemble avec inner si une dataset est plus
grande que l'autre on ne va retenir que les valeur commune avec outer on retient tout mais il y a des
valeurs manquantes(how peut aussi avoir right ou left comme valeur) le parmetre suffix nous permet
d'inquer le suffix apres les colonne de la 1ere et 2eme dataframe
MAP ET APPLY
map est utiliser pour les series pour appiquer une fonction a chaque element de la serie
data["age"].map(lambda x:x-1)
data["age"].map(lambda x:len(x))
data["age"].map(classeur) classeur etant une fonction que j'ai defini au prealable qui prend en agument
les elements de la serie et qui nous retrourne quelque chose
apply par contre peut etre utilise soit pour un series soit pour un dataframe entier,elle permet
d'appliquer une fonction sur tous les elements d'un dataframe en suivant un axe(axis=0 lignes,axis=1
colonnes)
applymap() sert a appliquer une fonction sur tous les elements d'un dataframe elle est similaire a map
mais pour les dataframe en entier
data["sex"].map("male":0,"female":1)
data["sex"].replace(["male","female"],[0,1])
[Link](x,y,data,hue,size,style)
data LA DATAFRAME
hue,size,style=options de segmentations
hue permet de differencier les points(du graphique) en fonction d'un troisieme element qui sera une
varible categorielle(la difference se fera en couleur)
size nous permet de controller la taille de points on peut le remplir avec une colonne de varible
numerique ou uneliste/array de valeurs numeriques
style nous permet de changer la forme en y attribuant une variable categorielle,dans ce cas chaque
categorie aura une forme differente(cercle,triangle,etc)
1)pairplot()
2)caplot()
3)boxplot()
4)distplot()
5)jointplot()
6)Heatplot()
Matplotlib ou seaborn
matplotlib:foction,matrices,math,science,ingenierie,graphique specialise
APPRENTISSAGE SUPERVISE
--En fournissant des donnees a la machine on constitue un dataset
--On specifie le type de modele et les hyperparametres de ce model
--Grace a un parametre d'optimisation la machine trouve les parametres qui fournissent les meilleures
performances sur le dataset,C'est ce qu'on appele la phase d'entrainement
Il peut etre utilse pour des problemes de regression lorsqu'on dois predire une variable
continue(numerique)
Etapes:
[Link](X,y)
on l'evalue
[Link](X,y)
Utilise le model
[Link](X)
exemple:
model= KneighborsClassifier()
y=titanic["survived"]
X=[Link]("survived",axis=1)
[Link](X,y)
[Link](X,y)
[Link](X)
def survie(model,pclass=3,sex=0,age=26):
x= [Link]([pclass,sex,age]).reshape(1,3) on doit mettre les features dans le meme ordre que dans
la dataset et on soit utiliser reshape pour la transtormer en 2D
print([Link](x))
print(model.predict_proba(x)) cette methode estb presente dans certains model et nous permet de
calculer laprobabilite d'appartenir a une categorie oy l'autre en target
model= KneighborsClassifier(n_neighbors=3)
y=titanic["survived"]
X=[Link]("survived",axis=1)
[Link](X_train,y_train)
[Link](X_test,y_test)
[Link](X)
CROSS VALIDATION:
Consiste a diviser nos donner en split et chaque fois on va tester avec le un split en ayant entraine avec le
reste. A la fin on fait la moyenne de des score obetenu en testant sur different split
cross_val_score(KneighborsClassifier(),X_train,y_train,cv=5,scoring='accuracy').mean()
pour choisir le meilleur hyperparametre n_neighbors on peut utiliser la foction validation score qui va
nous permettre de faire cette observation avec un graphique
model=KneighborsClassifier()
k=[Link](1,50)
grid= GridSearchCV(KneighborsClassifier(),param_grid,cv=5)
[Link](X_train,y_train)
model=grid.best_estimator_ on le sauvegarde
si om veut tester avec beaucoup plus d'hyperparametre on prut utiliser RandomizedSearchCV qui va
chercher la meilleure configuration au hasard avec un nombre d'iteration qu'on devra preciser
grid= RandomizedSearchCV(KneighborsClassifier(),param_grid,cv=5,n_iter=40)
1) K Fold: on mélange les train_set grâce au Shuffle par défaut et ensuite on le divise en Split,on utilise
un Split pour valider le model et le reste pour l'entraînement et ainsi de suite juqu'à avoir utiliser tous les
splits pour la validation
Score-=cross_v_score(KneighborsClassifier,X,y,cv=CV).mean()
L'un des cas particuliers de KFold ça s'appelle leave one out qui consiste à tester le model sur chacun des
exemples d'où le nombre de Split est égal au nombre de ligne
CV=LeaveOneOut()
La stratégie KFold présente un inconvénient si on est dans des situations où il y a des classes
déséquilibré(une cartegorie se présente en très petit nombre,tandis qu'une autre domine) mais elle
reste très bonne surtout pour les problème de régression où il n'y a pas de classe
2) Shuffle split :
On mélange le train_set on définit une portion (20% par exemple) pour valider et le reste pour
entraîner,on remelange on utilise la même portion
Pour valider et le reste pour entraîner et ainsi de suite autant de fois qu'on le veut
3) Stratified Kfold: consiste a créer des Split dans les quels on retrouve une portion de toutes les classes:
Score-=cross_v_score(KneighborsClassifier,X,y,cv=CV).mean().
Pas d'inconvénients
4) GroupKFold:lorsqu'on a des données qui dépende d'un groupe,par exemple on peut assembler les
membres d'une famille,ou bien assembler les membres d'une même classe dans ce cas dans le
paramètre groups il faut faire passer la colonne catégorielle qui différencie mes groupes(famille,classe)
from [Link] import KneighborsClassifier
Score-=cross_v_score(KneighborsClassifier,X,y,cv=CV).mean().
Metrics
mae=mean_absolute_error(y,y_pred)
mse=mean_squarred_error(y,y_pred)
-On utilise le MSE lorsqu'on accorde une grande importance aux grandes erreurs
-Par contre,on utilise le MAE:si l'importance d'une erreur est linéaire avec son [Link] le dataset
contient des valeurs aberrantes(outliers,En data science, un outlier (ou valeur aberrante) est une donnée
qui diffère fortement des autres observations dans un ensemble de données. Il s'agit d'un point qui
semble "anormal" ou éloigné des tendances générales)
D'où autant utiliser plusieurs metrics pour récolter le plus d'informations possibles.
Si on veut utiliser plusieurs metrics dans une cross validation il suffit de fournir une liste de metrics dans
le paramètre scoring de cross_val_score sous forme de string
CONFUSION MATRIX:
Cette fonction est un outil tres utile pour les problemes de classification qui nous permet de voir les
erreurs de classement
print(cofusion_matrix(y_test,[Link](X_test))
LEARNING CURVE:
le parametre train_size permet de d'indiquer le premier pourcentage de donnees 20%,le dernier 100%
et le nombre de pourcentage total 5 et tout ca est stocke dans la variable N
[Link]()
[Link](2, 1, 1)
[Link]("TRAIN")
[Link](N,train_score.mean(axis=1))
[Link](2, 1, 2)
[Link]("VALIDATION")
[Link](N,val_score.mean(axis=1))
[Link]()
RESUME
1) Créer un Train set et un Test set. Entraîner puis évaluer
DATA PREPROCESSING
Dans le module [Link] on a plusieurs objet de class transformers
et ces transformers on une methode .fit() qui permet de develooper une fonction de transformation aa
partir des donnees d'entrainement(X_train) et une methode transform() qui permet d,appliquer cette
fonction pour transformer le donnees d'entrainement et de [Link] methode fit_transforme(X_trian) fait
d'une pierre deux coups
En reume, on divise le data set en train_set et en test_set ,on utilise la methode fit_transform sur les
donnees du train_set puis on entraine notre estimateur avec le train_set [Link] on utilise la
methode transform sur les donnees du test_set,et on utilise l'estimateur pour faire de nouvelles
predictions.
1)Encodage ordinal: remplacer chaque categorie par une valeur numerique, il y a deux transformer qui
nous aide a le realiser:
--LabelEncoder: A ete concu pour encoder une seule colonne ,en l'occurence la variable y
import numpy as np
y=[Link](['chat','chien','oiseau','chat'])
encoder=LabelEncoder()
y=encoder.fit_transform(y)
NB: C'est que ca etablit un ordre arithmetique entre les categorie c'est qui affecte la plupart des model a
l'exception des model d'arbre,pour y remedier on utilise le one-hot encodage
2) Encodage One-hot:
chat --> 1 0 0
chien-->0 1 0
oiseau-->0 0 1
--LabelBinarizer()
--MultiLabelBinarizer()
--OneHotEncoder()
y=[Link](['chat','chien','oiseau','chat'])
encoder=LabelBinarizer(sparse_output=True,handle_unknown)
y=ebcoder.fit_transform(y)
Si on a un large dataset avec plusieurs categories et qu'on utilise l'encodage one-hot ca risque de devenir
trop volumineux du coup le parametre sparse_output=True nous eprmet de compresser le resultat,mais
il n'est pas necessaire avec le transformer OneHotEncoder() car le resultat est compresse par defaut ,le
parametre handle_unknown peut avoir deux valeur 'error' pour retourner une erreur si on se retrouve
face a une categorie inconnu ou 'ignore' pour ignorer
NORMALISATION:
1) la normalisation MinMax
consiste a transformer chaque variable de telle sorte qu'elle soit comprise entre 0 et 1
X= [Link]([70],[80],[120])
scaler=MinMaxScaler()
X_test=[Link]([90])
XTESTSCALED=(XTEST-XTRAINmin)/(XTRAINMAX - XTRAINMIN)
2) STANDARDISATION
Consiste a transformer nos variables de telle sorte que chaque variable ait une moyenne nulle et un
ecart-type=1
X= [Link]([70],[80],[120])
scaler=StandardScaler()
X=scaler.fit_transform(X)
X_test=[Link]([90])
X_test=[Link](X_test)
Les deux techniques ci-haut sont sensibles au valeurs aberrantes(outliers) et deviennent et rendent les
donnees difficiles a exploiter vu qu'elles sont vraiment ecrasees(reduites) en vue de respecter les
contraintes(entre 0 et 1, moyenne=o et ecart type=1) tout en maintenant la distance entre les donees.
Pour y remedier on peut normaliser grace a RobustScaler qui lui n'est pas sensible aux outliers
3) RobustScaler:
formule:
X= [Link]([70],[80],[120])
scaler=RobustScaler()
X=scaler.fit_transform(X)
X_test=[Link]([90])
X_test=[Link](X_test)
ces variables n'etant pas sur le meme echelle il faut les normaliser avant de les utiliser
--PowerTransformer: permet de faire une transformation non lineaire pour arranger la distribution de
donnees, et faciliter l'apprentissage
X=[Link](0,5,10).reshape((10,1))
2)KBinsDiscretizer:
Qui fait la meme chose en decoupant la variable en plus de deux categories
X=[Link](0,5,10).reshape((10,1))
--FunctionTransformer : est un transformer personnalisable dans lequel on peut entrer n'importe quel
fonctiom
X=[Link](0,5,10).reshape((10,1))
X=Mon_transformer.fit_transform(X)
1) SimpleImputer
imputer.fit_transform(X)
2)KNNImputer:consiste à deviner la valeur manquante en se basant sur la ressemblance avec les voisins:
imputer=KNNImputer(n_neighbors=1)
Imputer.fit_transform(X)
b=MissingIndicator().fit_transform(X)
print(b) ça va nous retourner un tableau numpy avec des True à l'emplacement des valeurs manquantes
et des False où il n'y en a pas
SKLEARN PIPELINE
On assemble le transformer et l'estimateur dans une pipeline
[Link](X_train,y_train)
[Link](X_test)
PIPELINE GRIDSEARCHCV
model=make_pipeline(PolynomialFeatures(),StandardScaler(),SGDClassifier(random_state=0)
params={'polynomialfeatures__degree': [2,3,4],'sgdclassifier__penalty':['l1','l2']}
vu que le model est dans un pipeline dans le dictionnaire d'hyperparametre on met son nom__ et le
parametre
grid= GridSearchCV(model,params,cv=4)
[Link](X_train,y_train)
model=grid.best_estimator_
Pipeline avancée:
1) make_column_transformer
numerical_features=[ ] on etablit une liste des colonnes contenant les colonnes des variables numérique
numerical_pipeline=make_pipeline(simple_imputer(), StandardScaler())
Categorical_pipeline=make_pipeline(simple_imputer(strategy='most_frequent),OneHotEncoder()
preprocessor= make_column_transformer((numerical_pipeline,numerical_features),
(categorical_pipeline,categorical_features)) grâce à la fondation make_column_transformer on sélection
quel pipeline va traiter quel colonne avec des tuples
model=make_pipeline(preprocessor,SGDClassifier()) puis on crée une pipeline final
2)make_column_selector:
Pour sélectionner les variables au lieu de mettre de liste on peut faire par exemple
numerical_features=make_column_selector(dtype_include=[Link])
Catégorical_features=make_column_selector(dtype_exclude=[Link])
Puis on continue
3) make_union(): cette fonction de créer des pipelines parallèles dont les résultats sont concatenés à la
sortie du transformer:
pipeline=make_union(StandardScaler(),Binarizer())
pipeline.fit_transform(numerical_features)
on aura un tableau avec des colonnes standardisé(grâce à StandardScaler()) concatenés avec un tableau
encodé (grâce à Binarizer()) ce qui fait que la deuxième dimension du tableau va doubler.
FEATURE SELECTION
1)Le transformer VarianceThreshold qui elimine les variables dont dont la variance est inferieur a un
certain seuil.
Explication:
Pour effectuer des predictions, un estimateur a besoin d'informations qui varient avec en accord la target
X=selector.fit_transform(X)
selector.get_support() nous retourne un tableau numpy 1D rempli de booleen qui nous indique quel
colonne a ete selectionnee
2)SelectKBest est en general plus efficace, il selectionne les K variables dont le score du test de
dependance avec y est le plus [Link] statistique nous avons plusieurs test de dependance:
from sklearn.feature_selection import SelectKBest,chi2
selector=SelectKBest(chi2,k=2) ici le test de dependance est chi2 et vu qu'on a mis k=2 ca va nous
retourner les deux colonnes de X avec les scores de test de dependance les plus eleves
X=selector.fit_transform(X,y) il faut faire passer a la fois X et y qui sont neccessaire au test de
dependance
3)SelectFromModel entraine un estimateur puis selectionne les variables es plus importantes pour cet
estimateurs
Note:Compatible avec les estimateurs qui developpent une fonction parametree(attribut .coef_
ou .feature_importance_) pas compatible avec K-Nearest Neighbour
3)RFE et RFECV permet de d'effectuer une selection de feature recursive c'est a dire entrainer
l'estimateur avec le dataset eliminer un certain nombre de variables moins importantes ,entrainer
l'estimateur avec les variables restantes ,resupprimer des colonnes et ainsi de suite
selector.fit_transform(X,y)
[Link](X)
[Link](X)
Pour trouver lebon nombre de cluster on prut utiliser la "Elbow method" qui nous permet de determiner
une zone de coude qui nous donne le nombre de cluster optimal qui minimise le cout tout en restant un
nombre raisonnable
inertia = []
for k in K_range:
model = KMeans(n_clusters=k, )
[Link](model.inertia_)
# Tracé de la courbe
[Link](K_range, inertia)
[Link]("Nombre de clusters")
[Link]()
on effectue un nombre desplis aleatoires et on compte le nombre de splits qu'il faut pour isoler nos
[Link] nombre de splits --> anomalie
[Link](X)
--Outlier detection: detecte les anomalies dans le train_set comme le fait IsolationForest
--Novelty detection:detecte les anomalies dans les donnees futures comme le fait LocalOutlierFactor
REDUCTION DE DIMENSION
Le principe est de **réduire la complexité superflue** d’un dataset en projetant ses données dans un
espace de plus petite dimension (un espace avec **moins de variables**).
On cherche a projeter nos donnees sur des axes appeles composantes principales,encherchant
aminimiser la distance entre les points et leurs projections decette maiere on reduit la dimension de
notre dataset tout en preservant au max la variance
model.fit_transform(X)
Pour compresser un dataset on doit chercher a le compresser au max tout en conservant le max de
variance(95 a 99%) pour garder la qualite
model.fit_transform(X)
A savoir:
ENSEMBLE LEARNING
Consiste a ensembler plusieurs model pour constituer une prediction [Link] doivent chacun avoir une
performance > 50 % et avoir de la [Link] y atrois techniques:
BAGGING|:
Consiste a creer plusieurs copies du meme model et d'entrainer chaque copie sur une partie aleatoire du
dataset,on utlise une technique appele bootstrapping pour faire en sorte qu'ils aient quand meme des
predictions en [Link]:RandomForest qui est un ensemble de DecisionTree
BOOSTING:
Consiste a entrainer un model, a demander a un autre model entrainer de cooriger ses erreurs et ainsi
de suite
En bagging,chaque model est fort ,en situation d'overfitting et les assembler permet de reduire la
[Link] boosting chaque model est faible en situation d'undefitting et les assembler permet de
reduire le biais
STACKING:
1)VOTING ESTIMATOR:
model_1=SGDClassifier(random_state=0)
model_2=DecisionTreeClassifier(random_state=0)
model_3=KneighborsClassifier(random_state=0)
model_4=VotingClassifier([("SGD,model_1),("Tree,model_2),("KNN",model_3),voting='hard') le
parametre voting nous permet d'indiquer le type de vote:
pour la classe VotingRegressor utilise pour les problemes de regressions on fait juste la moyenne des
predictions mais pour la class VotingClassifier on a le choix entre le hard voting(vote suir les
predictions,on voit la majorite) et le soft voting(vote sur les pribabilites de chaque class,on voit les
predictions de chaque model et a combien de % il en est sur)
[Link](X_train,y_train)
En general utiliser les voting estimator n'est pas tres efficace a cause de la faible diversite des predictions
2) BAGGING ESTIMATOR:
model_1=BaggingClassifier(base_estimator=KNeighborsRegressor,n_estimators=100)ici il suffit de
specifier un estimateur de base et un nombre d'estimateur qui est par defaut egal a 100
model_1.fit(X_train,y_train)
model_2.fit(X_train,Y_train)
3)BOOSTING ESTIMATOR:
model=AdaBoostingClassifier(n_estimators=100)
[Link](X_train,y_train)
[Link](X_test,y_test)
comme d'ab ils sont aussi disponible en tant que regressor et a part le nombre d'estimateurs on peut
bien specifier d'autres parametres et le mieux est d'utliser une gridsearch
4) STACKING ESTIMATOR
model_4=StackingClassifier([("SGD,model_1),("Tree,model_2),
("KNN",model_3),final_estimator=KNeighborsClassifier()) le final_estimator effectue ses predictions par
dessus celle des autres models
model_4.fit(X_train,y_train)
model_4.score(X_test,y_test)
NB: Si nos models ont tendances a faire de l'overfitting on se tourne vers le bagging.S'Ils ne sont pas
assez performants on se tourne vers le [Link] stacking peut etre tres efficace si on a passe
beaucoup de temps a entraine chaque model et qu'ils ont chacun une tres bonne
performances,cependant il prend beaucoup de temps
DEMARCHE DE TRAVAIL
1. Définir un objectif mesurable :
- Objectif : Prédire si une personne est infectée en fonction des données cliniques disponibles.
- Métriques :
- Précision (Precision)
- score F1 enfaite on utilise ca a la place des metrics si ples quand les class sont desequilibres dans un
probleme de classification comme la plupart du temps
Concepts clés :
- Précision (Precision)
Formule :
- Permet de réduire au maximum le taux de faux positifs.(c'est-à-dire dans ce cas réduire le nombre de
personnes envoyer à l'hôpital alors qu'ils ne sont pas malades)
- Recall
Formule :
- Permet de réduire au maximum le taux de faux négatifs.(réduire le nombre de malades non envoyés à
l'hôpital)
- Score F1 :
- F1 ≥ 50%
- Recall ≥ 70%
Objectif :*Comprendre au maximum les données disponibles afin de définir une stratégie de
modélisation.
Checklist de base :
1. Analyse de la forme :
- Types des variables.(EX: [Link] pour avoir le type de chaque variable et [Link] .value_counts
chaque type et combien de fois il apparait)
2. Analyse du fond :
pour une relation entre deux variables categorielles on peut utiliser [Link]
[Link](df[groupe].corr())
- Nettoyage des données (gestion des valeurs manquantes, encodage des variables catégoriques, etc.).
4. Modélisation :
- Évaluation du modèle à l’aide des métriques définies (Précision, Rappel, Score F1).
Slide 1 : Pre-processing
Objectif: Transformer les données pour les mettre dans un format propice au Machine Learning.
- Encodage
- Feature Selection
- Feature Engineering
- Feature Scaling
Slide 2 : Modelling
Dans le cas d'une classification binaire on peut definir un seuil(threshold) a partir duquel le model emet
une prediction ou l'autre
[Link]()
on affiche un graphique avec le threshold sur l'abscisse et la precision et le recall sur les
ordonnees et en general il est mieux de decigner l'intersection de ces deux courbes comme seuil(en
general bien sur)
return model.decision_function(X) > threshold cette fonction est notre model final qui effectura des
predictions en fonctions de notre seuil personnalise
f1_score(y_test, y_pred)
recall_score(y_test, y_pred)