Types de Données
Spark MLlib propose deux API principales : basée sur RDD et sur DataStream. La bibliothèque gère les vetceurs et matrices locaux pour les données simples, ainsi que les matrices distribuées soutenues par des RDD.
Vecteurs Locaux
Deux types de vecteurs sont supportés :
- Dense : Majorité d'éléments non-nuls
- Sparse : Majorité d'éléments nuls, représentés par des tuples (index, valeur)
// Vecteur sparse : (1.0, 0.0, 0.0, -2.0)
Vectors.sparse(4, Array(0, 3), Array(1.0, -2.0))
// Vecteur dense : (4.0, 5.0, 0.0, 3.0)
Vectors.dense(Array(4.0, 5.0, 0.0, 3.0))
Points Étiquetés
Représentent des données superivsées via la classe LabeledPoint :
// Création avec vecteur dense
val ptDense = LabeledPoint(1.0, Vectors.dense(Array(1.0, 2.0, 3.0)))
// Création avec vecteur sparse
val ptSparse = LabeledPoint(0.0, Vectors.sparse(3, Array(1), Array(0.9)))
Données Sparse
Lecture de données au format LIBLINEAR :
val sparkConfig = new SparkConf().setMaster("local[*]")
val contexteSpark = new SparkContext(sparkConfig)
val donnees = MLUtils.loadLibSVMFile(contexteSpark, "chemin/vers/fichier")
Matrices Locales
Représentation de matrices denses et sparses :
// Matrice dense 3x2
Matrices.dense(3, 2, Array(1.2, 2.1, 3.2, 2.1, 2.2, 2.3))
// Matrice sparse 3x2
Matrices.sparse(3, 2, Array(0, 1, 3), Array(0, 2, 1), Array(9, 6, 8))
Matrices Distribuées
Quatre types principaux :
Matrice de Lignes
val seqVecteurs = Seq(
Vectors.dense(4.0, 2.0, 1.0),
Vectors.dense(2.1, 2.2, 1.7)
)
val rddVecteurs = contexteSpark.parallelize(seqVecteurs)
val matLignes = new RowMatrix(rddVecteurs)
Matrice Indexée
val lignesIndexees = Seq(
IndexedRow(0L, Vectors.dense(1.0, 2.0)),
IndexedRow(1L, Vectors.dense(3.0, 4.0))
)
val matIndexee = new IndexedRowMatrix(contexteSpark.parallelize(lignesIndexees))
Matrice de Coordonnées
val entrees = Seq(MatrixEntry(0, 1, 8.0), MatrixEntry(2, 3, 1.0))
val matCoord = new CoordinateMatrix(contexteSpark.parallelize(entrees))
Matrice par Blocs
val matBlocs = matCoord.toBlockMatrix()
Statistiques Fondamentales
Statistiques Descriptives
val donneesVec = contexteSpark.parallelize(Seq(
Vectors.dense(1.0, 2.0, 3.0),
Vectors.dense(4.0, 5.0, 6.0)
))
val resume = Statistics.colStats(donneesVec)
println(resume.mean) // Moyenne par colonne
println(resume.variance) // Variance par colonne
Corrélations
val serieA = contexteSpark.parallelize(Seq(1.0, 2.0, 3.0))
val serieB = contexteSpark.parallelize(Seq(4.0, 5.0, 6.0))
// Corrélation de Pearson
val corrPearson = Statistics.corr(serieA, serieB, "pearson")
// Matrice de corrélation
val matriceCorr = Statistics.corr(donneesVec, "pearson")
Échantillonnage Stratiifé
val donneesCles = contexteSpark.parallelize(Seq(
(1, 'A'), (2, 'B'), (1, 'C')
))
val fractions = Map(1 -> 0.5, 2 -> 0.8)
val echantillonExact = donneesCles.sampleByKeyExact(false, fractions)
Génération Aléatoire
val rddNormal = RandomRDDs.normalRDD(contexteSpark, 100L, 4)
val rddPoisson = RandomRDDs.poissonRDD(contexteSpark, 0.6, 100L)
Fonctions Avancées
MLlib propose également :
- Tests d'hypothèses (test du χ²)
- Traitement en flux continu
- Estimation de densité par noyau