在本文中,将探索如何使用PySpark的MLIB库来执行机器学习任务。MLIB库是PySpark的机器学习库,它提供了与Scikit-learn相似的机器学习算法。将通过一个完整的机器学习流程,包括数据读取、特征处理、模型训练和预测,来展示如何使用这个库。
在使用PySpark之前,需要设置并启动Spark会话。首先,需要从pyspark.sql包中导入SparkSession函数。
from pyspark.sql import SparkSession
df_ml = SparkSession.builder.appName('机器学习示例').getOrCreate()
通过使用builder函数构建会话,并使用appName函数命名会话,最后使用getOrCreate()函数创建会话。
在读取数据之前,先了解一下数据集。这个数据集是来自Kaggle的银行票据认证数据集,包含了真实票据和假票据的统计信息。
特征列包括方差、偏度、峰度和熵,目标列是目标值。创建并设置SparkSession后,读取数据集并应用机器学习操作和数据预处理技术。
training_dataset = df_ml.read.csv('/content/bank_notes.csv', header=True, inferSchema=True)
使用read.csv()函数读取CSV格式的数据集,并设置header为True以获取列名,设置inferSchema为True以获取每列的真实数据类型。
使用show()函数,可以查看数据集的前20行。
training_dataset.show()
通过printSchema()函数,可以查看数据集的模式,即每列的数据类型和是否包含空值。
training_dataset.printSchema()
使用columns对象,可以查看数据集中有多少列,并以列表格式返回。
training_dataset.columns
特征向量组装器是一个工具,它将所有特征列合并为一个列,即向量类型。这样,只需要处理一个列,因为它包含了所有需要训练模型的数据。
from pyspark.ml.feature import VectorAssembler
featassembler = VectorAssembler(inputCols=["variance", "skewness", "curtosis", "entropy"], outputCol="独立特征")
首先,从pyspark.ml.feature库中导入VectorAssembler。然后,使用VectorAssembler将特征列堆叠在一起。
将使用transform()方法将独立特征列添加到原始数据集中。
result = featassembler.transform(training_dataset)
result.show()
通过transform()方法,成功地将独立特征列添加到了数据集的最后一列。
在机器学习流程中,训练测试集分割是一个重要的步骤,它可以帮助避免模型过拟合。将使用randomSplit()函数将数据集分为训练集和测试集。
train_data, test_data = final_data.randomSplit([0.75, 0.25])
使用randomSplit()函数将数据分为75%的训练数据和25%的测试数据。
现在已经分割了数据集,并且有了训练集,可以基于训练集构建模型,然后测试模型在测试数据上的表现。由于这是一个回归问题,将使用线性回归算法。
from pyspark.ml.regression import LinearRegression
model = LinearRegression(featuresCol='独立特征', labelCol='目标')
model = model.fit(train_data)
从pyspark.ml.regression包中导入LinearRegression算法,并定义独立特征和目标列。然后,使用fit方法将训练数据拟合到创建的模型中。
prediction_result = model.evaluate(test_data)
prediction_result.predictions.show()