Welcome to py-iCFOF’s documentation!
Cette documentation présente le fonctionnement des classes Python pour l’approximation des scores CFOF à l’aide d’un ou plusieurs arbres d’indexation iSAX.
Pour commencer
Installation
Lancer pip install -r requirements.txt
ou python3 -m pip install -r requirements.txt
.
Utilisation
>>> from pyCFOFiSAX import CFOFiSAX
>>> cfof_isax = CFOFiSAX()
Un jeu de données artificiel Clust2 contenant 10000 séquences en dimension 200 est disponible dans le projet avec les résultats CFOF (attention : ce ne sont pas les scores CFOFiSAX) pour \(\varrho = [0.01, 0.05, 0.1]\) :
>>> import numpy as np
>>> # chargement du jeu, avec usecols=list(range(0, 200)) pour ne pas charger les scores
>>> ndarray_dataset = np.genfromtxt("pyCFOFiSAX/tests/data_test/data/clust2_200d_20200319_125226_withrealcfof.csv",
>>> delimiter=',',
>>> skip_header=1,
>>> usecols=list(range(0, 200)))
>>> ndarray_dataset.shape
(10000, 200)
Initialisation de la forêt avec 20 arbres iSAX :
>>> cfof_isax.init_forest_isax(size_word=200,
>>> threshold=30,
>>> data_ts=ndarray_dataset,
>>> base_cardinality=2, number_tree=20)
Insertion des données :
>>> cfof_isax.forest_isax.index_data(ndarray_dataset)
Puis pré-traitement :
>>> # va afficher les temps de pré-traitement pour chaque arbre et afficher le nombre de nœuds dans chaque arbre
>>> cfof_isax.forest_isax.preprocessing_forest_for_icfof(ndarray_dataset,
>>> bool_print=True, count_num_node=True)
Ensuite, le calcul de l’approximation iCFOF, pour la ième séquence est effectué avec la fonction :
>>> tmp_ite = np.random.randint(0,10000)
>>> tmp_ite
8526
>>> score = cfof_isax.score_icfof(
>>> ndarray_dataset[tmp_ite], ndarray_dataset,
>>> rho=[0.1], each_tree_score=True,
>>> fast_method=True)
>>> # les approximations pour chaque valeur de rho sont dans score[0]
>>> score[0]
array([0.21357929])
>>> # si each_tree_score=True,
>>> # il est possible de regarder les scores obtenus dans chaque arbre avec score[1]
Pour connaître le nombre de nœuds visités dans chaque arbre lors du calcul :
>>> cfof_isax.forest_isax.number_nodes_visited(ndarray_dataset[tmp_ite],
>>> ndarray_dataset)
array([1086. , 1044. , 1061. , 1087. , 1013. , 1115. ,
1067. , 1101. , 1069. , 1065. , 1104. , 1104. ,
1115. , 1059. , 1009. , 1001. , 1097. , 1018. ,
1081. , 1084. , 838.215 , 804.8092, 826.3052, 853.1703,
769.1603, 870.4031, 829.9387, 853.9431, 833.5567, 830.6371,
849.1152, 861.5018, 864.5723, 820.4267, 762.5597, 763.3633,
863.6749, 785.884 , 850.051 , 832.9658])
Réferences
CFOF: A Concentration Free Measure for Anomaly Detection, F. Angiulli, 2020, TKDD
Concentration Free Outlier Detection, F. Angiulli, 2017, ECML-PKDD
iSAX 2.0: Indexing and Mining One Billion Time Series, A. Camerrea et al., 2010, ICDM
iSAX: Disk-Aware Mining and Indexing of Massive Time Series Datasets, J. Shieh et al., 2009, DMKD
Unsupervised real-time anomaly detection for streaming data, Ahmad, S. et al., 2017, Neurocomputing
Tslearn, A Machine Learning Toolkit for Time Series Data, R.Tavenard et al., 2020 , JMLR