机器学习(三) -- 特征工程(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_transform
    data_final = transfer.fit_transform(data_new)
    
    print("data_final:\n", data_final.toarray())
    print("特征名字:\n", transfer.get_feature_names())
    return None

count_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_transform
    data_final = transfer.fit_transform(data_new)

    print("data_final:\n", data_final.toarray())
    print("特征名字:\n", transfer.get_feature_names())
    return None

tfidf_demo()

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

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

相关文章

nginx 一、安装与conf浅析

文章目录 一、安装nginxdocker方式安装linux方式安装Ubuntu 或 Debian 系统:CentOS 或 RHEL 系统: macOS 系统(使用 Homebrew):Windows 系统: 二、nginx.conf浅析 Nginx(发音为“engine-x”&…

服务器CentOs8 安装RocketMQ 4.9.4

前置条件 安装好java环境 下载、上传、解压 下载二进制包 传送门 上传到服务器,这里上传到了/usr/local目录下 解压: unzip rocketmq-all-4.9.4-bin-release.zip移动到新的文件夹 mv /rocketmq-all-4.9.4-bin-release /rocketmq修改配置 修改conf下…

第 378 场 LeetCode 周赛题解

A 检查按位或是否存在尾随零 枚举&#xff1a;枚举两个元素的组合即可 class Solution { public:bool hasTrailingZeros(vector<int> &nums) {int n nums.size();for (int i 0; i < n; i)for (int j 0; j < i; j)if ((nums[i] | nums[j]) % 2 0)return tru…

Python从入门到精通总结规划

Python从入门到精通专栏&#xff1a;http://t.csdnimg.cn/4Lals 时光飞逝&#xff0c;转眼间我们的Python从入门到精通专栏已经接近尾声。 在这里&#xff0c;向大家表示最诚挚的感谢。感谢你们一直以来对Python学习的热情&#xff0c;以及对本专栏的持续关注和支持。 回顾过去…

还在苦苦寻找PPT模板?这5个好用的PPT模板网站来拯救你!

行走职场&#xff0c;一大傍身的能力就是制作PPT&#xff0c;不过每回留给我们制作PPT的时间非常少&#xff0c;时间紧任务重&#xff0c;想在短时间内制作出高颜值的PPT&#xff0c;少不了平时有意识地收藏好看的PPT模板或PPT模板网站。 为方便各位找到可在工作中使用的PPT模…

数据结构学习 jz34 二叉树中和为某一值的路径

关键词&#xff1a;回溯 二叉树 前序遍历 路径记录 因为我没有仔细接触过二叉树的遍历过程&#xff0c;所以我是懵懵懂懂按照dfs的方法写的。没想到写对了&#xff0c;看了解答发现这叫做二叉树的前序遍历。用时29min。 这让我明白了前序遍历和dfs原来是有相同之处的。&#…

从零学算法17

17.给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 1&#xff1a; 输入&#xff1a;digits “23” 输出&#xff1a;[…

GLTF编辑器实现逼真的石门模型

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 在凹凸贴图中&#xff0c;每个像素点都包含了一个法线向量&#xff0…

【开源项目】超经典数字孪生智慧物流园

数字孪生物流园管理系统&#xff0c;具有仓储管理智能化、运输管理自动化、物流管理系统化、共享服务平台化等特点。飞渡科技基于数字孪生、物联网IOT、人工智能等新一代信息技术&#xff0c;以智能设备为基底&#xff0c;通过人、物、资源、系统等多方数据的传递和交互&#x…

记一次canal除坑记录

记一次canal除坑记录 错误信息 Caused by :com.alibaba.otter.canal.parse.exception.CanalParseException: column size is not match for table 问题处理 今天对Canal相关程序进行升级&#xff0c;原监听的表及业务都正常&#xff1b;遇到新增加的表时总是不走&#xff1b;…

【第七在线】智能商品系统是否可以帮助预测新品的销售表现?

智能商品系统在鞋服企业商品运营中的应用已经成为一种趋势。随着技术的发展和数据的积累&#xff0c;智能化已经成为企业提高运营效率和市场竞争力的重要手段。其中&#xff0c;智能商品系统通过对大量销售数据的分析&#xff0c;可以帮助预测新品的销售表现&#xff0c;为企业…

Linux驱动(三)platform总线驱动

1、前言 Platform总线是Linux内核中用于管理嵌入式系统中的设备的一种总线类型。它允许设备驱动程序通过一组标准的接口与嵌入式系统中的硬件设备进行通信。 Platform总线维护了一个驱动链表和一个设备链表&#xff0c;当有新的设备添加后会通过自身的match函数遍历驱动链表查…

【mac-m1 docker 安装upload-labs靶场】

1.搜索upload-labs docker search upload-labs 2.下载upload-labs docker pull c0ny1/upload-labs 3.启动 docker run -it -d --name uploadlabs -p 80:80 c0ny1/upload-labs --platform linux/amd64 4.访问127.0.0.1:80 注意点&#xff1a;后续使用的时候会报错 需要手动创…

LeetCode-无重复字符的最长子串(3)

题目描述&#xff1a; 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 代码&#xff1a; class Solution {public int lengthOfLongestSubstring(String s) {Set<Character> occnew HashSet<Character>();int lens.length();int…

Local server not started, start with 报错python -m weditor

一、python -m weditor 如图报错 Local server not started, start with 报错 二、解决方案 右上角选择新的无痕窗口下&#xff0c;然后打开 http://localhost:17310/ 即可

VMware Tools 启动脚本未能在虚拟机中成功运行。如果您在此虚拟机中配置了自定义启动脚本,请确保该脚本没有错误。您也可以提交支持请求,报告此问题。

问题描述&#xff1a;今天打开centos7虚拟机就是直接打不开了报了下面的错误&#xff0c;也没有动任何东西&#xff0c;点确定后&#xff0c;也是依然没有反应 问题原因&#xff1a;可能是虚拟机中的内存满了&#xff0c;需要清理内存 解决方法如下 首先cmd打开终端敲入如下命…

linux磁盘管理实验1

1.在安装好的linux系统中新加一块硬盘&#xff0c;将硬盘分成2个主分区&#xff0c;和2个逻辑分区&#xff0c;将其中一个逻辑分区设置成vfat&#xff08;FAT32&#xff09;分区&#xff0c;并实现开机自动挂载所有分区。 答&#xff1a;添加一个硬盘为sdb 分成2个主分区&#…

LLM增强LLM;通过预测上下文来提高文生图质量;Spikformer V2;同时执行刚性和非刚性编辑的通用图像编辑框架

文章首发于公众号&#xff1a;机器感知 LLM增强LLM&#xff1b;通过预测上下文来提高文生图质量&#xff1b;Spikformer V2&#xff1b;同时执行刚性和非刚性编辑的通用图像编辑框架 LLM Augmented LLMs: Expanding Capabilities through Composition 本文研究了如何高效地组…

面试算法96:字符串交织

题目 输入3个字符串s1、s2和s3&#xff0c;请判断字符串s3能不能由字符串s1和s2交织而成&#xff0c;即字符串s3的所有字符都是字符串s1或s2中的字符&#xff0c;字符串s1和s2中的字符都将出现在字符串s3中且相对位置不变。例如&#xff0c;字符串"aadbbcbcac"可以由…

透明OLED屏制作:工艺与技术挑战

透明OLED屏作为一种前沿的显示技术&#xff0c;其制作过程涉及一系列复杂的工艺和技术挑战。作为一名专注于OLED技术研发的工程师&#xff0c;我将为大家深入解析透明OLED屏的制作过程&#xff0c;以及所面临的挑战。 首先&#xff0c;透明OLED屏的制作过程大致可分为以下几个步…