使用Python,Spark和MLlib执行线性回归以处理大数据

虽然,我们将不会在本文中使用分布式数据,但我们将使用Python,Spark和MLlib构建线性回归模型,以便在处理大数据时我们可以对机器学习有直觉。

让我们从构建Spark会话开始,

from pyspark.sql import SparkSession

spark = SparkSession.builder.appName('lrex').getOrCreate()

现在,从pyspark开始,让我们导入线性回归函数,就像我们对scikit-learn库一样,

from pyspark.ml.regression import LinearRegression

要获取数据,请按照下列步骤操作:

  • 请访问:https://raw.githubusercontent.com/apache/spark/master/data/mllib/sample_linear_regression_data.txt
  • 右键单击并选择“另存为...”。
  • 将.txt文件保存在python的 script/ipynb 目录中。

然后,让我们加载数据。我们将以libsvm格式读取.txt文件,因为数据的结构是这样的。

# Load training data

training_data = spark.read.format("libsvm").load("./sample_linear_regression_data.txt")

这是加载后数据的样子。

training_data.show()

使用Python,Spark和MLlib执行线性回归以处理大数据

我来解释一下这两栏:

  • label:具有回归数值
  • feature:具有属于该行的所有特征的向量

数据的格式是Spark实际需要学习机器学习算法的原因。但是,在实际情况下,数据不会以这种形式格式化,因此需要进行一些数据预处理。但是,通过这个示例数据集,我们可以跳过它,因为它已经完成预处理了。

现在,让我们使用给定的列创建模型的实例,并为我们的预测实例化一个名为column的预测。

lin_reg=LinearRegression(featuresCol='features',labelCol='label',predictionCol='prediction')

然后拟合模型(记住这可能需要一些时间来查看各种情况下数据集的大小),

lin_reg_model = lin_reg.fit(training_data)

我们可以通过两个简单的调用来查看系数和截距。

lin_reg_model.coefficients

使用Python,Spark和MLlib执行线性回归以处理大数据

lin_reg_model.intercept

使用Python,Spark和MLlib执行线性回归以处理大数据

有关模型的更多摘要,请尝试运行这些:

lin_reg_model.summary.rootMeanSquaredError

lin_reg_model.summary.r2

这是使用Python对Spark和MLlib执行线性回归的方法。

接下来介绍如何从模型中获取预测以及如何评估模型。

首先,让我们对数据进行一次训练测试,以便我们实际拥有一些测试集。

# Load the data

data = spark.read.format("libsvm").load("./sample_linear_regression_data.txt")

# Split the data

split_data = data.randomSplit([0.8,0.2])

split_data

使用Python,Spark和MLlib执行线性回归以处理大数据

split_data变量现在包含两个数据帧的列表:第一个具有80%的数据,另一个具有20%的数据。

让我们执行一个元组解包来获取两个数据帧,

train_data,test_data = split_data

您可以调用train_data.show()或test_data.show()来查看dataframes的样子。是时候根据训练数据调整我们的模型了。

model = lin_reg.fit(train_data)

然后,从模型中调用evaluate方法将有助于我们了解我们的模型在预测测试数据方面的表现。

result = model.evaluate(test_data)

像以前一样,您可以从结果变量中调用多个函数来查看不同的摘要。

result.rootMeanSquaredError

...

现在,我们如何从测试数据中获取我们的功能,然后存储预测?我们将使用transform函数。

predictions = model.transform(test_data.select('features'))

predictions.show()

使用Python,Spark和MLlib执行线性回归以处理大数据

这就是你如何预测未经标记数据的训练模型。

相关推荐