Spark MLlib 机器学习详解

目录

🍉引言

🍉Spark MLlib 简介

🍈 主要特点

🍈常见应用场景

🍉安装与配置

🍉数据处理与准备

🍈加载数据

🍈数据预处理

🍉分类模型

🍈逻辑回归

🍈评价模型

🍉回归模型

🍈线性回归

🍈评价模型

🍉聚类模型

🍈K-means 聚类

🍈评价模型

🍉降维模型

🍈PCA 主成分分析

🍉 协同过滤

🍈ALS 模型

🍈评价模型

🍉实战案例:房价预测

🍈数据加载与预处理

🍈模型训练与预测

🍈模型评估

🍈结果分析

🍉总结


🍉引言

  • Apache Spark 是一个开源的分布式计算框架,它提供了高效的处理大规模数据集的能力。Spark MLlib 是 Spark 的机器学习库,旨在提供可扩展的、易于使用的机器学习算法。MLlib 提供了一系列工具,用于分类、回归、聚类、协同过滤、降维等任务。
  • 本文将详细介绍 Spark MLlib 的功能及其应用,结合实例讲解如何在实际数据处理中使用这些功能。

🍉Spark MLlib 简介

🍈 主要特点

  • 易于使用:提供了丰富的 API,支持 Scala、Java、Python 和 R 等多种编程语言。
  • 高度可扩展:可以处理海量数据,适用于大规模机器学习任务。
  • 丰富的算法库:支持分类、回归、聚类、降维、协同过滤等常用算法。

🍈常见应用场景

  • 分类:如垃圾邮件检测、图像识别、情感分析等。
  • 回归:如房价预测、股票价格预测等。
  • 聚类:如客户分群、图像分割等。
  • 协同过滤:如推荐系统等。
  • 降维:如特征选择、特征提取等。

🍉安装与配置

在使用 Spark MLlib 之前,需要确保已经安装了 Apache Spark。可以通过以下命令安装Spark:

# 安装 Spark
!apt-get install -y spark# 安装 PySpark
!pip install pyspark

🍉数据处理与准备

机器学习的第一步通常是数据的获取与预处理。以下示例演示如何加载数据并进行预处理。

🍈加载数据

我们使用一个简单的示例数据集:波士顿房价数据集。该数据集包含506个样本,每个样本有13个特征和1个目标变量(房价)。

from pyspark.sql import SparkSession# 创建 SparkSession
spark = SparkSession.builder.appName("MLlibExample").getOrCreate()# 加载数据集
data_path = "path/to/boston_housing.csv"
data = spark.read.csv(data_path, header=True, inferSchema=True)
data.show(5)

🍈数据预处理

预处理步骤包括数据清洗、特征选择、数据标准化等。

from pyspark.sql.functions import col
from pyspark.ml.feature import VectorAssembler, StandardScaler# 选择特征和目标变量
feature_columns = data.columns[:-1]
target_column = data.columns[-1]# 将特征列组合成一个向量
assembler = VectorAssembler(inputCols=feature_columns, outputCol="features")
data = assembler.transform(data)# 标准化特征
scaler = StandardScaler(inputCol="features", outputCol="scaledFeatures")
scaler_model = scaler.fit(data)
data = scaler_model.transform(data)# 选择最终的数据集
data = data.select(col("scaledFeatures").alias("features"), col(target_column).alias("label"))
data.show(5)

🍉分类模型

🍈逻辑回归

逻辑回归是一种常用的分类算法。以下示例演示如何使用逻辑回归进行分类。

from pyspark.ml.classification import LogisticRegression# 创建逻辑回归模型
lr = LogisticRegression(featuresCol="features", labelCol="label")# 拆分数据集
train_data, test_data = data.randomSplit([0.8, 0.2])# 训练模型
lr_model = lr.fit(train_data)# 预测
predictions = lr_model.transform(test_data)
predictions.select("features", "label", "prediction").show(5)

🍈评价模型

模型评估是机器学习过程中的重要环节。我们可以使用准确率、精确率、召回率等指标来评估分类模型。

from pyspark.ml.evaluation import MulticlassClassificationEvaluator# 评价模型
evaluator = MulticlassClassificationEvaluator(labelCol="label", predictionCol="prediction", metricName="accuracy")
accuracy = evaluator.evaluate(predictions)
print(f"Accuracy: {accuracy}")

🍉回归模型

🍈线性回归

线性回归用于预测连续值。以下示例演示如何使用线性回归进行预测。

from pyspark.ml.regression import LinearRegression# 创建线性回归模型
lr = LinearRegression(featuresCol="features", labelCol="label")# 训练模型
lr_model = lr.fit(train_data)# 预测
predictions = lr_model.transform(test_data)
predictions.select("features", "label", "prediction").show(5)

🍈评价模型

我们可以使用均方误差(MSE)、均方根误差(RMSE)等指标来评估回归模型。

from pyspark.ml.evaluation import RegressionEvaluator# 评价模型
evaluator = RegressionEvaluator(labelCol="label", predictionCol="prediction", metricName="rmse")
rmse = evaluator.evaluate(predictions)
print(f"RMSE: {rmse}")

🍉聚类模型

🍈K-means 聚类

K-means 是一种常用的聚类算法。以下示例演示如何使用 K-means 进行聚类。

from pyspark.ml.clustering import KMeans# 创建 K-means 模型
kmeans = KMeans(featuresCol="features", k=3)# 训练模型
kmeans_model = kmeans.fit(data)# 预测
predictions = kmeans_model.transform(data)
predictions.select("features", "prediction").show(5)

🍈评价模型

我们可以使用轮廓系数(Silhouette Coefficient)等指标来评估聚类模型。

from pyspark.ml.evaluation import ClusteringEvaluator# 评价模型
evaluator = ClusteringEvaluator(featuresCol="features", predictionCol="prediction", metricName="silhouette")
silhouette = evaluator.evaluate(predictions)
print(f"Silhouette Coefficient: {silhouette}")

🍉降维模型

🍈PCA 主成分分析

PCA 是一种常用的降维技术,用于减少数据的维度,同时保留尽可能多的信息。以下示例演示如何使用 PCA 进行降维。

from pyspark.ml.feature import PCA# 创建 PCA 模型
pca = PCA(k=3, inputCol="features", outputCol="pcaFeatures")# 训练模型
pca_model = pca.fit(data)# 转换数据
pca_result = pca_model.transform(data)
pca_result.select("features", "pcaFeatures").show(5)

🍉 协同过滤

🍈ALS 模型

ALS(交替最小二乘法)是一种常用的协同过滤算法,常用于推荐系统。以下示例演示如何使用 ALS 进行推荐。

from pyspark.ml.recommendation import ALS# 创建 ALS 模型
als = ALS(userCol="userId", itemCol="movieId", ratingCol="rating")# 训练模型
als_model = als.fit(train_data)# 预测
predictions = als_model.transform(test_data)
predictions.select("userId", "movieId", "rating", "prediction").show(5)

🍈评价模型

我们可以使用均方误差(MSE)等指标来评估协同过滤模型。

evaluator = RegressionEvaluator(labelCol="rating", predictionCol="prediction", metricName="rmse")
rmse = evaluator.evaluate(predictions)
print(f"RMSE: {rmse}")

🍉实战案例:房价预测

接下来,我们将通过一个实战案例,完整展示如何使用 Spark MLlib 进行房价预测。步骤包括数据加载与预处理、模型训练与预测、模型评估。

🍈数据加载与预处理

# 加载数据集
data_path = "path/to/boston_housing.csv"
data = spark.read.csv(data_path, header=True, inferSchema=True)# 数据预处理
assembler = VectorAssembler(inputCols=data.columns[:-1], outputCol="features")
data = assembler.transform(data)scaler = StandardScaler(inputCol="features", outputCol="scaledFeatures")
scaler_model = scaler.fit(data)
data = scaler_model.transform(data)data = data.select(col("scaledFeatures").alias("features"), col("label"))

🍈模型训练与预测

我们将使用线性回归模型进行房价预测。

# 拆分数据集
train_data, test_data = data.randomSplit([0.8, 0.2])# 创建线性回归模型
lr = LinearRegression(featuresCol="features", labelCol="label")# 训练模型
lr_model = lr.fit(train_data)# 预测
predictions = lr_model.transform(test_data)

🍈模型评估

# 评价模型
evaluator = RegressionEvaluator(labelCol="label", predictionCol="prediction", metricName="rmse")
rmse = evaluator.evaluate(predictions)
print(f"RMSE: {rmse}")

🍈结果分析

我们可以通过绘图等手段进一步分析预测结果。

import matplotlib.pyplot as plt# 提取实际值和预测值
actual = predictions.select("label").toPandas()
predicted = predictions.select("prediction").toPandas()# 绘制实际值与预测值对比图
plt.figure(figsize=(10, 6))
plt.scatter(actual, predicted, alpha=0.5)
plt.xlabel("Actual")
plt.ylabel("Predicted")
plt.title("Actual vs Predicted")
plt.show()

🍉总结

  • 本文详细介绍了 Spark MLlib 的功能及其应用,结合实例演示了分类、回归、聚类、降维、协同过滤等常用机器学习任务的实现过程。通过这些实例,我们可以看到 Spark MLlib 强大的数据处理和机器学习能力,非常适合大规模数据的处理与分析。
  • 在实际应用中,根据具体需求选择合适的算法和模型,并通过数据预处理、特征选择、模型训练与评估等步骤,不断优化和提升模型性能,从而解决实际问题。
  • 希望本文能够为读者提供一个全面的 Spark MLlib 机器学习的参考,帮助读者更好地理解和应用这一强大的工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/23404.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

⌈ 传知代码 ⌋ 辅助任务改进社交帖子多模态分类

💛前情提要💛 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间,对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

【自然语言处理】【Scaling Law】语言模型物理学 第3.3部分:知识容量Scaling Laws

语言模型物理学3.3:知识容量Scaling Laws 论文名称:Physics of Language Models: Part 3.3, Knowledge Capacity Scaling Laws 论文地址:https://arxiv.org/pdf/2404.05405 相关博客 【自然语言处理】【Scaling Law】Observational Scaling …

R语言探索与分析17-股票题目

Value at Risk(VaR)是一种统计技术,用于量化投资组合在正常市场条件下可能遭受的最大潜在损失。它是风险管理和金融领域中一个非常重要的概念。VaR通常以货币单位表示,用于估计在给定的置信水平和特定时间范围内,投资组…

OpenCV的小部件最基本范例

OpenCV也有与PYQT类似的小部件,例如滑块slider。OpenCV可以用与PYQT类似的“信号与槽”方法,也可以在函数中直接查询小部件的值。 import cv2 import numpy as npcv2.namedWindow(Show1) image np.zeros((100, 400, 3), np.uint8) # 创建一个空白内容…

(面试官问我微服务与naocs的使用我回答了如下,面试官让我回去等通知)微服务拆分与nacos的配置使用

微服务架构 正常的小项目就是所有的功能集成在一个模块中,这样代码之间不仅非常耦合,而且修改处理的时候也非常的麻烦,应对高并发时也不好处理,所以 我们可以使用微服务架构,对项目进行模块之间的拆分,每一…

前端传参数后端变量类型能够接受到List却无法接收到值

问题描述 今天写了个接口,下图所示 ReqVO里是这样的: 然后前端去请求,从请求结果中看发现这里值是在的(有经验的可能就看出来了otherInfo.id: 这样以参数后端是接收不到的,但是当时没发现) 传进来后端…

GAT1399协议分析(8)--批量图像查询

一、请求消息定义 视频图像包含视频片段、 图像、 文件、 人员、 人脸、 机动车、 非机动车、 物品、 场景和视频案事件、 视频图像标签等对象 在消息体中,可以包含其中一种类,加上Data字段即可。 ImageInfo对象 二、请求消息实例 wireshark 抓包实例 请求: 文本化: /V…

制造执行MES系统在光伏行业的应用

全球对可再生能源的需求不断增长,光伏能源作为一种清洁、可持续的能源形式,已经在广泛应用中受到了广泛关注。为满足工业领域的光伏能源需求,光伏制造执行系统(MES)作为一种集成化的技术解决方案,提供了更高效、更可靠的解决方案。…

WPS的JSA算国产编程语言,IDE,脚本工具吗?javascript代替VBA

现在wps用javascript代替VBA,应该算很成功了吧。 如果可以独立出来变成一个脚本语言,简单的IDE(本身也有类似VBA,不要寄宿在WPS里面运行,这样就可以变成VBS一样执行脚本了,用来开发按键精灵,LUA一样的脚本很不错 以下…

Activity->Activity中动态添加Fragment->Fragment回退栈BackStack

Fragment回退栈 Fragment回退栈用于管理Fragment的导航历史(添加、删除、替换)。每个Activity都有一个包含其所有Fragment的FragmentManager,调用其addToBackStack方法时,这个事务就会被添加到FragmentManager的回退栈中当用户按下返回键时,…

MySQL报ERROR 2002 (HY000)解决

今天在连接客户服务器时MySQL的时候报: ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql/mysql.sock’ (2) [rootXXX ~]# mysql -uroot -p Enter password: ERROR 2002 (HY000): Can’t connect to local MySQL server through socket…

rman恢复后,少部分数据文件状态为MISSING000**

客户有套一体机,每天晚上21点开始做rman完全备份,大约第2天上午9点多完成备份,rman备份保留策略保留一份完全备份 6月1日晚21点自动发起备份,6月2日上午10点15分完成备份,并生成了一个控制文件备份 c-4063271871-2024…

前端图片在切换暗黑模式时太亮该怎么办?

通过css中的filter属性来实现,进行图片的色系反转、亮度、对比度调整等 1、invert 反转输入图像,值为 100% 则图像完全反转,值为 0% 则图像无变化 filter: invert(1); 2、blur 给元素应用高斯模糊效果。 filter: blur(5px); 3、brightnes…

如何解决网络问题?

组织和 IT 管理员尽其所能完善他们的网络,但是,不同程度的网络问题仍然可能出现,这些网络问题需要立即响应和解决,如果这些问题在不合理的时间内得不到解决,网络和组织的损害可能会付出高昂的代价。这就是为什么 IT 管…

【漏洞复现】锐捷校园网自助服务系统 login_judge.jsf 任意文件读取漏洞(XVE-2024-2116)

0x01 产品简介 锐捷校园网自助服务系统是锐捷网络推出的一款面向学校和校园网络管理的解决方案。该系统旨在提供便捷的网络自助服务,使学生、教职员工和网络管理员能够更好地管理和利用校园网络资源。 0x02 漏洞概述 校园网自助服务系统/selfservice/selfservice…

《大道平渊》· 玖 —— 把高深的道理讲的通俗,这是一门艺术。

《平渊》 玖 "化繁为简, 点石成金。" 把高深的道理讲得通俗,这是一门艺术! 讲述者能够站在群众的角度,用尽可能简单通俗的语言来解释复杂的概念。 讲述者需要对概念有深刻的理解,还要有灵活的表达能力。 群众愿意接受…

从当当网批量获取图书信息

爬取当当网图书数据并保存到本地,使用request、lxml的etree模块、pandas保存数据为excel到本地。 爬取网页的url为: http://search.dangdang.com/?key{}&actinput&page_index{} 其中key为搜索关键字,page_index为页码。 爬取的数据…

15- Redis 中的 整数集合 数据结构

整数集合是 Set 对象的底层实现之一。当一个 Set 对象只包含整数值元素,并且元素数量不大时,就会使用整数集合这个数据结构作为底层实现。 1. 整数集合结构设计 整数集合本质上是一块连续内存空间,它的结构定义如下: typedef s…

集成学习笔记

集成学习 简介 决策树 GBDT 拟合残差 一般 GBDT XGBOOST 弓 1 能表达样本落入的子节点,但是不能把表示结构 2 3.正则项 – 惩罚 防止过拟合,比如一个值总共有10颗树都是由同一颗树决定的,过拟合 5 找到一种方式不依赖于损失函数 …

python的优势有哪些?

python的优点很多,下面简单地列举一些: 简单 Python的语法非常优雅,甚至没有像其他语言的大括号,分号等特殊符号,代表了一种极简主义的设计思想。阅读Python程序像是在读英语。 易学 Python入手非常快,学习…