データタイプ - RDDベースのAPI
MLlib は一つのマシーン上で格納されたローカルベクトルとマトリックスをサポートとし、1つ以上のRDDによって分散型マトリックスによって支援されます。ローカルベクトルとローカルマトリックスは公開インタフェースとして提供する単純なデータモデルです。基礎となる線形代数操作は Breeze によって提供されます。管理される学習の訓練の例はMLlibでは"ラベル付きの点"と呼ばれます。
ローカルベクトル
ローカルベクトルは一つのマシーン上で保存された整数値型および0ベースのインデックスとdouble型の値を持ちます。MLlibは2つの種類のローカルベクトルをサポートします: dense と sparse。dense ベクトルはそのエントリー値を表すdoubleの配列によって支援されますが、sparseベクトルは2つの配列: インデックスと値 によって支援されます。例えば、ベクトル (1.0, 0.0, 3.0)
は [1.0, 0.0, 3.0]
としてdense形式、あるいは (3, [0, 2], [1.0, 3.0])
3
はベクトルのサイズとしてsparse形式で表すことができます。
ローカルベクトルのベースクラスは Vector
で、2つの実装を提供します: DenseVector
と SparseVector
です。ローカルベクトルを生成するにはVectors
で実装されているファクトリーメソッドを使うことをお勧めします。
APIの詳細はVector
Scala ドキュメント および Vectors
Scala ドキュメント を参照してください。
注意: Scala はデフォルトでscala.collection.immutable.Vector
をimportするため、MLlibのVector
を使うには明示的にorg.apache.spark.mllib.linalg.Vector
をimportする必要があります。
ローカルベクトルのベースクラスは Vector
で、2つの実装を提供します: DenseVector
と SparseVector
です。ローカルベクトルを生成するにはVectors
で実装されているファクトリーメソッドを使うことをお勧めします。
APIの詳細はVector
Java ドキュメント および Vectors
Java ドキュメント を参照してください。
MLlib は dense ベクトルとして以下のタイプを認識します。
- NumPy の
配列
- Pythonのリスト、例えば
[1, 2, 3]
そして、以下はsparseベクトルです:
- MLlib の
SparseVector
. - 一つのカラムを持つ SciPy の
csc_matrix
効率のためにリスト上のNumPy配列を使うことをお勧めします。sparseベクトルを生成するにはVectors
で実装されているファクトリーメソッドを使うことをお勧めします。
APIの詳細はVectors
Python ドキュメント を参照してください。
ラベル付きの点
ラベル付きの点はローカルベクトル、denseあるいはsparseのどちらか、label/response に関係しています。MLlibでは、ラベル付きの点は管理されている学習アルゴリズムで使用されます。ラベルを格納するためにdoubleを使うため、ラベル付きの点を回帰と分類の両方で使うことができます。2値分類のためには、ラベルは 0
(否定) あるいは 1
(肯定)のどちらかでなければなりません。多層分類のためには、ラベルはゼロから始まる分類インデックスでなければなりません: 0, 1, 2, ...
。
ラベル付きの点は LabeledPoint
の場合クラスによって表されます。
APIの詳細はLabeledPoint
Scala ドキュメント を参照してください。
ラベル付きの点は LabeledPoint
によって表されます。
APIの詳細はLabeledPoint
Java ドキュメント を参照してください。
ラベル付きの点は LabeledPoint
によって表されます。
APIの詳細はLabeledPoint
Python ドキュメント を参照してください。
希薄なデータ
実際においてsparse訓練データを持つことは良くある事です。MLlib はLIBSVM
形式で保存された訓練データの読み込みをサポートし、これはLIBSVM
および LIBLINEAR
によって使われるデフォルトの形式です。各行は以下の形式を使ったラベル付きのsparse特徴ベクトルのテキスト形式です:
label index1:value1 index2:value2 ...
ここでインデックスは1から始まる昇順です。ロードした後で特徴インデックスはゼロから始まるように変換されます。
MLUtils.loadLibSVMFile
はLIBSVM形式で格納された訓練の例を読み込みます。
APIの詳細はMLUtils
Scala ドキュメント を参照してください。
MLUtils.loadLibSVMFile
はLIBSVM形式で格納された訓練の例を読み込みます。
APIの詳細はMLUtils
Java ドキュメント を参照してください。
MLUtils.loadLibSVMFile
はLIBSVM形式で格納された訓練の例を読み込みます。
APIの詳細はMLUtils
Python ドキュメント を参照してください。
ローカル マトリックス
ローカルマトリックスは一つのマシーン上で格納された、整数型の行とカラムインデックスとdouble型の値を持ちます。MLlibは、各値が1x2の列優先順序で格納されている密行列と、非ゼロの値が列優先順序の Compressed Sparse Column (CSC)形式で格納されている疎行列をサポートします。例えば、以下の密行列 \[ \begin{pmatrix} 1.0 & 2.0 \\ 3.0 & 4.0 \\ 5.0 & 6.0 \end{pmatrix} \]
は(3, 2)
のマトリックスサイズを持つ一次元の配列 [1.0, 3.0, 5.0, 2.0, 4.0, 6.0]
に保持されます。
ローカルマトリックスの基本クラスは Matrix
で、2つの実装を提供します: DenseMatrix
, および SparseMatrix
。ローカルマトリックスを生成するには Matrices
で実装されているファクトリーメソッドを使うことをお勧めします。MLlibのローカルマトリックスはcolumn-major順に格納されていることを思い出してください。
APIの詳細はMatrix
Scala ドキュメント および Matrices
Scala ドキュメント を参照してください。
ローカルマトリックスの基本クラスは Matrix
で、2つの実装を提供します: DenseMatrix
, および SparseMatrix
。ローカルマトリックスを生成するには Matrices
で実装されているファクトリーメソッドを使うことをお勧めします。MLlibのローカルマトリックスはcolumn-major順に格納されていることを思い出してください。
APIの詳細はMatrix
Java ドキュメント および Matrices
Java ドキュメント を参照してください。
ローカルマトリックスの基本クラスは Matrix
で、2つの実装を提供します: DenseMatrix
, および SparseMatrix
。ローカルマトリックスを生成するには Matrices
で実装されているファクトリーメソッドを使うことをお勧めします。MLlibのローカルマトリックスはcolumn-major順に格納されていることを思い出してください。
APIについての詳細はMatrix
Python ドキュメント およびMatrices
Python ドキュメントを参照してください。
分散型マトリックス
分散型マトリックスはlong型の行とdouble型の値を持ち、分散して一つ以上のRDDに格納されます。大きく分散したマトリックスを格納するには正しい形式を選択することがとても重要です。分散されたマトリックスの異なる形式への変換はグローバルシャッフルを必要とし、これはとても高価なものとなります。今のところ4つの種類の分散型マトリックスが実装されています。
基本タイプは RowMatrix
と呼ばれます。RowMatrix
は意味を持たない行インデックスの行指向の分散型マトリックスです。例えば、特徴ベクトルのコレクション。それはその行のRDDによって支援され、各行はローカルベクトルです。RowMatrix
に関してカラムの数がそれほど大きくないと仮定し、1つのローカルベクトルはドライバーと合理的に通信可能であり、1つのノードを使って格納/操作が可能でしょう。IndexedRowMatrix
はRowMatrix
に似ていますが、行のインデックスを持ち、それは行の指定とjoinの実行のために使うことができます。CoordinateMatrix
はcoordinate list (COO) 形式で保持される分散型マトリックスで、そのエントリのRDDによって支援されています。BlockMatrix
は(Int, Int, Matrix)
のタプルであるMatrixBlock
のRDDによって支援される分散型マトリックスです。
注意
マトリックスのサイズをキャッシュするため、分散マトリックのRDDの背景は決定的でなければなりません。一般的に決定的ではないRDDの使用はエラーにつながります。
RowMatrix
RowMatrix
は意味を持たない行インデックスの行指向の分散型マトリックスで、その行はRDDによって支援され、各行はローカルベクトルを持ちます。 各行はローカルベクトルによって表されるため、行数は整数の範囲に収まりますが、実際にはもっと小さくなければなりません。
RowMatrix
はRDD[Vector]
インスタンスから生成することができます。そして、その行のsummary統計と分解を計算することができます。QR decomposition は A = QR の形をしていて、Q は直行マトリックスでRは上三角マトリックスです。特異値分解 (SVD) と 主成分分析 (PCA)については、次元削減を参照してください。
APIの詳細はRowMatrix
Scala ドキュメント を参照してください。
RowMatrix
は JavaRDD<Vector>
インスタンスから生成することができます。そして、その行のsummary統計を計算することができます。
APIの詳細はRowMatrix
Java ドキュメント を参照してください。
RowMatrix
はベクトルのRDD
から生成することができます。
APIの詳細はRowMatrix
Python ドキュメント を参照してください。
IndexedRowMatrix
IndexedRowMatrix
はRowMatrix
に似ていますが、意味のある行インデックスを持ちます。それはインデックスされた行のRDDによって支援され、各行はインデックス(long型)とローカルベクトルによって表されます。
IndexedRowMatrix
はRDD[IndexedRow]
インスタンスから生成することができ、 IndexedRow
は (Long, Vector)
をラップします。IndexedRowMatrix
は行のインデックスを落とすことで RowMatrix
に変換することができます。
APIの詳細はIndexedRowMatrix
Scala ドキュメント を参照してください。
IndexedRowMatrix
は JavaRDD<IndexedRow>
インスタンスから生成することができ、IndexedRow
は (long, Vector)
をラップします。IndexedRowMatrix
は行のインデックスを落とすことで RowMatrix
に変換することができます。
APIの詳細はIndexedRowMatrix
Java ドキュメント を参照してください。
IndexedRowMatrix
はIndexedRow
のRDD
から生成することができ、 IndexedRow
は (long, vector)
をラップします。IndexedRowMatrix
は行のインデックスを落とすことで RowMatrix
に変換することができます。
APIの詳細はIndexedRowMatrix
Python ドキュメント を参照してください。
CoordinateMatrix
CoordinateMatrix
はエントリのRDDによって支援される分散型マトリックスです。各円取りは (i: Long, j: Long, value: Double)
のタプルで、i
は行インデックスで、j
はカラムのインデックスで、value
はエントリの値です。CoordinateMatrix
はマトリックスの次元が大きくマトリックスがとてもまばらな時に使うべきです。
CoordinateMatrix
は RDD[MatrixEntry]
インスタンスから生成することができ、MatrixEntry
は (Long, Long, Double)
のラッパーです。CoordinateMatrix
はtoIndexedRowMatrix
を呼び出すことでまばらな行を持つ IndexedRowMatrix
に変換することができます。CoordinateMatrix
のための他の計算は現在のところサポートされていません。
APIの詳細はCoordinateMatrix
Scala ドキュメント を参照してください。
CoordinateMatrix
はJavaRDD<MatrixEntry>
インスタンスから生成することができ、 MatrixEntry
は (long, long, double)
をラップします。CoordinateMatrix
はtoIndexedRowMatrix
を呼び出すことでまばらな行を持つ IndexedRowMatrix
に変換することができます。CoordinateMatrix
のための他の計算は現在のところサポートされていません。
APIの詳細はCoordinateMatrix
Java ドキュメント を参照してください。
CoordinateMatrix
は MatrixEntry
エントリのRDD
から生成することができ、 MatrixEntry
は(long, long, float)
のラッパーです。CoordinateMatrix
は toRowMatrix
を呼び出すことで RowMatrix
に変換することができ、あるいはtoIndexedRowMatrix
を呼び出すことでまばらな行を持つIndexedRowMatrix
に変換することができます。
APIの詳細はCoordinateMatrix
Python ドキュメント を参照してください。
BlockMatrix
BlockMatrix
はMatrixBlock
のRDDによって支援される分散型マトリックスで、MatrixBlock
は((Int, Int), Matrix)
のタプルで、(Int, Int)
はブロックのインデックスで、Matrix
はサイズが rowsPerBlock
x colsPerBlock
の指定されたインデックスの部分マトリックスです。BlockMatrix
は 他のBlockMatrix
とのadd
および multiply
のようなメソッドをサポートします。BlockMatrix
はBlockMatrix
が適切にセットアップされたかどうかをチェックするために使用することができる ヘルパー関数validate
も持ちます。
BlockMatrix
は toBlockMatrix
を呼び出すことでIndexedRowMatrix
あるいはCoordinateMatrix
から最も簡単に生成することができます。toBlockMatrix
はデフォルトで 1024 x 1024 のサイズのブロックを生成します。ユーザは toBlockMatrix(rowsPerBlock, colsPerBlock)
を使って値を渡すことでブロックサイズを変更するかも知れません。
APIの詳細はBlockMatrix
Scala ドキュメント を参照してください。
BlockMatrix
は toBlockMatrix
を呼び出すことでIndexedRowMatrix
あるいはCoordinateMatrix
から最も簡単に生成することができます。toBlockMatrix
はデフォルトで 1024 x 1024 のサイズのブロックを生成します。ユーザは toBlockMatrix(rowsPerBlock, colsPerBlock)
を使って値を渡すことでブロックサイズを変更するかも知れません。
APIの詳細はBlockMatrix
Java ドキュメント を参照してください。
BlockMatrix
は部分マトリックスのブロックRDD
から生成することができ、部分マトリックスのブロックは((blockRowIndex, blockColIndex), sub-matrix)
タプルです。
APIの詳細はBlockMatrix
Python ドキュメント を参照してください。