#version de Python
import sys
print(sys.version)
3.9.16 | packaged by conda-forge | (main, Feb 1 2023, 21:28:38) [MSC v.1929 64 bit (AMD64)]
#version de scikit-learn
import sklearn
sklearn.__version__
'1.0.2'
#changement de dossier
import os
os.chdir("C:/Users/ricco/Desktop/demo")
#chargement des données
import pandas
D = pandas.read_csv("wave500k_clustering.txt",sep="\t")
D.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 500000 entries, 0 to 499999 Data columns (total 21 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 V1 500000 non-null float64 1 V2 500000 non-null float64 2 V3 500000 non-null float64 3 V4 500000 non-null float64 4 V5 500000 non-null float64 5 V6 500000 non-null float64 6 V7 500000 non-null float64 7 V8 500000 non-null float64 8 V9 500000 non-null float64 9 V10 500000 non-null float64 10 V11 500000 non-null float64 11 V12 500000 non-null float64 12 V13 500000 non-null float64 13 V14 500000 non-null float64 14 V15 500000 non-null float64 15 V16 500000 non-null float64 16 V17 500000 non-null float64 17 V18 500000 non-null float64 18 V19 500000 non-null float64 19 V20 500000 non-null float64 20 V21 500000 non-null float64 dtypes: float64(21) memory usage: 80.1 MB
#k-means
from sklearn.cluster import KMeans
km = KMeans(n_clusters=3,random_state=123,n_init=1)
km.fit(D)
#valeur de l'inertie
print(km.inertia_)
13280417.217539601
#temps de calcul
%timeit km.fit(D)
363 ms ± 20.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
#en déploiement - affectation aux groupes
grp = km.predict(D)
#head
import numpy
numpy.unique(grp,return_counts=True)
(array([0, 1, 2]), array([180792, 180086, 139122], dtype=int64))
#temps de traitement en déploiement
%timeit km.predict(D)
67.5 ms ± 2.82 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
#scikit-learn "Intel Extension"
#liste des algorithmes gérés
import sklearnex
sklearnex.get_patch_names()
['pca', 'kmeans', 'dbscan', 'distances', 'linear', 'ridge', 'elasticnet', 'lasso', 'logistic', 'log_reg', 'random_forest_classifier', 'random_forest_regressor', 'train_test_split', 'fin_check', 'roc_auc_score', 'tsne', 'logisticregression', 'randomrorestclassifier', 'randomforestregressor', 'svr', 'svc', 'nusvr', 'nusvc', 'knn_classifier', 'knn_regressor', 'nearest_neighbors', 'kneighborsclassifier', 'kneighborsregressor', 'nearestneighbors', 'set_config', 'get_config', 'config_context']
#patcher les kmeans
from sklearnex import patch_sklearn
patch_sklearn("KMeans")
#mais on peut aussi patcher toutes les méthodes en vrac
#on fait appel à la commande en tout début de programme dans ce cas
#puis on travaille normalement avec scikit-learn !
#et en réalité, ce sont les méthodes de sklearnex qui sont appelées
#vous n'avez pas besoin de modifier le reste de votre code
Intel(R) Extension for Scikit-learn* enabled (https://github.com/intel/scikit-learn-intelex)
#il faut réimporter la classe patchée !!!
from sklearn.cluster import KMeans
#puis relancer les KMeans
km_fast = KMeans(n_clusters=3,random_state=123,n_init=1)
km_fast.fit(D)
#intertie
print(km_fast.inertia_)
13280418.81748699
#temps de calcul
%timeit km_fast.fit(D)
234 ms ± 9.57 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
#en déploiement - affectation aux groupes
grp_fast = km_fast.predict(D)
#head
numpy.unique(grp_fast,return_counts=True)
(array([0, 1, 2]), array([180072, 180801, 139127], dtype=int64))
#temps de traitement en déploiement
%timeit km_fast.predict(D)
22.6 ms ± 777 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
#comparaison
pandas.crosstab(grp,grp_fast)
col_0 | 0 | 1 | 2 |
---|---|---|---|
row_0 | |||
0 | 0 | 180792 | 0 |
1 | 180072 | 0 | 14 |
2 | 0 | 9 | 139113 |