Spark机器学习MLlib系列1(for python)--数据类型,向量,分布式矩阵,API
关键词:Local vector,Labeled point,Local matrix,Distributed matrix,RowMatrix,IndexedRowMatrix,CoordinateMatrix,BlockMatrix。
前言:MLlib支持本地向量和存储在单机上的矩阵,当然也支持被存储为RDD的分布式矩阵。一个有监督的机器学习的例子在MLlib里面叫做标签点。
1. 本地向量
一个本地向量是由整数类型和从0开始的索引存储在单机上
。MLlib支持两种本地向量,稠密向量和稀疏向量。稠密向量由一个浮点数组表示它的的所有值,而一个稀疏矩阵由两个平行的数组组成,索引和值。举个例子,一个向量,(1.0,0.0,3.0)能个用稠密表现为[1.0,0.0,3.0] 或者以稀疏的形式表现为(3,[0,2],[1.0,3.0]),3是这个向量的大小。(本人注解:3为长度,即是元素个数,[0,2]为索引,[1.0,3.0],为值)
1.1MLlib认为如下数据类型是稠密向量:
~NumPys array
~Python list
1.2MLlib认为如下数据类型是稀疏向量:
~MLlib’s SparseVector.
~SciPy’s csc_matrix with a single colum
为了效率,我们推荐使用Numpy arrays ,并使用工厂方法继承Vectors 来创建稀疏矩阵。
import numpy as np
import scipy.sparse as sps
from pyspark.mllib.linalg import Vectors
# Use a NumPy array as a dense vector.
dv1 = np.array([1.0, 0.0, 3.0])
# Use a Python list as a dense vector.
dv2 = [1.0, 0.0, 3.0]
# Create a SparseVector.
sv1 = Vectors.sparse(3, [0, 2], [1.0, 3.0])
# Use a single-column SciPy csc_matrix as a sparse vector.
sv2 = sps.csc_matrix((np.array([1.0, 3.0]), np.array([0, 2]), np.array([0, 2])), shape = (3, 1))
2.标签点
标签点可以是一个本地的向量,可以是稀疏的也可以是稠密的,总之他们是带有标签的。在MLlib中,标签点用来进行有监督的学习算法。我们使用双精度数来存储一个标签,这样我们既可以用标签点做分类,也可以用来做回归了。对于二分法,一个标签应该不是0就是1。对于多种分类,标签应该是索引从0,1,2,3….
一个标签点用LabelPoint来表示。
from pyspark.mllib.linalg import SparseVector
from pyspark.mllib.regression import LabeledPoint
# Create a labeled point with a positive label and a dense feature vector.
pos = LabeledPoint(