[JAVA] [Maschinelles Lernen mit Apache Spark] Sparse Vector (spärlicher Vektor) und Dense Vector (dichter Vektor)

Überblick

--Organisation von Apache Spark's Sparse Vector und Dense Vector

Umgebung

Was ist Sparse Vector?

Spärlich bedeutet "Quetschen".

Wenn die Elemente eines Vektors viele Nullen enthalten Zum Beispiel

[0.1,0.0,0.0,0.0,0.3]

Wenn es einen Vektor gab

Diesen Vektor ausdrücken

"** Der Wert des ersten Elements beträgt 0,1 **, der Wert des letzten Elements beträgt 0,3 ** und die Anzahl der Elemente beträgt 5 **."

Es basiert auf der Idee, dass die Informationen ausreichen. (Die Werte anderer Elemente sind ** 0,0 **)

Auf diese Weise kann die Informationsmenge reduziert werden, sodass der Vorteil darin besteht, dass ** Speicherplatz gespart werden kann **.

In den meisten Bibliotheken für maschinelles Lernen ist so etwas wie ein spärlicher Vektor implementiert.

Sparce Vector in Spark

Jetzt ist es einfach, in Spark einen spärlichen Vektor zu erstellen.

Verwenden Sie ** org.apache.spark.ml.linalg.SparseVector ** im Paket ** spark.ml **.

Die Klasse ** SparseVector ** wird mit einem Array von Indizes (Indizes) und einem Array von Werten (Werten) initialisiert.

Wenn Sie [0.1,0.0,0.0,0.0,0.3] erstellen möchten, Index-Array (Indizes) new int [] {0, 2} und Wert-Array (Werte) new double [] {0.1, 0.5} OK, wenn initialisiert

image.png

SparseVector


// SparseVector(Spärlicher Vektor)
int size = 3;//Vektorelementgröße
int[] indices = new int[] { 0, 4 };
double[] svalues = new double[] { 0.1, 0.5 };
Vector svec = new SparseVector(size, indices, svalues);
System.out.println("SparseVector=" + Arrays.toString(svec.toArray()));

Ausführungsergebnis


SparseVector=[0.1, 0.0, 0.0, 0.0, 0.5]

Es kann mit Vector # toArray angeordnet werden, aber natürlich wird der verbrauchte Speicher gespeichert, da nur Indizes (Array von Indizes) und Werte (Array von Werten) beibehalten werden, wenn sie nicht benötigt werden.

Was ist dichter Vektor?

Paar mit dem spärlichen Vektor. Es enthält alle Werte der Elemente des Vektors wie ein allgemeines Array.

[0.1,0.0,0.0,0.0,0.3]

Dichter Vektor im Funken

Dichtes Vecotr wird durch Angabe eines Arrays von Werten (Werten) initialisiert.

Wenn Sie [0.1, 0.0, 0.0, 0.0, 0.3] erstellen möchten, übergeben Sie das Array new double [] {0.1, 0.0, 0.0, 0.0, 0.5} der Anzahl der Elemente. Ist dichter Vektor

image.png

DenseVector


// DenseVector(Dichter Vektor)
double[] dvalues = new double[] { 0.1, 0.0, 0.0, 0.0, 0.5 };
Vector dvec = new DenseVector(dvalues);
System.out.println("DenseVector=" + Arrays.toString(dvec.toArray()));

Ausführungsergebnis


DenseVector=[0.1, 0.0, 0.0, 0.0, 0.5]

Vollständiger Quellcode (Java)

Verwenden Sie ** Apache Spark ** aus Java

SparkVectorExamples.java


package org.riversun.spark;

import java.util.Arrays;

import org.apache.spark.ml.linalg.DenseVector;
import org.apache.spark.ml.linalg.SparseVector;
import org.apache.spark.ml.linalg.Vector;

public class SparkVectorExamples {

	public static void main(String[] args) {

		// DenseVector(Dichter Vektor)
		double[] dvalues = new double[] { 0.1, 0.0, 0.0, 0.0, 0.5 };
		Vector dvec = new DenseVector(dvalues);
		System.out.println("DenseVector=" + Arrays.toString(dvec.toArray()));

		// SparseVector(Spärlicher Vektor)
		int size = 5;//Vektorelementgröße
		int[] indices = new int[] { 0, 4 };
		double[] svalues = new double[] { 0.1, 0.5 };
		Vector svec = new SparseVector(size, indices, svalues);
		System.out.println("SparseVector=" + Arrays.toString(svec.toArray()));
	}
}

Ausführungsergebnis


DenseVector=[0.1, 0.0, 0.0, 0.0, 0.5]
SparseVector=[0.1, 0.0, 0.0, 0.0, 0.5]

Recommended Posts

[Maschinelles Lernen mit Apache Spark] Sparse Vector (spärlicher Vektor) und Dense Vector (dichter Vektor)
Erste Schritte mit maschinellem Lernen mit Spark "Preisschätzung" # 1 Laden von Datensätzen mit Apache Spark (Java)
Datenverknüpfung mit Spark und Cassandra
[Maschinelles Lernen mit Apache Spark] Verknüpfen Sie die Wichtigkeit (Feature-Wichtigkeit) einer Baummodellvariablen mit dem Variablennamen (erklärender Variablenname).
Einführung in das maschinelle Lernen mit Spark "Price Estimation" # 2 Datenvorverarbeitung (Umgang mit Kategorievariablen)
Einführung in das maschinelle Lernen mit Spark "Preisschätzung" # 3 Lernen wir mit Trainingsdaten und erstellen eine [Preisschätzungs-Engine]