机器学习—特征工程(三)

news2024/11/21 0:22:51

什么是特征工程

特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。

  • 意义︰会直接影响机器学习的效果

特征工程的位置与数据处理的比较

在这里插入图片描述

  • pandas:—个数据读取非常方便以及基本的处理格式的工具
  • sklearn:对于特征的处理提供了强大的接口

sklearn 特征工程
pandas 数据清洗、数据处理

特征工程包含内容

  • 特征抽取
  • 特征预处理
  • 特征降维

什么是特征抽取

例一:
在这里插入图片描述
机器学习算法——统计方法——数学公式
文本类型—>数值

例二:
在这里插入图片描述
类型——>数值

特征提取

将任意数据(如文本或图像)转换为可用于机器学习的数字特征

注:特征值化是为了计算机更好的去理解数据

  • 字典特征提取(特征离散化)
  • 文本特征提取
  • 图像特征提取(深度学习将介绍)

特征提取API

sklearn.feature_extraction

字典特征提取

类别——>one-hot编码

作用:对字典数据进行特征值化

  • sklearn.feature_extraction.DictVectorizer(sparse=True,. . .)
    • DictVectorizer.fit_transform(X)×:字典或者包含字典的迭代器返回值:返 回sparse矩阵
    • DictVectorizer.inverse_transform(X) X:array数组或者sparse矩阵返回值:转换之前数据格式
    • DictVectorizer.get_feature_names()返回类别名称

vector 数学:向量 物理:矢量
矩阵 matrix 二维数组
向量 vector 一维数组
父类:transformer

1应用

[{i'city': '北京', ' temperature ' :100},
{ ' city ' : '上海', ' temperature ':60},
{ 'city ': '深圳', ' temperature ' :30}]

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

sparse=True返回稀疏矩阵,元组表示非0值的位置
sparse=False范围二维数组
稀疏矩阵好处就是节省内存,提高加载效率

2流程分析

  • 实例化类DictVectorizer
  • 调用fit_transform方法输入数据并转换(注意返回格式)
from sklearn.feature_extraction import DictVectorizer

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

注意观察没有加上sparse=False参数的结果

pandas中的离散化的时候,也实现了类似的效果。这个处理数据的技巧叫做”one-hot“编码:
在这里插入图片描述
在这里插入图片描述

3总结
对于特征当中存在共别信息的我们都会做one-hot编码处理

4应用场景

  • 数据集当中类别特征比较多
    • 将数据集的特征——>字典类型
    • bictVectorizer转换
  • 本身拿到的数据就是字典类型

文本特征提取

作用:对文本数据进行特征值化

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

1应用
我们对以下数据进行特征提取

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

在这里插入图片描述

在这里插入图片描述

没有sparse=True参数,用.toarray()
单词作为特征,统计每个样本特征词出现的个数

方法1: CountVectorizer

在这里插入图片描述
在这里插入图片描述

中文没有空格的分割
data =[“我 爱 北京 天安门”,“天安门 上 太阳 升"]
在这里插入图片描述

stop_words停用词
在这里插入图片描述在这里插入图片描述

2流程分析

  • 实例化类CountVectorizer
  • 调用fit_transform方法输入数据并转换(注意返回格式,利用toarray()进行sparse矩阵转换array数组)
from sklearn.feature_extraction.text import CountVectorizer

def text_count_demo():
	data = ["life is short,i like python" ,"life is too long,i dislike python"]
	#1、实例化一个转换器类
	# transfer = CountVectorizer(sparse=False)
	transfer = CountVectorizer( )
	#2、调用fit_transform
	data = transfer.fit_transform(data)
	print("文本特征抽取的结果:\n", data.toarray())
	print("返回特征名字:\n",transfer.get_feature_names())

	return None

在这里插入图片描述
在这里插入图片描述

3jieba分词处理

  • jieba.cut()
    • 返回词语组成的生成器

需要安装下jieba库

pip3 install jieba

4案例分析
对以下三句话进行特征值化

今天很残酷,明天更残酷,后天很美好,
但绝对大部分是死在明天晚上,所以每个人不要放弃今天。

我们看到的从很远星系来的光是在几百万年之前发出的,
这样当我们看到宇宙时,我们是在看它的过去。

如果只用一种方式了解某样事物,你就不会真正了解它。
了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。
  • 分析
    • 准备句子,利用jieba.cut进行分词
    • 实例化CountVectorizer
    • 将分词结果变成字符串当作fit_transform的输入值
from sklearn.feature_extraction.text import Countvectorizer
import jieba

def cut_word (text):
#用结巴对中文字符串进行分词
	text = " ".join(list(jieba.cut(text)))
	return text

def text_chinese_count_demo2():
	data = ["今天很残酷,明天更残酷,后天很美好,
但绝对大部分是死在明天晚上,所以每个人不要放弃今天。","我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。","如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]
	#将原始数据转换成分好词的形式
	text_list = []
	
	for sent in data;
		text_list.append(cut_word(sent))
	print(text_list)
	
	#1、实例化一个转换器类
	#transfer = CountVectorizer(sparse=False)
	transfer = 	CountVectorizer()
	#2、调用fit_transform
	data = transfer.fit_transform(text_list)
	print("文本特征抽取的结果:\n", data.toarray( ))
	print("返回特征名字:\n", transfer.get_feature_names())

	return None

在这里插入图片描述

关键词∶在某一个类别的文章中,出现的次数很多,但是在其他类别的文章当中出现很少

方法2:TfidfVectorizer

在这里插入图片描述
5 Tf-idf文本特征提取

  • TF-IDF的主要思想是︰如果某个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
  • TF-IDF作用:用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。

TF-IDF—>重要程度 TF—>词频 IDF—>逆向文档频率
eg:
在这里插入图片描述

5.1公式

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

5.2 API

  • sklearn.feature_extraction.text.TfidfVectorizer(stop_words=None,…)
    • 返回词的权重矩阵
      • TfidfVectorizer.fit_transform(X)
        • X:文本或者包含文本字符串的可迭代对象
        • 返回值:返回sparse矩阵
      • TfidfVectorizer.inverse_transform(X)
        • X:array数组或者sparse矩阵
        • 返回值:转换之前数据格式
      • TfidfVectorizer.get_feature_names()
        • 返回值:单词列表

5.3 流程分析
在这里插入图片描述
在这里插入图片描述

6 Tf-idf的重要性
分类机器学习算法进行文章分类中前期数据处理方式

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

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

相关文章

鹏哥C语言复习——数据存储

目录 版本差异: 数据类型: 进制表示: 大小端储存: 数据运算: 浮点型在内存中的存储: 版本差异: debug和release的区别: 在栈区开辟地址一般是先从高地址开辟 debug创建数组和单…

深度学习图像处理基础工具——opencv 实战2 文档扫描OCR

输入一个文档,怎么进行文档扫描,输出扫描后的图片呢? 今天学习了 opencv实战项目 文档扫描OCR 问题重构:输入图像 是一个含有文档的图像——> 目标是将其转化为 规则的扫描图片 那么怎么实现呢? 问题分解&#…

leetcode.45题:跳跃游戏II

Leetcode.45题:跳跃游戏II /* 题意的理解: nums[0] 只能跳 1 ~ nums[0]步 依次类推:从nums[0] - nums[n - 1] 最少需要多少步数 nums 2 3 1 1 4 nums[0] 2,初始只能跳 1/2步,如跳1步,达到nums[1] 而nums[1] 3,顾第二…

Python学习笔记22 - 文件操作

文件读写的原理 文件读写的操作 常用的文件打开模式 文件对象的常用方法 with语句(上下文管理器)

kubekey 离线安装harbor、k8s、kubesphere

目录 参考文献 了解kubekey 英文和中文 前提条件 部署准备 下载kubukey 离线包配置和制作 配置离线包 制作离线包 离线安装集群 复制KubeKey 和制品 artifact到离线机器 创建初始换、安装配置文件 安装镜像仓库harbor 初始化harbor 项目 修改配置文件 安装k8s集…

一.表单校验

为什么要表单验证? 是为了减轻服务器的压力,让用户体验更好,保证输入的数据符合要求 常用的表单验证 日期格式 表单元素是否为空 用户名和密码 E-mail 地址 身份证号码 实现验证的思路 问题:当输入的表单数据不符合要求时&…

内网渗透-windows权限维持的方法

windows权限维持的方法 文章目录 windows权限维持的方法一、影子账户二、粘滞键后门三、logon scripts后门五、注册表自启动后门六、屏幕保护程序后门七、计划任务后门八、服务自启动后门九、黄金票据十、白银票据十二、bitsadmin十五、CLR劫持 一、影子账户 1.使用如下命令创…

你真的会处理python代码异常吗?

Python 使用称为异常(exception)的特殊对象来管理程序执行期间发生的错误。每当发生让Python不知所措的错误时,它都会创建一个异常对象。如果你编写了处理该异常的代码,程序将继续运行;如果你未对异常进行处理,程序将停…

CodeGemma: Open Code Models Based on Gemma

最近几天,对大模型生成代码的能力比较感兴趣,特此学习了一下大模型怎么在IDE上进行,自动补全你想要的代码。 大模型源码理解-以Gemma为例子 最近也在使用阿里的通义灵码,感觉还挺好用的。通义灵码 摘要: CodeGemma基…

Linux ARM平台开发系列讲解(QEMU篇) 1.2 新添加一个Linux kernel设备树

1. 概述 上一章节我们利用QEMU成功启动了Linux kernel,但是细心的小伙伴就会发现,我们用默认的defconfig是没有找到设备树源文件的,但是又发现kernel启动时候它使用了设备树riscv-virtio,qemu,这是因为qemu用了一个默认的设备树文件,该章节呢我们就把这个默认的设备树文件…

【设计模式学习】单例模式和工厂模式

꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转…

明月三千里许红:25年磨一剑 拒绝网红式短期主义

这是一个关于明月三千里烤肉品牌如何在25年企业经营风口浪尖中,寻求长久生存和发展的故事;也是一个关于明月三千里烤肉品牌如何在25年中追逐流量的同时,不失去初心和品质的深度思考! 在当今快速变化的餐饮市场中,淄博烤…

【CSS】利用Vue实现数字翻滚动画效果

利用Vue实现数字翻滚动画效果 在很多数据可视化的需求中,动态呈现数据变化是一个常见且具有较强视觉冲击力的手段,尤其是数字的实时变化。今天我们将探讨如何使用 Vue.js 和 CSS3 来实现数字的翻滚动画效果,即模拟真实物体在Z轴上翻动的效果…

使用cmake进行打包,包含可执行程序和动态依赖库

平常代码开发中,有时候需要将写的程序打包成压缩包放到目标设备上进行运行测试。用CMake管理工程,实现使用make -jnproc package指令可以将工程进行打包,可执行文件存储在bin文件夹中,依赖库存储在lib文件夹中。 示例 1.工程目录结…

选择自动化工具是一个关键的决策过程

好的自动化软件测试工具,不仅可以有效的缩短全生命周期的交付周期,还可以提高测试的有效性,还可以保证更好的高质量的交付。工具的选型是一项重要的决策过程,工具的采用涉及到企业的效率、成本和长期发展。 1、需求分析 确组织希…

云服务器web环境之mariadb

1.安装mariadb服务 yum install mariadb-server 启动mariadb服务 systemctl start mariadb.service 输入mysql就能使用数据库了。 2.服务相关操作 systemctl stop mariadb.service systemctl restart mariadb.service 2.配置开机自启动 systemctl enable mariadb.serv…

python--5--len()

学习目标: len()#range,list,列表、元组,字符串,包括空格,返回字典的“键值对”个数 学习内容: len()#range,list,列表、元组,字符串,包括空格,返回字典的“键值对”个数 len()--返回对象长度 len()#range,list,列…

matlab学习(三)(4.9-4.15)

一、空域里LSB算法的原理 1.原理: LSB算法通过替换图像像素的最低位来嵌入信息。这些被替换的LSB序列可以是需要加入的水印信息、水印的数字摘要或者由水印生成的伪随机序列。 2.实现步骤: (1)将图像文件中的所有像素点以RGB形…

华为海思数字芯片设计笔试第四套

声明 下面的题目作答都是自己认为正确的答案,并非官方答案,如果有不同的意见,可以评论区交流。 这些题目也是笔者从各个地方收集的,感觉有些题目答案并不正确,所以在个别题目会给出自己的见解,欢迎大家讨论…

1688采集API 接口:轻松实现电商数据采集与官方订单API接口对接

各大平台电商软件大全,优质服务 1688采集API接口,一款助力电商从业者轻松实现阿里巴巴与1688平台商品数据采集接口,在数据为王的电商时代,掌握高效的采集与管理技能,无疑是成功的一把钥匙。 功能概述: 1.…