day02——特征工程之特征提取

news2024/12/23 7:44:34

特征工程之特征提取

  • 一、什么是特征工程
  • 二、特征提取
    • 1,字典特征提取
    • 2,文本特征提取
      • (1)英文文本特征提取
      • (2)中文文本特征提取
      • (3)Tf-idf 文本特征提取

一、什么是特征工程

特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程,直接影响机器学习的效果。特征工程包括:特征提取,特征预处理,特征降维。

二、特征提取

# 特征提取api
sklearn.feature_extraction

1,字典特征提取

对字典数据进行特征值化,特征当中存在类别信息的做one-hot编码处理

# DictVectorizer
# sparse 决定返回的是否为稀疏矩阵
sklearn.feature_extraction.DictVectorizer(sparse=True,)
# 常见的方法
DictVectorizer.fit_transform(X) X:字典或者包含字典的迭代器返回值:返回sparse矩阵
DictVectorizer.inverse_transform(X) X:array数组或者sparse矩阵 返回值:转换之前数据格式
DictVectorizer.get_feature_names() 返回类别名称

实操:对 data 字典数据进行特征提取

from sklearn.feature_extraction import DictVectorizer

data = [{'city': '北京','temperature':100}, 
		{'city': '上海','temperature':60},
		{'city': '深圳','temperature':30}]
		
# 实例化一个转换器类
transfer = DictVectorizer(sparse=False)
 
# 调用fit_transform
data = transfer.fit_transform(data)
print("返回的结果:\n", data)
 
# 打印特征名字
print("特征名字:\n", transfer.get_feature_names_out())

可以自行运行没有加上 sparse=False 参数的结果

2,文本特征提取

对数据进行特征值化

# CountVectorizer
# stop_words:停用词表
sklearn.feature_extraction.text.CountVectorizer(stop_words=[])
# 常见的方法
CountVectorizer.fit_transform(X) X:文本或者包含文本字符串的可迭代对象 返回值:返回sparse矩阵
CountVectorizer.inverse_transform(X) X:array数组或者sparse矩阵 返回值:转换之前数据格式
CountVectorizer.get_feature_names() 返回值:单词列表

(1)英文文本特征提取

实操:对 data 英文文本数据进行特征提取

from sklearn.feature_extraction.text import CountVectorizer

data = ["life is short,i like like python", "life is too long,i dislike python"]

# 实例化一个转换器类
transfer = CountVectorizer()

# 调用 fit_transform
data = transfer.fit_transform(data)

print("文本特征抽取的结果:\n", data.toarray())
print("返回特征名字:\n", transfer.get_feature_names_out())

(2)中文文本特征提取

问题:中文数据该怎么处理?
英文默认是以空格分开的,其实就达到了一个分词的效果,但是中文空格隔开的是句子,在特征提取时会按句子来划分特征列表,所以要先用 jieba 对中文进行分词处理

# 下载 jieba 库
pip3 install jieba

实操:对 data 中文文本进行特征提取

from sklearn.feature_extraction.text import CountVectorizer
import jieba

data = ["一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。",
		"我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
	  	"如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]

text_list = []
for d in data:
    text_list.append(" ".join(jieba.cut(d)))
                       
# 1、实例化一个转换器类
transfer = CountVectorizer()
                       
# 2、调用 fit_transform
data = transfer.fit_transform(text_list)

print("文本特征抽取的结果:\n", data.toarray())
print("返回特征名字:\n", transfer.get_feature_names_out())

(3)Tf-idf 文本特征提取

又一问题:该如何处理某个词或短语在多篇文章中出现的次数高这种情况
如果把一些把文章类型无关但是出现多次的词语作为特征,那对于文章分类的判断就会产生干扰。这里用到了 Tf-idf 文本特征提取来解决这个问题。

TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。

公式
在这里插入图片描述

  • 词频(term frequency,tf)指的是某一个给定的词语在该文件中出现的频率
  • 逆向文档频率(inverse document frequency,idf)是一个词语普遍重要性的度量。某一特定词语的idf,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取以10为底的对数得到

例:一篇文件的总词语数是100个,而词语"非常"出现了5次,那么"非常"一词在该文件中的词频就是5/100=0.05。而计算文件频率(IDF)的方法是以文件集的文件总数,除以出现"非常"一词的文件数,再将得到的商取以10为底的对数。所以,如果"非常"一词在1,000份文件出现过,而文件总数是10,000,000份的话,其逆向文件频率就是lg (10,000,000 / 1,0000)=3。最后"非常"对于这篇文档的 tf-idf 的分数为 0.05 * 3 = 0.15

实操:对 data 中文数据进行 Tf-idf 文本特征提取

from sklearn.feature_extraction.text import TfidfVectorizer 
import jieba

data = ["一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。",
		"我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
	  	"如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]

text_list = []
for d in data:
    text_list.append(" ".join(jieba.cut(d)))
                       
# 实例化一个转换器类
transfer = TfidfVectorizer(stop_words=['一种', '不会', '不要'])

# 调用 fit_transform
data = transfer.fit_transform(text_list)

print("文本特征抽取的结果:\n", data.toarray())
print("返回特征名字:\n", transfer.get_feature_names_out())

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

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

相关文章

CRM和SCRM有什么区别?

首先讲下CRM是什么?光是概念就有7个之多: 提出者概念GartnerGroupCRM是一种商业策略,它按照客户的分类情况有效地组织企业资源,培养以客户为中心的经营行为以及实施以客户为中心的业务流程,并以此为手段来提高企业的赢…

低代码平台安全性探究:解析低代码平台的安全性及应对措施

近年来,低代码平台由于能够以最少的代码快速开发应用程序而变得越来越流行。然而,随着数据泄露和网络威胁的增加,企业有理由质疑低码平台是否安全。在本文中,我们将探讨低代码平台安全吗? 一、低码平台如何工作。 在我…

集成websocket实现实时通信(ruoyi 使用笔记)

集成websocket实现实时通信(ruoyi 使用笔记 1.简单介绍WebSocket2.详细代码2.1WebSocketConfig2.2 SemaphoreUtils2.3 WebSocketServer2.4 WebSocketUsers2.5 html2.6 vue版本前端代码2.7 controller 1.简单介绍WebSocket Websocket 是一种基于 TCP 协议的全双工通信协议&#…

加油站“变身”快充站,探讨充电新模式

摘要:新能源汽车规模化发展的同时,充电不便利的痛点愈发明显。在未来的新能源汽车行业发展当中,充电的矛盾要远远大于造车的矛盾,解决好充电的问题成为电动汽车行业发展的一个突出问题。解决充电补能问题,重要的方式之…

自动化测试还是手动测试?深度探讨Web自动化测试的利与弊,精准性和可靠性抉择应如何。

目录 前言: 1. 自动化测试的价值 2. 自动化测试的瓶颈 总结 前言: 随着互联网的飞速发展,Web应用越来越成为我们日常工作和生活中必不可少的一部分。这也就意味着,Web应用的质量和稳定性变得至关重要。而Web自动化测试作为保…

87.建立主体页面-第三部分

上节我们完成的页面如下: ● 我们预计在按钮下面放置一些用户案例 去年我们送了25万多份餐品! ![在这里插入图片描述](https://img-blog.csdnimg.cn/c71d57199b834a8c9763a345939adc5d.png) ● 我们将这些图片文字以flex布局方式排列摆放 .delivered-meals {dis…

ebpf代码编写小技巧

查看所有tracepoint perf list perf追踪tracepoint perf trace --no-syscalls --event net:*查看tracepoint的具体参数 sudo python3 /usr/share/bcc/tools/tplist -v net:napi_gro_receive_entry cat /sys/kernel/debug/tracing/events/net/netif_rx/format内核vmlinux.h生…

Zinx框架学习 - 链接封装与业务绑定

Zinx - V0.2 链接封装与业务绑定 之前的v0.1版本,已经实现了一个基础的Server框架,现在需要对客户端链接和不同的客户端链接锁处理的不同业务再做一层接口封装在ziface下创建一个属于链接的接口文件iconnection.go,znet下创建文件connection…

异步利刃CompletableFuture

什么是CompletableFuture? CompletableFuture 类实现了 Future 和 CompletionStage 接口并且新增了许多方法,它支持 lambda,通过回调利用非阻塞方法,提升了异步编程模型。简单来说可以帮我们实现任务编排。【文中所有代码已上传码云】 Com…

程序员必修必炼的设计模式之工厂模式

本文首发自「慕课网」(www.imooc.com),想了解更多IT干货内容,程序员圈内热闻,欢迎关注"慕课网"或慕课网公众号! 作者:李一鸣 | 慕课网讲师 工厂模式是平时开发过程中最常见的设计模式…

15.3:最多做K个项目,初始资金是W,返回最大资金

输入正数数组costs、正数数组profits、正数K和正数M costs[i]表示i号项目的花费 profits[i]表示i号项目在扣除花费之后还能挣到的钱(利润) K表示你只能串行的最多做k个项目 M表示你初始的资金 说明:每做完一个项目,马上获得的收益,可以支持你…

FP独立站支付渠道市场逐渐向好!信用卡和AB轮询哪个好?

之前一篇文章写过品牌方使用ChatGPT技术检测FP网站,对FP独立站的收款起到了很大的影响。今天是6月的第一天,我为各位带来了一个好消息!那就是在过去的3-5月份,信用卡收款实行整顿,目前支付渠道都有所松动。例如&#x…

好孩子福利|Sup游戏机,一秒回到童年

这份六一礼物对儿童来说有点幼稚,但对程序员刚刚好~ ​ Sup 游戏机,一秒回到童年! 到底有多好玩呢?可以参考 B 站试玩视频! 太火鸟好物推荐——掌上游戏机sup 参加流程: STEP 1:扫…

以太网——MDIO(SMI)接口的FPGA实现

在 MAC 与 PHY 之间,有一个配置接口,即 MDIO(也称 SMI,Serial Management Interface),可以配置 PHY 的工作模式、获取 PHY 芯片的工作状态等。本文以 PHY 芯片 B50610 为例,实现 MDIO 接口&…

NUC972 Linux学习 NAND FLASH 制作系统

设备:NUC972DF61YC 使用的虚拟机环境:官方提供的NUC972DF61YC - Nuvoton 板载NAND FLASH,前期主要学习怎么uboot、ubootspl、uimage、env烧录。官方配置没有使用rootfs在flash中,所以数据会掉电丢失。即文件系统在RAM中。 这里仅…

基于Jackson实现API接口数据脱敏

一、背景 用户的一些敏感数据,例如手机号、邮箱、身份证等信息,在数据库以明文存储(加密存储见《基于Mybatis-Plus拦截器实现MySQL数据加解密》), 但在接口返回数据给浏览器(或三方客户端)时&a…

设计一个支持并发的前端接口缓存

目录​​​​​​​ 缓存池 并发缓存 问题 思考 优化🤔 总结 最后 缓存池 缓存池不过就是一个map,存储接口数据的地方,将接口的路径和参数拼到一块作为key,数据作为value存起来罢了,这个咱谁都会。 const cach…

DTU和MQTT网关优缺点

目前市面上有两种设备实现Modbus转MQTT网关。网关式、DTU式。 钡铼技术网关内部进行转换 网关式 优点: 1、通讯模块和MCU分开,通讯模块只做通讯功能,协议转换有单独主控MCU,“硬转换”; 2、数据点是通过映射到主控…

【严重】GitLab 存在代码执行漏洞

漏洞描述 GitLab 是一款基于Git的代码托管、版本控制、协作开发平台。 GitLab CE/EE 15.4 至 15.9.6 版本,15.10 至 15.10.5 版本和 15.11 至 15.11.1 版本存在代码执行漏洞。在某些条件下,实例上的任何GitLab用户都可以使用GraphQL端点将恶意运行程序…

HTML框架-----标签(下)

目录 前言: 5.容器标签 效果:​编辑 6.列表标签 (1)无序 (2)有序 7.图片标签 8.超链接标签 (1)链接资源 (2)超链接锚点 前言: 今天我们接着来继续学习html的标签&am…