ZxqSoftWare 2018-08-10
虽然,我们将不会在本文中使用分布式数据,但我们将使用Python,Spark和MLlib构建线性回归模型,以便在处理大数据时我们可以对机器学习有直觉。
让我们从构建Spark会话开始,
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('lrex').getOrCreate()
现在,从pyspark开始,让我们导入线性回归函数,就像我们对scikit-learn库一样,
from pyspark.ml.regression import LinearRegression
要获取数据,请按照下列步骤操作:
然后,让我们加载数据。我们将以libsvm格式读取.txt文件,因为数据的结构是这样的。
# Load training data
training_data = spark.read.format("libsvm").load("./sample_linear_regression_data.txt")
这是加载后数据的样子。
training_data.show()
我来解释一下这两栏:
数据的格式是Spark实际需要学习机器学习算法的原因。但是,在实际情况下,数据不会以这种形式格式化,因此需要进行一些数据预处理。但是,通过这个示例数据集,我们可以跳过它,因为它已经完成预处理了。
现在,让我们使用给定的列创建模型的实例,并为我们的预测实例化一个名为column的预测。
lin_reg=LinearRegression(featuresCol='features',labelCol='label',predictionCol='prediction')
然后拟合模型(记住这可能需要一些时间来查看各种情况下数据集的大小),
lin_reg_model = lin_reg.fit(training_data)
我们可以通过两个简单的调用来查看系数和截距。
lin_reg_model.coefficients
lin_reg_model.intercept
有关模型的更多摘要,请尝试运行这些:
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
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()
这就是你如何预测未经标记数据的训练模型。