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

news2024/11/17 21:47:32

系列文章目录

机器学习(一) -- 概述

机器学习(二) -- 数据预处理(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()

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

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

相关文章

大数据开发的专业术语

🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 系列专栏目录 [Java项…

画中画视频剪辑:创意与技术的完美结合,批量制作视频不再难

随着科技的飞速发展,视频制作已成为信息时代的一种重要表达方式。其中画中画视频剪辑技术更是以其独特的创意性和技术性,为观众的视觉体验带来了全新的冲击。它不仅为创作者提供了更广阔的创意空间,同时也降低了视频制作的门槛。现在一起来看…

VSCode Jupyter print 函数输出在错误的单元格(cell)

问题描述 最近在复现一个开源项目时,发现执行过该项目中的代码单元格后,其余单元格的print函数输出也会续在该单元格后。而正常情况下print函数输出应该位于其所属的单元格。下图中,我将出现问题的单元格执行后清空了输出,但是在…

深度解析 Compose 的 Modifier 原理 -- Modifier.composed()、ComposedModifier

众所周知:原理性分析的文章,真的很难讲的通俗易懂,讲的简单了就没必要写了,讲的繁琐难懂往往大家也不乐意看,所以只能尽量找个好的角度(比如从 Demo 代码示例出发)慢慢带着大家去钻源码&#xf…

书生·浦语大模型全链路开源开放体系

书生浦语大模型全链路开源体系_哔哩哔哩_bilibili 大模型全链路开源开放体系等你来探索~ https://github.com/internLM/tutorial 书生浦语全链条开源开放体系 1)数据: 书生万卷 2TB数据,并行训练,极致优化涵盖多种模态与任务 预训练: I…

聚道云软件连接器助力某动漫行业公司实现财务自动化

客户介绍 某动漫行业公司是一家专注于文化创意领域,致力于为人们提供独特、有趣的文化产品。公司拥有一支充满活力和创造力的团队,他们以卓越的创意和精湛的技术,创造出了一系列令人惊叹的作品。未来,该公司将继续秉承这一理念&a…

低代码开发平台支持复杂的业务逻辑和API对接吗

当今数字化时代,企业和组织面临着日益复杂的业务需求。为了应对这些挑战,低代码开发平台应运而生。白码低代码开发平台是一种高效、灵活且可扩展的开发工具,能够支持复杂的业务逻辑和第三方API对接,为企业带来更快速、更灵活的解决…

Rust 字符串 初步了解

rust 的字符串 。字符串不是复合类型, String 和 &str : String 具有所有权,是存储在堆上的。&str 没有所有权,是对 String 的引用。字符串字面量也是 &str 类型,存储在栈上。 切片(slice&a…

线性代数 --- 为什么LU分解中L矩阵的行列式一定等于(+-)1?

以下是关于下三角矩阵L的行列式一定等于-1的一些说明 证明:在LU分解中,下三角矩阵L的行列式一定是. 在证明之前,我这里先补充几条关于行列式的性质: 性质1:对于三角矩阵而言,不论是上三角矩阵还是下三角矩…

Qt6学习笔记:对象树

使用QObject及其子类创建的对象是以对象树的形式来组织的。创建一个QObject对象时若设置一个父对象,它就会被添加到父对象的子对象列表里,一个父对象被删除时,其全部的子对象都会自动删除。QObject类的构造函数里有一个参数用于设置对象的父对…

PyTorch基础操作

一、Tensor 在 PyTorch 中,张量(Tensor)是一个核心概念,它是一个用于存储和操作数据的多维数组,类似于 NumPy 的 ndarray,但与此同时,它也支持 GPU 加速,这使得在大规模数据上进行科…

数据结构和算法-希尔排序(增量序列 算法实现 性能分析 稳定性)

文章目录 希尔排序过程小结增量序列不是固定的 算法实现算法性能分析稳定性小结 希尔排序 基本有序,就是存在有序的子序列 通过增量4得到各个子表 对各个子表分别进行插入排序 缩小增量,再除2,此时的子表 对各个子表插入排序 缩小增量&…

数据库设计——DQL

D Q L \huge{DQL} DQL ⭐⭐⭐⭐⭐ DQL:数据库查询语言,用来查询数据库中的记录,非常的重要,对于数据库的操作修改相对来讲还是较少部分,绝大多数操作都是数据查询。 整体的语法结构: 基本查询 示例&#…

2024最新Java基础面试题大全(一)

1、String可以被继承&#xff1f; 不能被继承&#xff0c;因为String类有final修饰符&#xff0c;而final修饰的类是不能被继承的。 public final class String implements java.io.Serializable, Comparable<String>, CharSequence {// 省略...  }2、常见集合类 Java…

C语言编译器(C语言编程软件)完全攻略(第十七部分:Dev C++使用教程(使用Dev C++编写C语言程序))

介绍常用C语言编译器的安装、配置和使用。 十七、Dev C使用教程&#xff08;使用Dev C编写C语言程序&#xff09; 前面我们给出了一段完整的C语言代码&#xff0c;就是在显示器上输出“C语言中文网”&#xff0c;如下所示&#xff1a; #include <stdio.h> int main() {…

Java 新手如何使用Spring MVC RestAPI的加密

目录 前言 为什么需要加密RestAPI&#xff1f; 使用Spring Boot创建RestAPI 使用HTTPS加密RestAPI 使用Spring Security增加安全性 使用JWT实现令牌身份验证 使用Postman测试加密的RestAPI 总结 前言 作者简介&#xff1a; 懒大王敲代码&#xff0c;计算机专业…

HarmonyOS应用开发之DevEco Studio安装与初次使用

1、DevEco Studio介绍 DevEco Studio是基于IntelliJ IDEA Community开源版本打造&#xff0c;面向华为终端全场景多设备的一站式集成开发环境&#xff08;IDE&#xff09;&#xff0c;为开发者提供工程模板创建、开发、编译、调试、发布等E2E的HarmonyOS应用/服务的开发工具。…

【谷歌云】注册谷歌云 创建Compute Engine

文章目录 一、Google Cloud注册1.1 账号信息1.2 付款信息验证1.3 验证成功 二、Compute Engine创建2.1 启动Compute Engine API2.2 创建实例2.3 新建虚拟机实例2.4 等待实例创建完成2.5 查看虚拟机配置信息2.6 创建防火墙规则2.7 SSH远程连接虚拟机 三、参考链接 一、Google Cl…

坐标经纬度的基本运算(2个坐标经纬度的距离、中心点坐标经纬度范围内的坐标计算)

现在的应用大都居于LBS服务&#xff0c;用户地理位置的获取&#xff08;经纬度坐标、所属行政区域&#xff09;&#xff0c;提供服务场所的地理位置也有行政区域信息和坐标信息。 用户与服务场所的联系&#xff0c;就近服务原则的设计&#xff0c;服务场所相对于用户的排序。 …

Java JDBC整合(概述,搭建,PreparedStatement和Statement,结果集处理)

一、JDBC的概述&#xff1a; JDBC&#xff1a;是一种执行sql语句的Java APL&#xff0c;可以为多种关系类型数据库提供统一访问&#xff0c;它由一组用Java语言编写的类和接口组成。有了JDBC&#xff0c;Java人员只需要编写一次程序就可以访问不同的数据库。 JDBC APL&#xf…