1. MLlib 简介 (Introduction)
MLlib 是 Spark 的可扩展机器学习库。它的目标是让实用的机器学习变得可扩展且容易。
它提供以下主要功能:
- ML 算法:常用的学习算法,如分类、回归、聚类和协同过滤。
- 特征化 (Featurization):特征提取、转换、降维和选择。
- 管道 (Pipelines):用于构建、评估和调整 ML 工作流的工具。
- 持久性:保存和加载算法、模型和管道。
2. 核心概念 (Core Concepts)
在 pyspark.ml 中,有三个核心抽象概念,理解它们是使用库的前提:
- Transformer (转换器):
- 一种算法,可以将一个 DataFrame 转换为另一个 DataFrame。
- 例如:ML 模型将 带有特征的 DataFrame 转换为 带有预测结果的 DataFrame。
- 核心方法:
.transform()
- Estimator (估计器):
- 一种算法,可以拟合(Fit)DataFrame 以生成 Transformer。
- 例如:学习算法(如逻辑回归)在训练数据上训练并生成模型。
- 核心方法:
.fit()
- Pipeline (管道):
- 将多个 Transformer 和 Estimator 链接在一起形成的工作流。
3. 环境准备 (Setup)
在开始之前,我们需要构建一个简单的 DataFrame 作为训练数据。MLlib 要求特征通常必须封装在 Vector(向量) 列中。
from pyspark.sql import SparkSession
from pyspark.ml.linalg import Vectors
spark = SparkSession.builder.appName("MLlib App").getOrCreate()
# 准备训练数据: (id, features, label)
# label: 1.0 代表正类, 0.0 代表负类
training_data = spark.createDataFrame([
(1.0, Vectors.dense([0.0, 1.1, 0.1]), 1.0),
(2.0, Vectors.dense([2.0, 1.0, -1.0]), 1.0),
(3.0, Vectors.dense([2.0, 1.3, 1.0]), 0.0),
(4.0, Vectors.dense([0.0, 1.2, -0.5]), 0.0)
], ["id", "features", "label"])