MLlib
数据类型
在PySpark的MLlib中,存在一些常用数据类型,主要用于支持机器学习场景:
- Vector
向量,包括稠密与稀疏两种存储方式,是MLlib中最常用到的数据类型之一。PySpark可以直接使用NumPy中的数组作为稠密向量,也可以通过Vectors.dense()将一个列表转为稠密向量。稀疏向量可以通过Vectors.sparse()生成,需要指定向量的长度,同时使用字典或列表声明非零位的值。
import numpy as np
from pyspark.mllib.linalg import Vectors
dense_vector1 = np.array([1, 2, 3])
dense_vector2 = Vectors.dense([4, 5, 6])
sparse_vector1 = Vectors.sparse(3, {0: 7, 1: 8})
sparse_vector2 = Vectors.sparse(3, [0, 2], [9, 10])
print(
f'''
Dense vector from NumPy: {dense_vector1}
Dense vector from PySpark: {dense_vector2}
Sparse vector from Dict: {sparse_vector1}
Sparse vector from List: {sparse_vector2}
'''
)
# output:
# Dense vector from NumPy: [1 2 3]
# Dense vector from PySpark: [4.0,5.0,6.0]
# Sparse vector from Dict: (3,[0,1],[7.0,8.0])
# Sparse vector from List: (3,[0,2],[9.0,10.0])
- LabeledPoint
标签,用于有监督学习任务,包含一个特征向量与一个标签。 - Rating
评分,是包含一个用户对一个产品的评分的三元组,在MLlib下的recommendation模块中,常用于个性化推荐算法。
from pyspark.mllib.recommendation import Rating
r = Rating('uid1', 1001, 4.5)
print(r.user, r.product, r.rating) # uid1 1001 4.5
- Model
算法模型,作为训练完成后的结果,可以通过predict()进行预测。
特征工程
数值特征
类别特征
StringIndexer
StringIndexer是