Spark-机器学习(2)特征工程之特征提取

 在之前的文章中,我们了解我们的机器学习,了解我们spark机器学习中的MLIib算法库,知道它大概的模型,熟悉并认识它。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。

Spark-机器学习(1)什么是机器学习与MLlib算法库的认识-CSDN博客文章浏览阅读3.7k次,点赞72次,收藏59次。从这一系列开始,我会带着大家一起了解我们的机器学习,了解我们spark机器学习中的MLIib算法库,知道它大概的模型,熟悉并认识它。同时,本篇文章为个人spark免费专栏的系列文章,有兴趣的可以收藏关注一下,谢谢。同时,希望我的文章能帮助到每一个正在学习的你们。也欢迎大家来我的文章下交流讨论,共同进步。https://blog.csdn.net/qq_49513817/article/details/137754753

今天的文章,我会带着大家一起了解我们的特征提取和我们的tf-idf,word2vec算法。希望大家能有所收获。 

目录

一、特征提取

什么是特征提取? 

特征提取与机器学习的关系

二、示例代码 

tf-idf实现文档向量化(词频-逆文档频率计算)

tf-idf是什么

代码实现

word2vec(创建 K 维度的稠密向量) 

word2vec是什么?

代码实现

拓展-特征提取的各种方法简单示例及优点

一、特征提取

什么是特征提取? 

特征提取 

特征提取(Feature Extraction)是机器学习和模式识别中的一个重要步骤,旨在从原始数据中提取出有意义的、对解决问题有帮助的信息,即特征。这些特征通常是对原始数据的简化表示,能够捕捉数据的关键属性,同时减少数据的复杂性和冗余性。

特征提取的主要目的是:

  • 降维:将原始数据从高维空间映射到低维空间,使得后续的数据处理和模型训练更加高效。
  • 提高模型性能:通过提取有意义的特征,可以提高机器学习模型的性能,如分类准确率、回归精度等。
  • 增强模型的可解释性:通过特征提取,可以使得模型更加容易理解和解释,有助于人们理解数据的内在规律和模式。

特征提取的方法多种多样,具体取决于数据的类型和问题的性质。例如,在文本处理中,常用的特征提取方法包括词袋模型(Bag of Words)、TF-IDF(词频-逆文档频率)、n-gram模型、词嵌入(如Word2Vec、GloVe)等。在图像处理中,常用的特征提取方法包括SIFT(尺度不变特征变换)、SURF(加速鲁棒特征)、HOG(方向梯度直方图)等。

在进行特征提取时,需要注意以下几点:

  • 选择有意义的特征:确保提取的特征与解决问题密切相关,避免引入无关或冗余的特征。
  • 避免过拟合:避免提取过多的特征,以免导致模型过拟合。通常需要通过交叉验证等技术来评估特征提取的效果。
  • 考虑计算效率:特征提取的过程应尽可能高效,避免在大数据集上花费过多的计算资源。

最后,特征提取是机器学习和模式识别中的一个关键环节,通过提取有意义的特征,可以提高模型的性能、可解释性和计算效率。

特征提取与机器学习的关系

特征提取与机器学习之间存在密切的关系。特征提取是机器学习流程中的一个关键步骤,对于模型的性能和效果具有重要影响。以下是特征提取与机器学习之间的主要关系:

  • 数据预处理:在机器学习项目的开始阶段,通常需要对原始数据进行预处理。特征提取是预处理的一个重要环节,它可以将原始数据转化为机器学习算法更容易理解和利用的形式。

  • 模型输入:机器学习算法通常依赖于特征作为输入。特征提取的过程就是将原始数据转化为这些特征。因此,特征提取的质量直接影响机器学习模型的性能。如果提取的特征不能很好地表示数据的内在规律和模式,那么模型的性能可能会受到限制。

  • 降低维度和复杂度:原始数据可能包含大量的特征和维度,这可能导致计算复杂度高和模型过拟合的问题。特征提取可以通过选择最重要的特征或转换原始特征来降低数据的维度和复杂度,从而提高模型的效率和性能。

  • 提升模型性能:合适的特征提取方法可以使机器学习模型更容易学习和识别数据的模式。通过提取与问题相关的特征,模型能够更准确地做出预测或分类,从而提升模型的性能。

  • 模型解释性:特征提取有助于增强模型的解释性。通过提取有意义的特征,我们可以更好地理解模型是如何根据这些特征做出决策的,从而增加对模型工作原理的洞察力。

我们需要注意的是,特征提取是一个需要经验和技巧的过程。不同的数据集和问题可能需要不同的特征提取方法。因此,在进行特征提取时,需要根据具体的应用场景和数据特点进行选择和调整。

二、示例代码 

在本篇文章中,我会提供tf-idf与word2vec两种算法的简单示例

tf-idf实现文档向量化(词频-逆文档频率计算)

tf-idf是什么

Word2Vec是用一个一层的神经网络(即CBOW)将one-hot形式的稀疏词向量映射为一个n维(n一般为几百)的稠密向量的过程。这种n维的稠密向量即为word2vec中的K维度稠密向量。相较于传统NLP的高维、稀疏的表示法(One-hot Representation),Word2Vec训练出的词向量是低维、稠密的,其语义信息更加丰富。这种表示方法使得意思相近的词在向量空间中会被映射到相近的位置。

  • TF(词频):某一给定词语在该文件中出现的次数。这个数字通常会被归一化(一般是词频除以文章总词数),以防止它偏向长的文件。(同一个词语在长文件里可能会比短文件有更高的词频,而不管该词语重要与否。)

  • IDF(逆文档频率):一个词语普遍重要性的度量。某一特定词语的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到。如果包含词条的文档越少,IDF越大,则说明词条具有很好的类别区分能力。

TF-IDF加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关度的度量或评级。除了TF和IDF以外,还有一系列的TF-IDF变种,以及每一个变种自己的权重分数归一化方案。

代码实现

这里我们有一个名为tf-idf.txt的文本文档,我们需要将它从指定地址提取文档文件并进行我们的文档向量化。

import org.apache.spark.rdd.RDD
import org.apache.spark.SparkContext
import org.apache.spark.mllib.feature.HashingTF
import org.apache.spark.mllib.linalg.Vector
import org.apache.spark.mllib.feature.IDF
val p = sc.textFile("/opt/spark-3.2.1/P/tf-idf.txt").map(_.split (" ").toSeq)
val HashingTF = new HashingTF()
val tf = HashingTF.transform(p).cache()
val idf = new IDF().fit(tf)
val pp = idf.transform(tf)
pp.collect.foreach(print)
  • 首先,我导入了必要的Spark类和对象
  • 然后,我读取了一个文本文件,并将每一行分割成单词序列。使用map函数将每一行文本分割成单词,并将这些单词转换为一个序列(Seq)。
  • HashingTF将单词序列转换为哈希特征向量。并计算每个单词在文档中的词频。然后使用cache()`方法缓存了结果,以便在后续的操作中重复使用,而不必重新计算。
  • IDF`对象会计算每个特征的逆文档频率。
  • 最后,使用IDF模型转换数据,并打印结果

这样我们就成功实现了文档向量化 

word2vec(创建 K 维度的稠密向量) 

word2vec是什么?

Word2Vec 是一种用于生成词向量的深度学习模型,由 Google 的研究人员在 2013 年提出。该模型的核心思想是通过训练神经网络来学习词汇表中每个单词的分布式表示(distributed representation),通常是一个固定维度的实数向量。这些向量能够捕捉单词之间的语义和语法关系,使得语义上相近的单词在向量空间中的位置也相近。

Word2Vec 主要包含两种训练方式:Skip-gram 和 Continuous Bag of Words (CBOW)。

  • Skip-gram:给定一个中心词,Skip-gram 模型的目标是预测其上下文中的其他词。也就是说,模型通过中心词来预测其周围的词。

  • CBOW:与 Skip-gram 相反,CBOW 模型通过上下文中的词来预测中心词。模型将上下文中的词作为输入,并尝试预测中心词。

这两种方法都基于一个假设:具有相似上下文的词在语义上也是相似的。因此,通过训练模型来预测上下文或中心词,我们可以学习到每个词的向量表示,这些向量能够捕捉词之间的语义关系。

代码实现
import org.apache.spark.{SparkConf, SparkContext}  
import org.apache.spark.ml.feature.Word2Vec  
import org.apache.spark.ml.linalg.Vector  
import org.apache.spark.sql.SparkSession  
  
// 创建 Spark 配置和上下文  
val conf = new SparkConf().setAppName("Word2VecExample").setMaster("local[*]")  
val sc = new SparkContext(conf)  
val spark = SparkSession.builder().appName("Word2VecExample").getOrCreate()  
import spark.implicits._  
  
// 假设你的文本数据在 "/opt/spark-3.2.1/P/word2vec.txt" 文件中  
val input = sc.textFile("/opt/spark-3.2.1/P/word2vec.txt")  
  
// 将文本数据转换为 RDD[Seq[String]],其中每个 Seq[String] 代表一个文档  
val sentences = input.map(_.split("\\s+").toSeq)  
  
// 设置 Word2Vec 参数  
val word2Vec = new Word2Vec()  
  .setInputCol("text")  
  .setOutputCol("result")  
  .setVectorSize(100) // 设置词向量的维度,例如 100  
  .setMinCount(5) // 设置最小词频,例如 5  
  .setNumIterations(1) // 设置训练迭代次数  
  
// 使用 Word2Vec 训练模型  
val model = word2Vec.fit(sentences.toDF("text"))  
  
// 查找特定词的向量  
val findVectors = model.transform(sentences.toDF("text"))  
val vectorForHi = findVectors.select("result").where($"text" === Seq("Hi")).first().getAs[Vector](0)  
println(s"Vector for 'Hi': $vectorForHi")  

 这样我们就可以查找特定词的向量。

拓展-特征提取的各种方法及优点

算法说明优点
TF-IDF在文本处理中,TF-IDF是一种统计方法,用于评估一个词对于一个文件集或一个语料库中的其中一份文件的重要程度。TF表示词频,即一个词在文档中出现的次数;IDF表示逆文档频率,即一个词在所有文档中的普遍重要性。两者相乘,就得到一个词的TF-IDF值。- 能够综合考虑词在文档中的出现频率和在整个语料库中的稀有性。
- 适用于文本分类、信息检索等任务。
- 能够有效地提取出文本中的关键信息。
主成分分析 (PCA)假设有一个数据集包含多个特征,PCA 可以将这些特征转换为一组新的正交特征,即主成分,这些主成分捕获了数据中的最大变化方向。- 降低数据维度,减少计算复杂度。
- 去除噪声和冗余特征,提高模型性能。
- 易于理解和可视化。
线性判别分析 (LDA)在分类问题中,LDA 试图找到最能区分不同类别的特征。例如,在面部识别中,LDA 可以找到最能区分不同人脸的特征。- 能够找到最具区分性的特征,提高分类性能。
- 对数据的分布有一定的鲁棒性。
SIFT (尺度不变特征变换)在图像处理中,SIFT 算法可以提取图像的关键点(如角点、边缘点等),并为每个关键点生成一个具有尺度、旋转和光照不变性的描述子。- 对尺度、旋转和光照变化具有不变性。
- 适用于复杂场景和大量数据的处理。
- 提取的特征具有较高的鲁棒性和独特性。
Word2Vec在自然语言处理中,Word2Vec 将每个单词转换为一个固定维度的实数向量,这些向量能够捕捉单词之间的语义和上下文关系。- 捕捉单词的语义和上下文信息,提高文本处理任务的性能。
- 适用于各种自然语言处理任务,如文本分类、情感分析等。

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

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

相关文章

HackMyVM-Connection

目录 信息收集 arp nmap WEB web信息收集 dirsearch smbclient put shell 提权 系统信息收集 suid gdb提权 信息收集 arp ┌─[rootparrot]─[~/HackMyVM] └──╼ #arp-scan -l Interface: enp0s3, type: EN10MB, MAC: 08:00:27:16:3d:f8, IPv4: 192.168.9.115 S…

js打印页面源码 ,打印选取的容器里的内容,打印指定内容

js打印页面源码 &#xff0c;打印选取的容器里的内容&#xff0c;打印指定内容 效果 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge&…

FreeRTOS时间管理

FreeRTOS时间管理 主要要了解延时函数&#xff1a; 相对延时&#xff1a;指每次延时都是从执行函数vTaskDelay()开始&#xff0c;直到延时指定的时间结束。 绝对延时&#xff1a;指将整个任务的运行周期看成一个整体&#xff0c;适用于需要按照一定频率运行的任务。 函数 vTa…

PTA图论的搜索题

目录 7-1 列出连通集 题目 输入格式: 输出格式: 输入样例: 输出样例: AC代码 7-2 六度空间 题目 输入格式: 输出格式: 输入样例: 输出样例: 思路 AC代码 7-3 地下迷宫探索 题目 输入格式: 输出格式: 输入样例1: 输出样例1: 输入样例2: 输出样例2: 思路 …

MySQL 试图

视图功能在 5.0 以后的版本启用 视图是一张虚表。数据表确实包含了具体数据并且保存到硬盘中的实表。视图使用数据检索语句动态生 成的一张虚表。每一次数据服务重启或者系统重启之后&#xff0c;在数据库服务启动期间&#xff0c;会使用创建视图的语 句重新生成视图中的数据&…

这家物流装备公司突破天际:销售额飙升至10亿美元,引领仓储机器人革命!...

导语 大家好&#xff0c;我是智能仓储物流技术研习社的社长&#xff0c;老K。专注分享智能仓储物流技术、智能制造等内容。 新书《智能物流系统构成与技术实践》 法国的Exotec公司在仓储自动化领域取得了显著成就&#xff0c;其销售额已超过10亿美元&#xff0c;成为全球物料搬…

考研数学|《1800》《1000》《660》《880》如何搭配❓

这几本书都是不同阶段对应的习题册 我觉得最舒服的使用就是方式就是基础阶段用《1800题基础部分》然后强化阶段主要刷《880题》并且强化阶段带着刷《660题》 上面是我的使用方式。之所以没有刷《1000题》是因为这本习题册的难度对我来说还是太大了&#xff0c;并且计算量很大…

上海计算机学会 2023年10月月赛 乙组T3 树的连通子图(树、树形dp)

第三题&#xff1a;T3树的连通子图 标签&#xff1a;树、树形 d p dp dp题意&#xff1a;给定一棵 n n n个结点的树&#xff0c; 1 1 1号点为这棵树的根。计算这棵树连通子图的个数&#xff0c;答案对 1 , 000 , 000 , 007 1,000,000,007 1,000,000,007取余数。题解&#xff1…

HTML内联框架

前言&#xff1a; 我们有时候打开网页时会有广告窗的出现&#xff0c;而这些窗口并不是来自于本站的&#xff0c;而是来自于外部网页&#xff0c;只是被引用到了自己网页中而已。这一种技术可以通过内联来实现。 标签介绍&#xff1a; HTML 内联框架元素 (<iframe>) 表示…

基于Springboot的影城管理系统

基于SpringbootVue的影城管理系统的设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatis工具&#xff1a;IDEA、Maven、Navicat 系统展示 用户登录 首页展示 电影信息 电影资讯 后台登录页 后台首页 用户管理 电影类型管理 放映…

RAG (Retrieval Augmented Generation) 结合 LlamaIndex、Elasticsearch 和 Mistral

作者&#xff1a;Srikanth Manvi 在这篇文章中&#xff0c;我们将讨论如何使用 RAG 技术&#xff08;检索增强生成&#xff09;和 Elasticsearch 作为向量数据库来实现问答体验。我们将使用 LlamaIndex 和本地运行的 Mistral LLM。 在开始之前&#xff0c;我们将先了解一些术…

vue3 生命周期(生命周期钩子 vs 生命周期选项 vs 缓存实例的生命周期)

vue3 支持两种风格书写&#xff1a;选项式 API 和组合式 API 若采用组合式 API &#xff0c;则使用生命周期钩子若采用选项式 API &#xff0c;则使用生命周期选项两者选用一种即可&#xff0c;不建议同时使用&#xff0c;避免逻辑紊乱。 生命周期钩子 在 setup 中使用 onBefo…

Vue 阶段练习:记事本

将 Vue快速入门 和 Vue 指令的学习成果应用到实际场景中&#xff08;如该练习 记事本&#xff09;&#xff0c;我们能够解决实际问题并提升对 Vue 的技能掌握。 目录 功能展示 需求分析 我的代码 案例代码 知识点总结 功能展示 需求分析 列表渲染删除功能添加功能底部统计…

3D目标检测实用技巧(二)- 实现点云(or 体素)向图像平面的投影并可视化

一、引言 受Focals Conv的启发&#xff0c;该论文中通过将点云投影到图片中清晰展现出点云学习后的情况&#xff1a; 本次实现的是体素向图像投影并显示&#xff0c;实现出来的效果如下&#xff1a; 二、 实现细节 1、体素投影到图像坐标系 这里我们参考的是VirConv的投影函…

通过matlab分别对比PSO,反向学习PSO,多策略改进反向学习PSO三种优化算法

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 粒子群优化算法 (PSO) 4.2 反向学习粒子群优化算法 (OPSO) 4.3 多策略改进反向学习粒子群优化算法 (MSO-PSO) 5.完整程序 1.程序功能描述 分别对比PSO,反向学习PSO,多策略改进反向学…

百货商场用户画像描绘与价值分析

目录 内容概述数据说明实现目标技术点主要内容导入模块1.项目背景1.1 项目背景与挖掘目标 2.数据探索与预处理2.1 结合业务对数据进行探索并进行预处理2.2 将会员信息表和销售流水表关联与合并 3 统计分析3.1 分析会员的年龄构成、男女比例等基本信息3.2 分析会员的总订单占比&…

Python 入门指南(四)

原文&#xff1a;zh.annas-archive.org/md5/97bc15629f1b51a0671040c56db61b92 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第十章&#xff1a;哈希和符号表 我们之前看过列表&#xff0c;其中项目按顺序存储并通过索引号访问。索引号对计算机来说很有效。它们是整…

使用 Docker 部署 SurveyKing 调查问卷系统

1&#xff09;SurveyKing 介绍 SurveyKing 是一款功能强大、操作简便的开源问卷系统。它不仅满足了用户对问卷调查的基本需求&#xff0c;还提供了丰富的逻辑设置和灵活的问题设置&#xff0c;使得问卷制作更加智能化和个性化。此外&#xff0c;SurveyKing 还具有快速部署和安全…

笔记本电脑上的聊天机器人: 在英特尔 Meteor Lake 上运行 Phi-2

对应于其强大的能力&#xff0c;大语言模型 (LLM) 需要强大的算力支撑&#xff0c;而个人计算机上很难满足这一需求。因此&#xff0c;我们别无选择&#xff0c;只能将它们部署至由本地或云端托管的性能强大的定制 AI 服务器上。 为何需要将 LLM 推理本地化 如果我们可以在典配…

elmentui树形表格使用Sortable拖拽展开行时拖拽bug

1、使用elemntui的el-table使用Sortable进行拖拽&#xff0c;如下 const el this.$el.querySelector(.el-table__body-wrapper tbody) Sortable.create(el, {onEnd: (event) > {const { oldIndex, newIndex } event//拿到更新前后的下标即可完成数据的更新} })2、但是我这…