📜  派斯帕克 |使用 Apache MLlib 的高级特征数据集的线性回归(1)

📅  最后修改于: 2023-12-03 15:26:58.461000             🧑  作者: Mango

派斯帕克 |使用 Apache MLlib 的高级特征数据集的线性回归

简介

Apache Spark是一个强大的分布式计算框架,旨在处理大规模数据处理。Apache MLlib是Spark 的机器学习库。它提供了各种算法和工具,它可以轻松地与Spark的分布式计算能力集成,使其最适合大规模数据集。

本文将介绍如何在Spark中使用MLlib库进行线性回归,使用高级特征数据集。

准备工作

在开始使用MLlib之前,您需要有一个已经安装好的Spark集群,以及一个包含您要读取、分析的数据的文件。您可以在Spark官网上找到安装说明,并且也可以使用与您的数据类型匹配且支持读取您文件格式的Apache Spark DataSource。

构建特征数据集

MLlib使用“特征”来描述数据。您需要在将数据送入线性回归模型之前,先将数据转换为Spark支持的特征类型。在这里,我们将创建一个高级特征数据集。高级特征数据集使数据的转换更加容易,并且可以自动执行一些必要的预处理操作。

为了演示这一点,我们将使用一个名为“Advertising”的数据集。该数据集包含每个城市中的电视、广播和报纸广告的支出以及其他信息。我们将使用这个数据集来构建我们的特征数据集。

from pyspark.ml.feature import *
from pyspark.sql.functions import *
from pyspark.sql.types import *

schema = StructType([
    StructField("id", IntegerType(), True),
    StructField("TV", FloatType(), True),
    StructField("Radio", FloatType(), True),
    StructField("Newspaper", FloatType(), True),
    StructField("Sales", FloatType(), True),
])

data = [
    [1, 230.1, 37.8, 69.2, 22.1],
    [2, 44.5, 39.3, 45.1, 10.4],
    [3, 17.2, 45.9, 69.3, 9.3],
    [4, 151.5, 41.3, 58.5, 18.5],
]

df = spark.createDataFrame(data, schema)

assembler = VectorAssembler(
    inputCols=["TV", "Radio", "Newspaper"],
    outputCol="features"
)

dataset = assembler.transform(df.selectExpr("*"))

创建特征数据集需要使用VectorAssembler将数据集中的特征列放到一个名为“features”的新列中。在上面的代码中,我们将“TV”、“Radio”和“Newspaper”三列放在一起。

最后,我们将数据集转换为DataFrame,以进行后续处理。

建立线性回归模型

数据集转换完成后,即可将其输入到线性回归模型中。首先,我们需要将数据划分为训练集和测试集。

(trainingData, testData) = dataset.randomSplit([0.8, 0.2])

然后,我们可以使用LinearRegression类来建立线性回归模型。

from pyspark.ml.regression import LinearRegression

lr = LinearRegression(featuresCol="features", labelCol="Sales")
model = lr.fit(trainingData)

我们已经定义了线性回归模型和特征数据集,现在我们可以训练模型了。训练后,我们可以使用测试数据来测试模型的性能。

predictions = model.transform(testData)

最后,我们可以使用LinearRegressionSummary类来计算模型的性能指标,例如R方值。

from pyspark.ml.evaluation import RegressionEvaluator

evaluator = RegressionEvaluator(labelCol="Sales", predictionCol="prediction", metricName="r2")
r2 = evaluator.evaluate(predictions)

print("R squared: %f" % r2)

在这段代码中,我们使用RegressionEvaluator类来计算R方。R方的范围是0到1,R方越接近1,则模型的拟合效果越好。

结论

通过使用高级特征数据集和Apache MLlib,我们可以很容易地使用Spark中的分布式能力来实现线性回归模型,并对模型的性能进行评估。Spark的分布式能力使得处理大规模数据集的线性回归问题变得非常容易,可以同时处理数千万行和列。