使用MLIB进行线性回归分析

在本文中,将探讨如何使用MLIB库构建一个端到端的线性回归模型,该模型能够预测客户在公司产品上的年消费额。将从一个完全虚拟的数据集开始,这个数据集是为了帮助理解使用MLIB构建连续数据模型的概念而生成的。

使用MLIB进行线性回归的必经步骤

在进入机器学习过程并遵循预测客户年消费的步骤之前,需要初始化Spark会话并读取虚拟数据集,这些数据集包含了所有相关特征。

from pyspark.sql import SparkSession spark = SparkSession.builder.appName('E-commerce').getOrCreate()

通过上述代码,成功导入了PySpark的SQL包中的SparkSession对象,并使用getOrCreate()函数创建了环境。在创建之前,使用builder函数构建它,并命名为“E-commerce”。

data = spark.read.csv("Ecommerce_Customers.csv",inferSchema=True,header=True)

在上述代码行中,读取了电子商务数据,并保持inferSchema参数为True,以便它返回数据集所具有的真实数据类型,并将header设置为True,以便记录的第一行被视为标题。

data.printSchema()

使用printSchema()函数显示数据集包含的每列的信息,通过查看输出,可以看到数据类型。

将通过三种不同的方式查看数据集,以便更精确地进行分析。

data.show()

show()函数返回数据的前20行。

data.head()

head()函数返回一个完整的记录/元组。

for item in data.head(): print(item)

通过for循环和head函数的组合,可以迭代每个项目,并以更清晰的版本显示Row对象的输出。

from pyspark.ml.regression import LinearRegression

将预测客户在产品上的年支出,因此需要处理连续数据,当处理这种类型的数据时,需要使用线性回归模型。

在本节中,将执行所有数据预处理技术,使数据集准备好进入ML管道,以便模型能够轻松适应并构建一个高效的模型。

from pyspark.ml.linalg import Vectors from pyspark.ml.feature import VectorAssembler

将查看数据集中哪些列存在,并使用describe方法获取更多信息。

data.columns

describe方法将帮助了解哪些列可以用于模型开发阶段,因为机器学习涉及数学计算,只有数字类型的列被接受。

assembler = VectorAssembler(   inputCols=["Avg Session Length", "Time on App",     "Time on Website",'Length of Membership'],   outputCol="features")

使用VectorAssembler方法将所有特征列堆叠在一起,并返回为“features”列。

output = assembler.transform(data)

Transform函数用于将实际数据与在assembler变量中使用VectorAssembler函数所做的更改相适应,以便更改反映在实际数据集中。

output.select("features").show()

使用select函数,仅从数据集中选择features列,并使用show()函数以DataFrame的形式显示。

final_data = output.select("features",'Yearly Amount Spent')

将依赖特征堆叠(命名为features)和独立特征一起连接,并命名为final_data,此框架将在后续过程中进一步分析。

在模型构建的这一步中,将数据分为训练集和测试集,训练数据将用于构建模型,而测试数据将用于测试模型的性能。

train_data,test_data = final_data.randomSplit([0.7,0.3])

使用随机分割方法将70%的数据存储在train_data中,30%的数据存储在test_data中。

train_data.describe().show() test_data.describe().show()

describe方法似乎是分析和比较训练和测试数据差异的准确方法,可以看到训练集中有349条记录,而测试集中有151条记录。

最后,来到了构建线性回归模型的步骤,使用LinearRegression对象,并将“Yearly Amount Spent”列传递给labelCol参数,这是独立列。

lr = LinearRegression(labelCol='Yearly Amount Spent')

现在,已经创建了Linear Regression对象,可以轻松地适应数据,即可以通过将训练数据传递到fit方法来进行模型训练。

lrModel = lr.fit(train_data)

让打印模型训练的每个特征的系数和截距,这是将了解模型如何单独涉及每个独立变量的信息之一。

print("Coefficients: {} Intercept: {}".format(lrModel.coefficients,lrModel.intercept))

系数:[25.324513354618116,38.880247333555445,0.20347373150823037,61.82593066961652] 截距:-1031.8607952442187

在这一步中,将评估模型,即将分析模型的性能,并在模型部署阶段决定是否使用现有的模型。

test_results = lrModel.evaluate(test_data)

对于了解线性回归背后的数学直觉的人来说,必须知道残差=原始结果-预测结果,即模型预测的标签列结果与原始结果之间的差异。

test_results.residuals.show()

现在是从模型中进行预测的时候了,首先存储未标记的数据,即特征数据,并将其转换,以便发生变化。

unlabeled_data = test_data.select('features') predictions = lrModel.transform(unlabeled_data) predictions.show()
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485