【Apache Spark에서 기계 학습】SparseVector(희소 벡터)와 DenseVector(밀밀 벡터)
개요
환경
SparseVector(희소 벡터)란?
Sparse(스퍼스)란 「스카스카 하고 있다」라는 의미.
한 벡터의 요소에 0이 많이 포함된 경우
예를 들면
[0.1,0.0,0.0,0.0,0.3]
라는 벡터가 있었을 때,
이 벡터를 표현하려면
"첫 번째 요소의 값이 0.1이고 마지막 요소의 값이 0.3이고 요소 수가 5입니다."
라는 정보만으로 충분하네, 라는 생각에 근거한다. (그 외의 요소의 값은 0.0으로 한다)
이렇게 해서 정보량을 억제할 수 있으므로 메모리도 절약할 수 있다는 것이 이익.
희소 벡터는 대부분의 기계 학습 라이브러리에서 구현됩니다.
Spark에서 SparceVector
글쎄, Spark에서 희소 벡터를 만드는 방법은 간단합니다.
spark.ml 패키지의 org.apache.spark.ml.linalg.SparseVector를 사용한다.
SparseVector 클래스는 인덱스의 배열(indices)과 값의 배열(values)을 지정해 초기화한다
[0.1,0.0,0.0,0.0,0.3]
를 만들고 싶을 때는 인덱스의 배열(indices) new int[] { 0, 2 }
와 값의 배열(values) new double[] { 0.1, 0.5 }
SparseVector// SparseVector(疎ベクトル)
int size = 3;//ベクトルの要素サイズ
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()));
실행 결과SparseVector=[0.1, 0.0, 0.0, 0.0, 0.5]
Vector#toArray
로 배열할 수 있지만, 필요하지 않은 경우는 물론 소비되는 메모리는 indices(첨자의 배열)와 values(값의 배열)만 보관 유지되므로 메모리가 절약된다.
DenseVector(밀밀 벡터)란?
희소 벡터와 쌍을 이룹니다. 일반적인 배열과 마찬가지로 벡터 요소의 모든 값을 유지합니다.
[0.1,0.0,0.0,0.0,0.3]
Spark에서 DenseVector
DenseVecotr은 값의 배열 (values)을 지정하여 초기화합니다.
[0.1,0.0,0.0,0.0,0.3]
를 만들고 싶을 때는, 그 요소수의 배열 new double[] { 0.1, 0.0, 0.0, 0.0, 0.5 }
를 건네주어 만드는 것이 DenseVector(밀밀 벡터)
DenseVector// DenseVector(密ベクトル)
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()));
실행 결과DenseVector=[0.1, 0.0, 0.0, 0.0, 0.5]
풀 소스 코드 (Java)
Apache Spark를 Java에서 사용
SparkVectorExamples.javapackage 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(密ベクトル)
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(疎ベクトル)
int size = 5;// ベクトルの要素サイズ
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()));
}
}
실행 결과DenseVector=[0.1, 0.0, 0.0, 0.0, 0.5]
SparseVector=[0.1, 0.0, 0.0, 0.0, 0.5]
Reference
이 문제에 관하여(【Apache Spark에서 기계 학습】SparseVector(희소 벡터)와 DenseVector(밀밀 벡터)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/riversun/items/d19ab1c564bda96daa73
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
글쎄, Spark에서 희소 벡터를 만드는 방법은 간단합니다.
spark.ml 패키지의 org.apache.spark.ml.linalg.SparseVector를 사용한다.
SparseVector 클래스는 인덱스의 배열(indices)과 값의 배열(values)을 지정해 초기화한다
[0.1,0.0,0.0,0.0,0.3]
를 만들고 싶을 때는 인덱스의 배열(indices) new int[] { 0, 2 }
와 값의 배열(values) new double[] { 0.1, 0.5 }
SparseVector
// SparseVector(疎ベクトル)
int size = 3;//ベクトルの要素サイズ
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()));
실행 결과
SparseVector=[0.1, 0.0, 0.0, 0.0, 0.5]
Vector#toArray
로 배열할 수 있지만, 필요하지 않은 경우는 물론 소비되는 메모리는 indices(첨자의 배열)와 values(값의 배열)만 보관 유지되므로 메모리가 절약된다.DenseVector(밀밀 벡터)란?
희소 벡터와 쌍을 이룹니다. 일반적인 배열과 마찬가지로 벡터 요소의 모든 값을 유지합니다.
[0.1,0.0,0.0,0.0,0.3]
Spark에서 DenseVector
DenseVecotr은 값의 배열 (values)을 지정하여 초기화합니다.
[0.1,0.0,0.0,0.0,0.3]
를 만들고 싶을 때는, 그 요소수의 배열 new double[] { 0.1, 0.0, 0.0, 0.0, 0.5 }
를 건네주어 만드는 것이 DenseVector(밀밀 벡터)
DenseVector// DenseVector(密ベクトル)
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()));
실행 결과DenseVector=[0.1, 0.0, 0.0, 0.0, 0.5]
풀 소스 코드 (Java)
Apache Spark를 Java에서 사용
SparkVectorExamples.javapackage 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(密ベクトル)
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(疎ベクトル)
int size = 5;// ベクトルの要素サイズ
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()));
}
}
실행 결과DenseVector=[0.1, 0.0, 0.0, 0.0, 0.5]
SparseVector=[0.1, 0.0, 0.0, 0.0, 0.5]
Reference
이 문제에 관하여(【Apache Spark에서 기계 학습】SparseVector(희소 벡터)와 DenseVector(밀밀 벡터)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/riversun/items/d19ab1c564bda96daa73
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
DenseVecotr은 값의 배열 (values)을 지정하여 초기화합니다.
[0.1,0.0,0.0,0.0,0.3]
를 만들고 싶을 때는, 그 요소수의 배열 new double[] { 0.1, 0.0, 0.0, 0.0, 0.5 }
를 건네주어 만드는 것이 DenseVector(밀밀 벡터)DenseVector
// DenseVector(密ベクトル)
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()));
실행 결과
DenseVector=[0.1, 0.0, 0.0, 0.0, 0.5]
풀 소스 코드 (Java)
Apache Spark를 Java에서 사용
SparkVectorExamples.javapackage 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(密ベクトル)
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(疎ベクトル)
int size = 5;// ベクトルの要素サイズ
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()));
}
}
실행 결과DenseVector=[0.1, 0.0, 0.0, 0.0, 0.5]
SparseVector=[0.1, 0.0, 0.0, 0.0, 0.5]
Reference
이 문제에 관하여(【Apache Spark에서 기계 학습】SparseVector(희소 벡터)와 DenseVector(밀밀 벡터)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/riversun/items/d19ab1c564bda96daa73
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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(密ベクトル)
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(疎ベクトル)
int size = 5;// ベクトルの要素サイズ
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()));
}
}
DenseVector=[0.1, 0.0, 0.0, 0.0, 0.5]
SparseVector=[0.1, 0.0, 0.0, 0.0, 0.5]
Reference
이 문제에 관하여(【Apache Spark에서 기계 학습】SparseVector(희소 벡터)와 DenseVector(밀밀 벡터)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/riversun/items/d19ab1c564bda96daa73텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)