SparkML

SparkML

  • 一、介绍
  • 二、模型开发流程
    • 1、dataframe数据模型
    • 2、transformer转换器
    • 3、estimators模型学习器
    • 4、pipeline管道
  • 三、示例:基于随机森林的新闻分类任务
    • 1、引入相关包
    • 2、初始化spark
    • 3、读取数据
    • 4、查看数据情况
    • 5、数据处理
      • 1、分词
      • 2、类别编码
      • 3、去除停用词
      • 4、bow特征
      • 5、数据集切分
      • 6、建立随机森林模型
      • 7、模型训练
      • 8、模型预测
      • 9、关闭spark资源

一、介绍

Apache Spark ML 是机器学习库在 Apache Spark 上运行的模块。
功能模块介绍

名称功能
ML Pipeline APIs数据模型管道API
pyspark.ml.param module模型参数模块
pyspark.ml.feature module模型变量相关模块
pyspark.ml.classfication module分类算法模块
pyspark.ml.culstering module聚类算法模块
pyspark.ml.recommendation module推荐系统模块
pyspark.ml.regression module回归算法模块
pyspark.ml.tuning module参数调整模块
pyspark.ml.evaluation module模型验证模块

二、模型开发流程

在这里插入图片描述

1、dataframe数据模型

ML可以语言于各种数据模型,比如向量、文本、图形等,API采用spark SQL的dataframe来支持各类数据模型

2、transformer转换器

将一个dataframe转换为另一个dataframe,转换过程中,会修改原始变量,或创建新变量

3、estimators模型学习器

  • 模型学习器是拟合和训练数据的机器学习算法或其他算法的抽象
  • 实现fit()方法,这个方法输入一个dataframe并产生一个model即一个transformer转换器
  • 例如:一个机器学习算法是一个estimators模型学习器,比如这个算法是logisticregressionmodel,因此也是一个transformer转换器

4、pipeline管道

  • 将多个transformer和estimators绑在一起,形成一个工作流
  • 在机器学习中,通常会执行一系列算法来处理和学习模型,比如,一个简单的分类模型开发流程kennel包括以下步骤:
    • 将字符变量转换为数值变量
    • 进行缺失值、异常值等数据处理
    • 使用特征向量和标签学习一个预测模型

三、示例:基于随机森林的新闻分类任务

1、引入相关包

from pyspark.sql import SparkSession
import warnings
from pyspark.sql.functions import *
from pyspark import StorageLevel
warnings.filterwarnings('ignore')

2、初始化spark

spark = (SparkSession
         .builder
         .appName('文本分类器')
         .getOrCreate())

3、读取数据

spark_sinanews = spark.read.json('./data/spark_data/sinaNews_201501.json')
spark_sinanews.show(5)

在这里插入图片描述

4、查看数据情况

在这里插入图片描述

5、数据处理

1、分词

使用jieba分词,安装方法:pip install jieba -i https://pypi.tuna.tsinghua.edu.cn/simple
引入并实例化

import jieba
jieba.initialize()

# 定义udf函数
from pyspark.sql.types import StringType
def cut_words(input_str):
    if not jieba.dt.initialized: #主要是应用于分布式的情况
        jieba.initialize()
    ret = " ".join([w for w in jieba.lcut(input_str)])
    return ret

# 向spark注册自定义函数
preprocess_udf = udf(cut_words,StringType())

查看分词效果

# 添加新列
spark_sinanews = spark_sinanews.withColumn('text_words',preprocess_udf('text'))
spark_sinanews.show(2)

在这里插入图片描述

2、类别编码

# 对类别进行编码
spark_sinanews.groupBy('channel_title').count().orderBy(col('count').desc()).show()

在这里插入图片描述

from pyspark.ml.feature import StringIndexer,IndexToString
# 字符——》编码
label_stringIdx = StringIndexer(inputCol='channel_title',outputCol='label').fit(spark_sinanews)
# 编码——》字符 用来看预测结果的
labelConverter = IndexToString(inputCol='prediction',outputCol='predictedLabel',labels=label_stringIdx.labels)

3、去除停用词

# 分词与去除停用词
from pyspark.ml.feature import Tokenizer,StopWordsRemover

# 分词
tokenizer = Tokenizer(inputCol='text_words',outputCol='words')

with open('./data/spark_data/my_stop_words.txt',encoding='utf8')as f:
    stop_words = list(f.read().split('\n'))

# 停用词
stop_words_Remover = StopWordsRemover(inputCol='words',outputCol='filtered').setStopWords(stop_words)

4、bow特征

from pyspark.ml import Pipeline
from pyspark.ml.feature import CountVectorizer

#(个数 ,[编码],[频次])
# 计算总的字数
vocab_tmp = spark_sinanews.select('text_words').rdd.flatMap(lambda line :line['text_words'].split(" "))

vocab = vocab_tmp.map(lambda word :(word,1)).reduceByKey(lambda a,b:a+b)

vocab.count()

在这里插入图片描述

# bag of words count
# CountVectorizer将根据语料库中的词频排序选出前vocabSize个词,由于内存限制,取小些
countVectors = CountVectorizer(inputCol='filtered',outputCol='features',vocabSize=10000)

# 1、分词 2、去除停用词 3、bow特征 4、y标签转换
pipeline = Pipeline(stages=[tokenizer,stop_words_Remover,countVectors,label_stringIdx])

# fit the pipeline to training documents
pipelineFit = pipeline.fit(spark_sinanews)
dataSet = pipelineFit.transform(spark_sinanews)

dataSet.show(1)

在这里插入图片描述

dataSet.select('features').show(2)

在这里插入图片描述

5、数据集切分

dataSet.persist(storageLevel=StorageLevel(True,False,False,False))

# set seed for reproducibility
trainData,testData = dataSet.randomSplit([0.7,0.3],seed=100)
print('train data count:'+str(trainData.count()))
print('test data count:'+str(testData.count()))

在这里插入图片描述

6、建立随机森林模型

# 随机森林模型

from pyspark.ml.classification import RandomForestClassifier

# 随便拍一个参数
rf = RandomForestClassifier(labelCol='label',\
                            featuresCol='features',\
                            numTrees=100,\
                            maxDepth=4,\
                            maxBins=32)
pipeline = Pipeline(stages=[tokenizer,stop_words_Remover,countVectors,label_stringIdx,rf,labelConverter])

trainData,testData = spark_sinanews.randomSplit([0.7,0.3])

trainData.persist()
testData.persist()

在这里插入图片描述

7、模型训练

# train model ,this also runs the indexers
model = pipeline.fit(trainData)

8、模型预测

predictions = model.transform(testData)
predictions.select('filtered','channel_title','features','prediction','label','predictedLabel').show(5)

在这里插入图片描述

9、关闭spark资源

spark.stop()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python GNN图神经网络代码实战;GAT代码模版,简单套用,易于修改和提升,图注意力机制代码实战

1.GAT简介 GAT(Graph Attention Network)模型是一种用于图数据的深度学习模型,由Veličković等人在2018年提出。它通过自适应地在图中计算节点之间的注意力来学习节点之间的关系,并在节点表示中捕捉全局和局部信息。 GAT模型的核…

实现spring配置bean类机制

大家好,这里是教授.F 流程说明: 我们自己实现spring配置bean类的机制,要先了解原本是怎么实现的。 原本的机制就是有一个bean配置文件,还有一个ApplicationContext spring文件。bean类写着要扫描的文件信息,spring文…

vscode编译c/c++找不到jni.h文件

解决办法: 一、下载JDK 访问Oracle官网的Java下载页面:Java Downloads | Oracle 选择适合您操作系统的JDK版本: 对于Windows,选择“Windows x64”或“Windows x86”(取决于您的系统是64位还是32位)。对于Linux&#…

扩散世界模型已训练出赶超人类的智能体?

论文标题: Diffusion for World Modeling:Visual Details Matter in Atari 论文作者: Eloi Alonso, Adam Jelley, Vincent Micheli, Anssi Kanervisto, Amos Storkey, Tim Pearce, Franois Fleuret 项目地址: https://github.com/eloial…

封装了一个使用UICollectionViewLayout 实现的吸附居左banner图

首先查看效果图 实现的原理就是通过自定义UICollectionView layout,然后 设置减速速率是快速就可以达到吸附的效果 _collectionView.decelerationRate UIScrollViewDecelerationRateFast; 下面贴出所有代码 这里是.h // // LBMiddleExpandLayout.h // Liubo…

Java零基础-顺序结构

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…

10 个最佳 MP4 转换器,可帮助您将视频转换为 MP4

许多人正在寻找一种强大的工具将视频转换为 MP4。网上有很多 MP4 转换器,但只有少数能够有效地将视频转换为 MP4。我们根据实验室测试和用户报告确定了前 10 名 MP4 转换器。在这篇文章中,我们将向您展示这些 MP4 转换器具有哪些功能以及如何使用它们。 …

【Python】 Python中的`mkdir -p`功能解析与应用

基本原理 在Linux系统中,mkdir -p是一个常用的命令,用于创建目录。这个命令的特点是,如果目标目录已经存在,它不会报错,而是直接跳过;如果目标目录不存在,它会创建整个目录路径中所需的所有目录…

166.二叉树:相同的树(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* Tre…

无线麦克风哪个品牌音质最好?最好的无线麦克风品牌排行推荐

xx 虽然Vlog随手就能拍,不过Vlog不仅要记录画面,还要记录声音,毕竟一段声色俱全的视频要比一张照片有意义得多。把镜头擦拭干净可以留下清晰明朗的画面,但是在户外参杂了各种嘈杂的声音手机很难收录清晰的人声,所以一…

一点连接千家银行,YonSuite让“银行回单”一键获取

在当今日益复杂多变的商业环境中,企业的资金管理变得尤为重要。传统的银行回单管理方式,如手动登录网银、逐一下载回单、核对信息等,不仅效率低下,而且容易出错,给企业的财务管理带来了极大的挑战。 然而,…

OBC充电机的基础认识

OBC是电动汽车上的充电设备,主要用于将外部交流电源转换为直流电源,为电动汽车的动力电池组充电。OBC是电动汽车的重要组成部分,其性能直接影响到电动汽车的续航里程和充电效率。 OBC的主要功能包括:将交流电转换为直流电&#xf…

C++设计模式|结构型 代理模式

1.什么是代理模式? 代理模式Proxy Pattern是一种结构型设计模式,用于控制对其他对象的访问。 在代理模式中,允许一个对象(代理)充当另一个对象(真实对象)的接口,以控制对这个对象的…

《论文阅读》具有人格自适应注意的个性化对话生成 AAAI 2023

《论文阅读》具有人格自适应注意的个性化对话生成 AAAI 2023 前言 简介挑战与机遇任务定义模型架构Context EncoderPersona EncoderDialog DecoderPersona-Adaptive Attention损失函数实验结果 前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论…

Linux 服务查询命令(包括 服务器、cpu、数据库、中间件)

Linux 服务查询命令(包括 服务器、cpu、数据库、中间件) Linux获取当前服务器ipLinux使用的是麒麟版本还是cenos版本Linux获取系统信息Linux查询nignx版本 Linux获取当前服务器ip hostname -ILinux使用的是麒麟版本还是cenos版本 这个文件通常包含有关L…

社交媒体数据恢复:易信

我们可以参考其他类似软件的数据恢复方法尝试解决问题。 检查备份:首先,检查您是否在易信或其他云服务中备份了数据。如果有备份,您可以尝试从备份中恢复数据。 联系易信客服:如果找不到备份,您可以联系易信的客户服务…

Redis 持久化: RDB和AOF

文章目录 ⛄1.RDB持久化🪂🪂1.1.执行时机🪂🪂1.2.RDB原理🪂🪂1.3.小结 ⛄2.AOF持久化🪂🪂2.1.AOF原理🪂🪂2.2.AOF配置🪂🪂2.3.AOF文件…

电脑显示屏亮度怎么调?3招帮你调整亮度

在使用电脑时,调整显示屏亮度是一项常见的操作,它可以帮助我们适应不同的环境光线,提高视觉舒适度。然而,许多用户可能不清楚电脑显示屏亮度怎么调。本文将介绍3种简单实用的方法,帮助您轻松调整电脑显示屏的亮度&…

计算机网络介绍

计算机网络介绍 概述网络概述相关硬件 链路层VLAN概念VLAN 特点VLAN 的划分帧格式端口类型原理 STP概念特点原理 Smart Link概念特点组网 网络层ARP概念原理 IP概念版本IP 地址 IPv4IP 地址数据报格式 IPv6特点IP 地址数据报格式 ICMP概念分类报文格式 VRRP概念原理报文格式 OS…

原生APP和H5 APP的区别

原生APP(Native App)和H5 APP(也称为Web App或Hybrid App)是两种不同的移动应用开发方式,它们在开发技术、性能、用户体验、开发成本和维护等方面存在显著区别。以下是它们的主要区别。北京木奇移动技术有限公司&#…