Spark MLlib 机器学习详解

news2024/11/26 23:46:15

目录

🍉引言

🍉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.coloradmin.cn/o/1795279.html

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

相关文章

【Linux网络】传输层协议 - UDP

文章目录 一、传输层(运输层)运输层的特点复用和分用再谈端口号端口号范围划分认识知名端口号(Well-Know Port Number)两个问题① 一个进程是否可以绑定多个端口号?② 一个端口号是否可以被多个进程绑定? n…

Java Web学习笔记15——DOM对象

DOM: 概念:Document Object Model: 文档对象模型 将标记语言的各个组成部分封装为对应的对象: Document: 整个文档对象 Element:元素对象 Attribute: 属性对象 Text:文本对象 Comment&a…

logback删除日志文件和文件夹

​​​​​一,事由和源码 logback版本1.2.11 网上找了很多都是无法删除文件夹的,原先使用的TimeBasedRollingPolicy无法删除日志的文件夹,有很多空的日期文件夹,于是查看TimeBasedRollingPolicy源码发现有校验不删除文件夹&#x…

docker-compose部署 kafka 3.7 集群(3台服务器)并启用账号密码认证

文章目录 1. 规划2. 服务部署2.1 kafka-012.2 kafka-022.3 kafka-032.4 启动服务 3. 测试3.1 kafkamap搭建(测试工具)3.2 测试 1. 规划 服务IPkafka-0110.10.xxx.199kafka-0210.10.xxx.198kafka-0310.10.xxx.197kafkamp10.10.xxx.199 2. 服务部署 2.1…

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…

香港服务器无法访问是什么情况?

香港服务器无法访问是什么情况?简单来说,这意味着香港服务器没有响应请求,客户端无法访问。此错误可能由于多种原因而发生,包括网络连接问题、服务器停机、防火墙限制和 DNS 错误。当发生服务器无法访问错误时,它会影响您网站的性…

【Linux】进程切换环境变量

目录 一.进程切换 1.进程特性 2.进程切换 1.进程切换的现象 2.如何实现 3.现实例子 2.环境变量 一.基本概念 二.常见环境变量 三.查询常见环境变量的方法 四.和环境变量相关的命令 五.环境变量表的组织方式 六.使用系统调用接口方式查询环境变量 1.getenv 2.反思 …

【自然语言处理】【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 …

RTA_OS基础功能讲解 2.8-Tick计数器

RTA_OS基础功能讲解 2.8-Tick计数器 文章目录 RTA_OS基础功能讲解 2.8-Tick计数器一、计数器简介二、计数器配置三、计数器驱动3.1 软件计数器驱动3.1.1 递增软件计数器3.1.2 静态计数器接口3.2 硬件计数器驱动3.2.1 Advancing硬件计数器3.2.2 回调函数四、在运行时访问计数器属…

Xcode 打包报错Command PhaseScriptExecution failed with a nonzero exit code

解决办法: 1、在Xcode项目中 Pods -> Targets Support Files -> Pods-项目名 -> Pods-项目名-frameworks 中(大约在第44行) 加上 -f 2、CocoaPods版本太旧了,可以尝试升级CocoaPods版本 使用sudo gem update cocoapods更新cocoapods,问题将在1.12.1版本已…

lua vm 二: 查看字节码、看懂字节码

本文讲一讲如何查看 lua 的字节码(bytecode),以及如何看懂字节码。 以下分析基于 lua-5.4.6,下载地址:https://lua.org/ftp/ 。 1. 查看字节码 1.1 方法一:使用 luac luac 是 lua 自带的编译程序&#x…

无线和移动网络

背景 两个重要的挑战 无线:通过无线链路通信移动:需要网络处理移动(不同变换所接入的网络)用户 无线网络中的组件 无线主机(无线并不总是意味着移动的)基站(base station 或者叫AP&#xff0…

芝麻IP好用吗?来测试了!

作为老牌代理IP服务厂商,芝麻IP和青果网络代理IP都做的不错,市场上几乎可以是有口皆碑了,上次测试了青果网络的代理IP,效果表现得还挺不错,和他们自己宣传的以及客户对他们的评价大差不差。 总的来说,他们家…

纷享销客安全体系:物理与环境安全

纷享销客的物理设备托管在经过严格准入制度授权的TIER3级别以上的专业数据中心,这些数据中心均通过了等保三级与IS027001安全认证,确保电力、制冷等基础设施提供相应级别的冗余,以增强IDC环境的安全性。 业务操作系统平台采用当前广泛使用的…

解决 iOS 端小程序「saveVideoToPhotosAlbum:fail invalid video」问题

场景复现: const url https://mobvoi-digitalhuman-video-public.weta365.com/1788148372310446080.mp4uni.downloadFile({url,success: (res) > {uni.saveVideoToPhotosAlbum({filePath: res.tempFilePath,success: (res) > {console.log("res > &…

NocoDB开源的智能表格详解-腾讯文档本地替代品

文章目录 一、介绍二、docker-compose部署三、登录NocoDB四、NocoDB手册1. 创建项目2. 收集统计表2.1 添加字段2.2 编辑字段2.3 字段类型2.4 发布表格 3.创建表单3.1 创建表单3.2 分享表单3.3 填写检测单 4.创建看板5.创建画廊 一、介绍 可作为腾讯文档的本地电子表格替代品&a…

VS2019 QT无法打开 源 文件 “QTcpSocket“

VS2019 QT无法打开 源 文件 "QTcpSocket" QT5.15.2_msvc2019_64 严重性 代码 说明 项目 文件 行 禁止显示状态 错误(活动) E1696 无法打开 源 文件 "QTcpSocket" auto_pack_line_demo D:\vs_qt_project\auto_pack_line_de…

OZON快蜗牛数据工具,OZON数据分析工具

在当今的电商时代,数据已经成为了商家们最宝贵的资产之一。无论是产品选品、市场定位,还是营销策略的制定,都离不开对数据的深入分析和精准把握。而在众多电商平台中,OZON以其独特的商业模式和庞大的用户群体,吸引了众…

Vue3项目准备:utils工具插件文件夹中封装request.js配置axios请求基地址及超时时间、请求拦截器、响应拦截器

token介绍 概念:访问权限的令牌,本质上是一串字符串 创建:正确登录后,由后端签发并返回 作用:判断是否有登录状态等,控制访问权限 注意:前端只能判断token有无,而后端才能判断tok…

【vue3+pinia+uniapp项目问题:使用pinia状态管理时store的数据更新,模板渲染视图不能实时更新】

在这里选择不同的学校后,发现store里面的数据打印出来能更新,但是使用store的数据打印出来并未实时更新且渲染在模板上,必须手动刷新视图才能更新。 原因是因为使用了解构赋值传入参数 解决方法 1.使用computed 现在视图能进行实时更新…