机器学习(三) -- 特征工程(1)

系列文章目录

机器学习(一) -- 概述

机器学习(二) -- 数据预处理(1-3)

机器学习(三) -- 特征工程(1-2)

未完待续……


目录

系列文章目录

前言

一、特征工程简介

1、特征工程定义:

2、特征工程包含内容:

二、特征提取

1、定义

2、字典特征提取

3、文本特征提取

3.1、 英文文本分词

3.1.1、停用词方法

3.2、中文文本分词

3.2.1、普通方法

3.2.2、jieba实现自动分词

3.2.3、Tf-idf文本特征提取


机器学习(三) -- 特征工程(2)


前言

tips:这里只是总结,不是教程哈。

“***”开头的是给好奇心重的宝宝看的,其实不太重要可以跳过。

此处以下所有内容均为暂定,因为我还没找到一个好的,让小白(我自己)也能容易理解(更系统、嗯应该是宏观)的讲解顺序与方式。

第一文主要简述了一下机器学习大致有哪些东西(当然远远不止这些),对大体框架有了一定了解。接着我们根据机器学习的流程一步步来学习吧,掐掉其他不太用得上我们的步骤,精练起来就4步(数据预处理,特征工程,训练模型,模型评估),其中训练模型则是我们的重头戏,基本上所有算法也都是这一步,so,这个最后写,先把其他三个讲了,然后,在结合这三步来进行算法的学习,兴许会好点(个人拙见)。


一、特征工程简介

其实数据预处理和特征工程,两者并无明显的界限,都是为了更好的探索数据集的结构,获得更多的信息,将数据送入模型中之前进行整理。可以说数据预处理是初级的特征处理,特征工程是高级的数据预处理,也可以说这里的预处理过程是广义的,包含所有的建模前的数据预处理过程。

(简单理解,就是数据预处理是数据本身的问题,如数据缺失;特征工程是为了更好的让数据进行机器学习,如进行降维)

为什么需要特征工程?

数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。

所以需要在特征上下功夫。

1、特征工程定义:

特征工程是使用一定技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。会直接影响机器学习的效果。

2、特征工程包含内容:

特征提取(特征抽取)、特征预处理、特征降维

(基本上==特征构建、特征变换(特征缩放)、特征选择)

二、特征提取

1、定义

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

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

主要分为字典特征提取(特征离散化)、文本特征提取、图像特征提取(深度学习再介绍)

特征提取API是

sklearn.feature_extraction

2、字典特征提取

字典特征提取API

sklearn.feature_extraction.DictVectorizer导入:
from sklearn.feature_extraction import DictVectorizer
# 创建数据集
data = [{'name':'薰悟空', 'age':1160}, {'name':'朱八姐', 'age':235}, {'name':'傻无能', 'age':9000}]

# 提取特征值,转化为稀疏矩阵
# 1、实例化转换器类
transfer = DictVectorizer()# 2、提取特征值
feature_data = transfer.fit_transform(data)print('稀疏矩阵特征值\n', feature_data)
print('特征名字:', transfer.get_feature_names())

 DictVectorizer()使用默认参数会返回一个稀疏矩阵(sparse矩阵)。其实就是一个和下面的操作出现的一样的矩阵,只是采用三元组的格式保存,能减少存储空间的开销。

三元组:(行号,列号,元素值)

上面稀疏矩阵特征值换为矩阵为:

0(age)1(name=傻无能)2(name=朱八姐)3(name=薰悟空)
01160001
1235010
29000100

 然后特征名称对应的就是分别的列号,即0为‘age’,1为‘name=傻无能’,2为‘name=朱八姐’,3为‘name=薰悟空’。

DictVectorizer(sparse=False)返回一个One-hot编码矩阵。

# 提取特征值,转化为二维矩阵
# 1、实例化转换器类
transfer = DictVectorizer(sparse=False)# 2、提取特征值
feature_data = transfer.fit_transform(data)print('二维矩阵特征值:\n', feature_data)
print('特征名字:', transfer.get_feature_names())

一般这样使用。

3、文本特征提取

文本特征提取API

sklearn.feature_extraction.text.CountVectorizer
导入:
from sklearn.feature_extraction.text import CountVectorizer

3.1、 英文文本分词

# 1、实例化一个转换器类
transfer = CountVectorizer()# 2、调用fit_transform
data_new = transfer.fit_transform(data)print("data_new:\n", data_new.toarray())  # toarray转换为二维数组
print("特征名字:\n", transfer.get_feature_names())

一样把特征名字和列名对应上去

0(dislike)1(is)2(life)3(like)4(long)5(python)6(short)7(too)
001120110
211101101
3.1.1、停用词方法

给转换器传入停用词的列表,stop_words=['is', 'too'],其中的词不会被提取。

transfer = CountVectorizer(stop_words=['is', 'too'])

3.2、中文文本分词

3.2.1、普通方法

这种实现只能通过给中文加空格才行。

# 1、实例化一个转换器类
transfer = CountVectorizer()# 2、调用fit_transform
data_new = transfer.fit_transform(data)print("data_new:\n", data_new.toarray())  # toarray转换为二维数组
print("特征名字:\n", transfer.get_feature_names())

3.2.2、jieba实现自动分词

需要先下载jieba哟

pip install jieba

def cut_word(text):return ' '.join(jieba.cut(text))def count_chinese_demo2():for sent in data:data_new.append(cut_word(sent))print(data_new)# 1、实例化一个转换器类transfer = CountVectorizer()# 2、调用fit_transformdata_final = transfer.fit_transform(data_new)print("data_final:\n", data_final.toarray())print("特征名字:\n", transfer.get_feature_names())return Nonecount_chinese_demo2()

3.2.3、Tf-idf文本特征提取

Tf-idf文本特征提取API:

sklearn.feature_extraction.text.TfidfVectorizer
导入:
from sklearn.feature_extraction.text import TfidfVectorizer

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

TF:词频(term frequency,tf),指的是某一个给定的词语在该文件中出现的频率。

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

    ,其得出结果可以理解为重要程度

TF-IDF作用:用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。

def cut_word(text):return ' '.join(jieba.cut(text))def tfidf_demo():for sent in data:data_new.append(cut_word(sent))print(data_new)# 1、实例化一个转换器类transfer = TfidfVectorizer()# 2、调用fit_transformdata_final = transfer.fit_transform(data_new)print("data_final:\n", data_final.toarray())print("特征名字:\n", transfer.get_feature_names())return Nonetfidf_demo()

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

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

相关文章

全视通-医院智能视讯系统 病房视讯系统解决方案 智能医院对讲系统信息发布系统

医院智能视讯系统解决方案 1、行业背景 对于患者来说现阶段各大医院的住院部大都面临同样的问题,例如患者就医缺乏精准化医疗,缺乏对患者的心理健康引导,缺乏多维度沟通渠道,缺乏多元增值服务等。 对于传统医院住院部病房&am…

JVM篇:字符串常量池

String类型字符串常量池问题 public class demo2 {public static void main(String[] args) {String s1 "a";String s2 "b";String s3 "ab";} } 对以上代码进行编译得到字节码文件后使用javap -c [字节码文件]反汇编得到以下信息 Constant…

自定义标记

章节目录: 一、概述二、使用自定义标记三、注册自定义标记3.1 创建文件3.2 修改文本编码格式 四、执行测试五、结束语 一、概述 pytest 可以支持自定义标记,自定义标记可以把一个 web 项目划分多个模块,然后指定模块名称执行。譬如我可以标明…

企业邮箱发送会议邀请:简单高效的邮件安排技巧与指南

通过电子邮件安排会议是工作中的常见做法。这也是确认口头安排的会议的一种有益方式。在本视频中,我们将详细介绍此类电子邮件的基本部分! 您可能出于多种原因需要安排会议,例如安排面试、跟进业务主管或与潜在客户探讨项目。通过电子邮件有效…

HarmonyOS4.0系统性深入开发14AbilityStage组件容器

AbilityStage组件容器 AbilityStage是一个Module级别的组件容器,应用的HAP在首次加载时会创建一个AbilityStage实例,可以对该Module进行初始化等操作。 AbilityStage与Module一一对应,即一个Module拥有一个AbilityStage。 DevEco Studio默…

高并发如何保证接口的幂等性?

前言 接口幂等性问题,对于开发人员来说,是一个跟语言无关的公共问题。本文分享了一些解决这类问题非常实用的办法,绝大部分内容我在项目中实践过的,给有需要的小伙伴一个参考。 不知道你有没有遇到过这些场景: 有时我…

Open3D聚类算法

按照官网的例子使用聚类,发现结果是全黑的。 经过多次测试发现 eps3.3, min_points1这里是关键 min_points必须等于1否则无效果 import time import open3d as o3d; import numpy as np; import matplotlib.pyplot as plt#坐标 mesh_coord_frame o3d.geometry.Tria…

css sourcemap 源代码映射

vue.config.js css: {// Enable CSS source maps.sourceMap: process.env.NODE_ENV ! production, }重新运行:yarn serve 效果:

计算机基础知识——数据的表示概述

目录 1 进制转换 1.1 二进制、十进制和十六进制等常用数制及其相互转换 1.2 十进制和二进制之间转换 1.3 二进制数与八进制数、十六进制数之间的转换 2 码值:原码、反码、补码 2.1 原码 2.2 反码 2.3 补码 3 浮点数表示 3.1 浮点数的运算 1 进制转换 1…

MR实战:网址去重

文章目录 一、实战概述二、提出任务三、完成任务(一)准备数据1、在虚拟机上创建文本文件2、上传文件到HDFS指定目录 (二)实现步骤1、创建Maven项目2、添加相关依赖3、创建日志属性文件4、创建网址去重映射器类5、创建网址去重归并…

【Java】LockSupport原理与使用

LockSupport: 关键字段: private static final sun.misc.Unsafe UNSAFE;private static final long parkBlockerOffset; Unsafe:"魔法类",较为底层,在LockSupport类中用于线程调度(线程阻塞、线程恢复等)。…

Windows安装部署nginx

1、官网下载安装包: 官网地址:https://nginx.org/en/download.html 下载好后,解压即可: 在nginx的配置文件是conf目录下的nginx.conf,默认配置的nginx监听的端口为80,如果本地80端口已经被使用则修改成其…

STM32F103C8T6制作简易示波器

1设计需求 通过stm32f103c8t6实现一个简易示波器功能,该示波器可以检测0-3.6khz频率范围内的波形。 也可以输出波形,输出方波、三角波、正弦波。 2技术方案 通过stm32的ADC功能,采集输入信号,最后由oled屏进行显示。 采样频率…

图像分割实战-系列教程10:U2NET显著性检测实战2

🍁🍁🍁图像分割实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 U2NET显著性检测实战1 U2NET显著性检测实战2 U2NET显著性检测实战3 5、残差Unet模块 class RSU7(n…

MySQL基础篇(四)事务

一、事务简介 事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一期向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。 注意: 默认 MySQL 的事务是 自动提交 的&#…

重磅发布|博睿数据2023年度精选案例集—— IT运维之光

当前,数字经济已经成为全球经济增长的重要引擎。随着新技术的飞速发展,企业数字化转型机遇不断涌现,而稳定、安全、可靠的IT运维环境是实现数字化转型的关键。 在此背景下,AIOps 智能运维正成为企业高效管控种类繁多数量庞大的物…

CommonJS 和 ES6 Module:一场模块规范的对决(下)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

【Python学习】2024PyCharm插件推荐

目录 【Python学习】2024PyCharm插件推荐 1. Key Promoter X2.Rainbow CSV3.Markdown4.Rainbow Brackets5.Indent Rainbow6.Regex Tester7.Regex Tester8.Background Image Plus9.Material Theme UI10. Chinese 汉化插件参考 文章所属专区 Python学习 1. Key Promoter X 方便…

frp配置内网穿透访问家里的nas

frp配置内网穿透访问家里的nas 需求 家里局域网内有台nas,在去公司的路上想访问它 其内网地址为: http://192.168.50.8:6002 工具 1.frp版本v0.53.2 下载地址: https://github.com/fatedier/frp/releases/download/v0.53.2/frp_0.53.2_li…

十、基本对话框大集合(Qt5 GUI系列)

目录 一、设计需求 二、实现代码 三、代码解析 四、总结 一、设计需求 Qt提供了很多标准的对话框。例如标准文件对话框(QFileDialog)、标准颜色对话框(QColorDialog)、标准字体对话框 (QFontDialog)、标准输入对话框 (QInputDialog) 及消息对话框 (QMessageBox)。本文展示各…