使用PySpark构建和评估逻辑回归模型预测质量是否合格

简介: 使用PySpark构建和评估逻辑回归模型预测质量是否合格

使用PySpark构建和评估逻辑回归模型预测质量是否合格

随着数据量的不断增长,传统的数据处理工具已经难以满足需求。PySpark作为大数据处理框架Apache Spark的Python API,为大规模数据处理和机器学习提供了强有力的支持。本文将详细介绍如何使用PySpark进行机器学习模型的构建和评估。

1. 环境配置与数据导入

首先,我们需要进行必要的环境配置,并导入所需的库。

from pyspark.sql import SparkSession

# 创建 SparkSession
spark = SparkSession\
    .builder\
    .appName("model_train")\
    .master("local[*]")\
    .getOrCreate()

# 读取 CSV 文件
file_path = "data.csv"
df = spark.read.csv(file_path, header=True, inferSchema=True, encoding='gbk')
columns = ["TreeSpecies", "SampleID", "SamplingDate", "SamplingLocation", "SampledUnit", "SampledUnitAddress", "IsQualified", "InspectionType"]
df = df.toDF(*columns)

# 查看数据
df.show()
df.printSchema()

在上述代码中,我们创建了一个SparkSession并从CSV文件中加载数据。

2. 数据可视化

在进行机器学习模型训练前,数据预处理是一个关键步骤。我们需要对数据可视化分析,来明确接下来的操作。

import matplotlib.pyplot as plt
import seaborn as sns
source_df=df.toPandas()
# 设置 Seaborn 风格
sns.set(style="whitegrid")

plt.rcParams['font.family'] = 'Arial Unicode MS'

# 创建一个 2x2 的图表布局
fig, axs = plt.subplots(2, 2, figsize=(14, 10))

sns.histplot(source_df['TreeSpecies'], kde=True, ax=axs[0, 0], color='blue')
axs[0, 0].set_title('Tree Species Distribution')

sns.histplot(source_df['InspectionType'], kde=True, ax=axs[0, 1], color='green')
axs[0, 1].set_title('Inspection Type Distribution')

sns.histplot(source_df['SampleID'], kde=True, ax=axs[1, 0], color='red')
axs[1, 0].set_title('SampleID Distribution')

sns.histplot(source_df['IsQualified'], kde=True, ax=axs[1, 1], color='purple')
axs[1, 1].set_title('Is Qualified Distribution')

plt.tight_layout()

# 显示图表
plt.show()

3. 数据预处理

在进行机器学习模型训练前,数据预处理是一个关键步骤。我们需要对数据进行清洗和特征工程。

from pyspark.sql.functions import col, when
from pyspark.ml.feature import StringIndexer, OneHotEncoder, StandardScaler, VectorAssembler
from pyspark.ml import Pipeline
df = df.fillna({"IsQualified": "不合格"})

# 将目标列(IsQualified)转换为数值类型
indexer = StringIndexer(inputCol="IsQualified", outputCol="label")

# 对类别特征进行one-hot编码
string_columns = ["TreeSpecies", "SamplingLocation", "SampledUnit"]
indexers = [StringIndexer(inputCol=col, outputCol=col+"_index") for col in string_columns]
encoders = [OneHotEncoder(inputCol=col+"_index", outputCol=col+"_vec") for col in string_columns]

# 特征向量化
assembler = VectorAssembler(inputCols=[col+"_vec" for col in string_columns], outputCol="features")

# 标准化
scaler = StandardScaler(inputCol="features", outputCol="scaled_features")

# 构建处理管道
pipeline = Pipeline(stages=indexers + encoders + [assembler, scaler, indexer])
model = pipeline.fit(df)
processed_df = model.transform(df)

# 查看处理后的数据
processed_df.select("features", "scaled_features", "label").show()

3. 模型训练与评估

接下来,我们将数据集划分为训练集和测试集,并使用逻辑回归模型进行训练和评估。

from pyspark.ml.classification import LogisticRegression
from pyspark.ml.evaluation import BinaryClassificationEvaluator
from pyspark.ml.tuning import ParamGridBuilder, CrossValidator

# 划分训练集和测试集
train_df, test_df = processed_df.randomSplit([0.8, 0.2], seed=12345)

# 逻辑回归模型
lr = LogisticRegression(featuresCol="scaled_features", labelCol="label")

# 超参数调优
param_grid = ParamGridBuilder() \
    .addGrid(lr.regParam, [0.01, 0.1, 1.0]) \
    .addGrid(lr.elasticNetParam, [0.0, 0.5, 1.0]) \
    .build()

# 交叉验证
crossval = CrossValidator(estimator=lr,
                          estimatorParamMaps=param_grid,
                          evaluator=BinaryClassificationEvaluator(),
                          numFolds=5)

# 训练模型
cv_model = crossval.fit(train_df)

# 评估模型
predictions = cv_model.transform(test_df)
evaluator = BinaryClassificationEvaluator()
accuracy = evaluator.evaluate(predictions)
print(f"Test Accuracy: {accuracy:.4f}")

结论

本文介绍了如何使用PySpark进行数据预处理、模型训练和评估。PySpark作为一个强大的大数据处理工具,能够有效地处理大规模数据,并应用机器学习算法进行建模和分析。希望通过这篇文章,能够帮助你更好地理解和使用PySpark进行机器学习项目。

相关文章
|
3月前
|
机器学习/深度学习 存储 运维
机器学习异常检测实战:用Isolation Forest快速构建无标签异常检测系统
本研究通过实验演示了异常标记如何逐步完善异常检测方案和主要分类模型在欺诈检测中的应用。实验结果表明,Isolation Forest作为一个强大的异常检测模型,无需显式建模正常模式即可有效工作,在处理未见风险事件方面具有显著优势。
227 46
|
6月前
|
人工智能 前端开发 程序员
通义灵码 AI 程序员与开发者结伴编程,全栈开发电商工程的前后端功能需求
当你又收到了项目新需求的时候,可以尝试下载并使用通义灵码,让通义灵码 AI 程序员跟你一起结伴编程,它具备多文件代码修改和工具使用的能力,可以与你结伴协同完成编码任务,如需求实现、缺陷修复、单元测试生成、批量代码修改等,成为你的左膀右臂。下面我们就跟AI程序员结伴编程完成前后端需求的开发吧!
427 1
|
分布式计算 大数据 API
|
3月前
|
人工智能 数据可视化 Devops
敏捷VS瀑布?敏捷项目管理方法论全解析:从核心逻辑到工具适配
本文深入解析了四大主流敏捷项目管理方法论:Scrum、Kanban、Lean和SAFe,分别阐述其核心逻辑、适用场景及典型工具。Scrum适合需求多变的中小型项目,强调迭代开发;Kanban通过可视化优化流程,适用于非迭代任务;Lean聚焦价值流优化,适于效率提升场景;SAFe为大型组织提供分层协作框架。文章对比各方法的特点与工具需求,并展望AI技术对敏捷管理的革新,为企业选择适配的方法与工具提供了理论与实践指导。
|
6月前
|
人工智能 自然语言处理 API
Dify 接入通义万象指南
Dify Pipeline集成通义万象, 实现自动化图像生成流程,包含基础流程和完整代码实现。
2274 63
|
12月前
|
存储 算法 索引
从菜鸟到大神:一文带你彻底搞懂Python中的后缀树Suffix Tree奥秘!
在Python编程中,后缀树是一种高效的数据结构,特别适用于处理复杂的字符串问题,如搜索、最长公共前缀查询及最长重复子串查找等。本文通过问答形式介绍后缀树的基本概念、重要性及其实现方法。后缀树能显著提高字符串处理效率,将传统方法的时间复杂度从O(nm)降至接近O(m)。尽管其构建过程较复杂,但通过手动编写代码或使用第三方库,我们可以在Python中实现这一强大工具。后缀树的应用广泛,涵盖字符串搜索、压缩、生物信息学等多个领域,学习它不仅能帮助解决实际问题,更能提升算法思维和数据结构设计能力。
288 1
|
数据可视化 Python
【100天精通Python】Day65:Python可视化_Matplotlib3D绘图mplot3d,绘制3D散点图、3D线图和3D条形图,示例+代码
【100天精通Python】Day65:Python可视化_Matplotlib3D绘图mplot3d,绘制3D散点图、3D线图和3D条形图,示例+代码
712 0
|
存储 PyTorch 算法框架/工具
Transformers 4.37 中文文档(九十)(2)
Transformers 4.37 中文文档(九十)
249 0
|
机器学习/深度学习 算法 Python
在Python中,独热编码(One-Hot Encoding)
在Python中,独热编码(One-Hot Encoding)
1339 8
|
机器学习/深度学习 数据可视化 Serverless
4种SVM主要核函数及相关参数的比较
本文将用数据可视化的方法解释4种支持向量机核函数和参数的区别
422 1