Fondamentaux de Spark MLlib et Statistiques de Base

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

Étiquettes: SparkMLlib Vecteurs Matrices Statistiques RDD

Publié le 30 juillet à 03h33