scikit-learn特征抽取

news2024/11/23 8:08:38

为什么需要特征工程

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

什么是特征工程

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

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

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

特征工程包含内容:

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

什么是特征提取

将任意数据(如文本或图像)转换为可用于机器学习的数字特征
注:特征值是为了计算机更好的去理解数据

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

特征提取API

sklearn.feature_extraction

CountVectorizer_字典特征提取

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

sklearn.feature_extraction.DictVectorizer(sparse=True, …)

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

from sklearn.feature_extraction import DictVectorizer


def dict_demo():
    """
    字典特征抽取
    :return:
    """
    data = [{'city':'北京', 'temperature':100},
            {'city':'上海', 'temperature':60},
            {'city':'深圳', 'temperature':30}]
    # 1、实例化一个转换器类
    #transfer = DictVectorizer() # 返回sparse矩阵
    transfer = DictVectorizer(sparse=False)
    #print(transfer)
    # 2、调用fit_transform()
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new)   # 转化后的
    print("特征名字:\n",transfer.feature_names_)

    return None


if __name__ == "__main__":
    dict_demo()

在这里插入图片描述

CountVectorizer_文本特征提取

单词作为特征

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

  • sklearn.feature_extraction.text.CountVectorizer(stop_words=[]):返回词频矩阵

  • CountVectorizer.fit_transform(X),X:文本或者包含文本字符串的可迭代对象,返回值:返回sparse矩阵

  • CountVectorizer.inverse_transform(X),X:array数组或者sparse矩阵,返回值:转换之前数据格

  • CountVectorizer.get_feature_names():返回值:单词列表

CountVectorizer_英文文本分词

from sklearn.feature_extraction.text import CountVectorizer


def count_demo():
    """
    文本特征抽取:CountVectorizer
    :return:
    """
    # todo 准备数据集
    data = ['life is short,i like python',
            'life is too long,i dislike python']
    # 1、实例化一个转换器类
    """
    标点符号和字符api设置默认不计算在统计数据中
    """
    # todo 统计特征词的个数,实例化方法 CountVectorizer()
    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_out())

    return None


if __name__ == "__main__":
    count_demo()

在这里插入图片描述

CountVectorizer_停用词:stop_words=[]

在文本处理中,因为出现频率过高或者并没有实际意义,而被忽略不计的词汇

  • todo 忽略 is 和 too 两个词不统计
stop_words=['is', 'too']
from sklearn.feature_extraction.text import CountVectorizer


def count_demo():

    """
    文本特征抽取:CountVectorizer
    :return:
    """

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

    # 1、实例化一个转换器类
    # todo 忽略 is 和 too 两个词不统计
    transfer = CountVectorizer(stop_words=['is', 'too'])
    # 2、调用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new.toarray())  # toarray转换为二维数组
    print("特征名字:\n", transfer.get_feature_names_out())

    return None


if __name__ == "__main__":
    count_demo()

在这里插入图片描述

CountVectorizer_中文文本分词

注意:不支持单个中文词!
这个方法是计算特征词出现的个数的

from sklearn.feature_extraction.text import CountVectorizer


def count_demo():
    """
    文本特征抽取:CountVectorizer
    :return:
    """
    data = ['我 爱 北京 天安门',
            '天安门 上 太阳 升']
    # 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_out())

    return None


if __name__ == "__main__":
    count_demo()

在这里插入图片描述
英文是默认按照空格进行分词的,那么中文就得手动进行空格分词,要想自动化就需要使用分词器

from sklearn.feature_extraction.text import CountVectorizer
import jieba


def count_chinese_demo2():
    """
    中文文本特征抽取,自动分词
    :return:
    """
    data = ['一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。',
            '我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。',
            '如果只用一种方式了解某件事物,他就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。']
    data_new = []
    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_out())

    return None


def cut_word(text):
    """
    进行中文分词:“我爱北京天安门” -> "我 爱  北京 天安门"
    :param text:
    :return:
    """

    return ' '.join(jieba.cut(text))


if __name__ == "__main__":
    count_chinese_demo2()

在这里插入图片描述

Tf-idf文本特征提取

  • Tf-idf的主要思想是:如果某个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类
  • Tf-idf作用:用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度
    这种方法是计算特征词的重要程度的
  • TF-IDF:衡量重要程度
  • TF:词频
  • IDF:逆向文档频率,可以由总文件数目 / 包含该词语之文件的数目,再将得到的商取以10为底的对数得到
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
import jieba


def cut_word(text):
    """
    进行中文分词:“我爱北京天安门” -> "我 爱  北京 天安门"
    :param text:
    :return:
    """

    return ' '.join(jieba.cut(text))


def tfidf_demo():
    """
    用TF-IDF的方法进行文本特征抽取
    :return:
    """
    data = ['一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。',
            '我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。',
            '如果只用一种方式了解某件事物,他就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。']
    data_new = []
    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_out())
    return None

if __name__ == '__main__':
    tfidf_demo()

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

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

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

相关文章

Type-C无线麦克风方案

在数字化浪潮的推动下,音频设备正经历着前所未有的变革。从传统的有线麦克风到如今的蓝牙无线麦克风,每一次技术的飞跃都极大地丰富了我们的音频体验。而今,随着Type-C接口的普及与技术的不断成熟,Type-C无线麦克风正悄然成为音频…

数据结构----红黑树

小编会一直更新数据结构相关方面的知识,使用的语言是Java,但是其中的逻辑和思路并不影响,如果感兴趣可以关注合集。 希望大家看完之后可以自己去手敲实现一遍,同时在最后我也列出一些基本和经典的题目,可以尝试做一下。…

DRF——Filter条件搜索模块

文章目录 条件搜索自定义Filter第三方Filter内置Filter 条件搜索 如果某个API需要传递一些条件进行搜索,其实就在是URL后面通过GET传参即可,例如: /api/users?age19&category12在drf中也有相应组件可以支持条件搜索。 自定义Filter …

学习2d直线拟合-2

参考文章 直线拟合算法(续:加权最小二乘)_加权拟合直线法-CSDN博客 对比了参考文中和opencv中的直线拟合权重,不知道理解的对不对,前者是权重平方,后者没有平方

迷雾大陆辅助:VMOS云手机助力升级装备系统秘籍!

在《迷雾大陆》的广阔世界中,装备的选择和获取对于每一位冒险者来说都是至关重要的。为了让玩家能够更轻松地管理装备并在冒险中获得更高的效率,VMOS云手机提供了专属定制版云手机,内置游戏安装包,不需要重新下载安装游戏。VMOS云…

【VectorNet】vectornet网络学习笔记

文章目录 前言(vectornet算法流程)(向量表示)(图构建)(子图构建)(全局图构建)(解码器: 轨迹预测)(辅助研究)(损失函数)(实验)(问题厘清) VectorNet Overview 前言 论文: https://arxiv.org/pdf/2005.04259代码: https://github.com/xk-huang/yet-another-vectornet年份: 2020.…

Hadoop联邦模式搭建

在Hadoop架构中提供了三类搭建方式,第一类是给测试或开发人员使用的伪分布式或单NN节点搭建方式,第二类是用来商用化并解决NN单点故障的HA搭建方式,第三类就是这里要说的联邦模式,它本身也是一种供给商用的模式,但是它…

【Apache Doris】周FAQ集锦:第 19 期

【Apache Doris】周FAQ集锦:第 19 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目! 在这个栏目中,每周将筛选社区反馈的热门问题和话题,重点回答并进行深入探讨。旨在为广大用户…

openmediavault 存储安装

1、简介 openmediavault NAS存储,支持linux和windows文件共享(文件系统共享),有中文web界面,有filebrowser插件可以web界面管理、下载文件,有FTP插件支持ftp操作,有用户管理;插件丰富…

“七人团裂变风暴:重塑社交电商格局

在当今商业浪潮中,七人共创团购模式以其独特的魅力,正引领着中小型企业走向市场的新高地。这一模式巧妙融合了社交电商的精髓与拼购的乐趣,不仅加速了用户群体的指数级增长,还极大地提升了产品的市场渗透率与品牌影响力。同时&…

TQSDRPI开发板教程:单音回环测试

将我提供的启动文件复制到SD卡中,并插入开发板,插入串口线,启动模式设置为SD卡启动,开启开关。提供的文件在文章末尾。 ​ 查看串口输出内容 ​ 在串口输出的最后有写命令可以使用 ​ 在串口输入如下内容可以对输出的信号进…

计算机毕业设计选题推荐-游戏比赛网上售票系统-Java/Python项目实战

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

二叉树的分层遍历、栈的压入弹出序列

本章主要来讲解两个OJ题,针对每个OJ题我分三部分来解决,分别是题目解析(主要弄清楚题目要求我们解决什么问题),算法原理,代码编写,接下来让我们进入正题。 一、二叉树的分层遍历 1.题目解析 题…

VSCODE 使用正则表达式匹配替换有规律的行

需求描述 我有类似的文本 count count_l24 count_l32 count count count我需要逐行替换l24,l32所在行,其他行保留。 步骤 替换的时候找到正则表达式的选项 输入: ^._l.$ 替换为空行就行.

攻防世界-web题型-7星难度汇总-个人wp

Web_php_wrong_nginx_config 这个题目nginx配置错误 随便输入显示网站还没建设好。。。 先信息收集一下 换了个无敌好看的终端 没想到7星了还玩这些。。。 看了admin的页面需要先登录 现在的问题是如果读取到这个文件 这个hack的文件也没有东西 到此就不知道了&#xff0…

【二叉树---堆的C语言实现】

1.树的概念与结构 树是一种非线性的数据结构,它n(N>0)个有限节点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂着的树,也就是说它是根朝上,而叶朝下的。 有一个特殊的节点,称为根节…

【基础算法】位运算

位运算 概念位运算模板模板题 概念 异或(x⊕y或x ^ y) 高低位交换:https://www.luogu.com.cn/problem/P1100 题意:给定一个32 3232位整数x xx,在二进制下交换其前16 1616位与后16 1616位,输出最终的数。 答案为ans (…

JVM系列--垃圾回收

在C/C这类没有自动垃圾回收机制的语言中,一个对象如果不再使用,需要手动释放,否则就会出现内存泄漏。内存泄漏指的是不再使用的对象在系统中未被回收,内存泄漏的积累可能会导致内存溢出。 在这段代码中,通过死循环不停…

besier打断和升阶,高阶性质

欢迎关注更多精彩 关注我,学习常用算法与数据结构,一题多解,降维打击。 问题描述 对besier曲线在u处打断,生成两条besier曲线对besier曲线升阶处理 bezier高阶性质 求导推导 P ( t ) ∑ i 0 n B i n ( t ) b i \boldsymbol …

uniapp中H5网页怎么实现自动点击事件

<template><view><button ref"myButton" click"handleClick">点击我</button></view> </template><script> export default {mounted() {this.$nextTick(() > {const button this.$refs.myButton;console.l…