【一起从0开始学习人工智能0x02】字典特征抽取、文本特征抽取、中文文本特征抽取

news2024/9/28 3:31:33

注:最后有面试挑战,看看自己掌握了吗

文章目录

  • 什么是特征工程?
      • 用什么做?
      • 1.特征提取
      • 特征值化:
      • 特征提取API
  • 字典特征提取---向量化---类别--》one-hot编码
      • 哑变量
      • one-hot-------直接1234会产生歧义,不公平
      • 应用场景
  • 文本特征提取
      • 实例
  • 中文文本特征抽取---jieba结巴

什么是特征工程?

算法 特征工程
影响最终效果--------数据和特征工程 决定了机器学习的上限,而模型和算法只是逼近这个上限而已。

意义:直接影响机器学习效果
一种数据处理

用什么做?

pandas------数据清洗、数据处理
sklearn------对特征处理提供了强大的接口

1.特征提取

比如文章分类
机器学习算法-------统计方法------数学公式
文本类型—》数值
类型-------》数值
任意数据-----------》用于机器学习的数字特征

特征值化:

字典特征提取---------特征离散化
文本特征提取
图像特征提取---------深度学习

特征提取API

sklearn.featurn_extraction()

字典特征提取—向量化—类别–》one-hot编码

sklearn.featurn_extraction.DicVertorizer(sparse=True,...)

vector 向量、
matrix矩阵----二维数组
vector 一维数组

父类:转换器类

哑变量

哑变量定义
哑变量(DummyVariable),也叫虚拟变量,引入哑变量的目的是,将不能够定量处理的变量量化,在线性回归分析中引入哑变量的目的是,可以考察定性因素对因变量的影响,

它是人为虚设的变量,通常取值为0或1,来反映某个变量的不同属性。对于有n个分类属性的自变量,通常需要选取1个分类作为参照,因此可以产生n-1个哑变量。

如职业、性别对收入的影响,战争、自然灾害对GDP的影响,季节对某些产品(如冷饮)销售的影响等等。

这种“量化”通常是通过引入“哑变量”来完成的。根据这些因素的属性类型,构造只取“0”或“1”的人工变量,通常称为哑变量(dummyvariables),记为D。

举一个例子,假设变量“职业”的取值分别为:工人、农民、学生、企业职员、其他,5种选项,我们可以增加4个哑变量来代替“职业”这个变量,分别为D1(1=工人/0=非工人)、D2(1=农民/0=非农民)、D3(1=学生/0=非学生)、D4(1=企业职员/0=非企业职员),最后一个选项“其他”的信息已经包含在这4个变量中了,所以不需要再增加一个D5(1=其他/0=非其他)了。这个过程就是引入哑变量的过程,其实在结合分析(ConjointAnalysis)中,就是利用哑变量来分析各个属性的效用值的。
此时,我们通常会将原始的多分类变量转化为哑变量,每个哑变量只代表某两个级别或若干个级别间的差异,通过构建回归模型,每一个哑变量都能得出一个估计的回归系数,从而使得回归的结果更易于解释,更具有实际意义。

将类别转换成了one-hot编码
sparse-------稀疏矩阵--------------返回值-----省内存,提高加载速度------将非零值按位置表示出来

1.DictVectorizer()使用默认参数会返回一个稀疏矩阵
代码如下:

#1)实例化一个转换器类 2)调用fir_transform()方法
from sklearn.feature_extraction import  DictVectorizer#导包
#下面的data是数据
data=[{'city':'北京','tempreature':100},
      {'city':'上海','tempreature':60},
      {'city':'深圳','tempreature':30},]

#1实例化一个转换器类
transfer=DictVectorizer()
#2调用一fit_transform()方法
data_new=transfer.fit_transform(data)
print("看一下转换的结果data_new:\n",data_new)
print("看一下特征的名字:\n",transfer.get_feature_names())

运行结果如下:
看一下转换的结果data_new:

(0, 1) 1.0
(0, 3) 100.0
(1, 0) 1.0
(1, 3) 60.0
(2, 2) 1.0
(2, 3) 30.0

看一下特征的名字:
[‘city=上海’, ‘city=北京’, ‘city=深圳’, ‘tempreature’]

在这里插入图片描述

data_new 
 [[  0.   1.   0. 100.]
 [  1.   0.   0.  60.]
 [  0.   0.   1.  30.]]

one-hot-------直接1234会产生歧义,不公平

所以用onehot

应用场景

  1. pclass sex 数据集类别特征较多的情况

将数据集的特征转换为字典类型,
DictVectorizer转换

  1. 本身拿到的数据就是字典类型

文本特征提取

单词作为特征
句子、短语、单词、字母

单词最合适
特征:特征词

实例

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer
def datasets_demo():
    #获取数据集
    iris = load_iris();
    print('鸢尾花数据集的描述:\n', iris.data, iris.data.shape)
    x_train, x_test, y_train, y_test=train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)
    print("xunlianjitezhengzhi:\n:", x_train, x_train.shape)

    return None
def count_demo():
    data = ["The voice of one man is the voice of no one one",
            "The voice of one woman is the voice of  one"]
    # 1.实例化一个转换器类
    transfer = CountVectorizer()  # 注意CountVecotrizer()没有sparse参数,所以无法通过调节sparse参数来调节返回的结果
    # transfer = CountVectorizer(stop_words=['one']) # 注意CountVecotrizer()有一个stop_words参数用于去除不需要提取的词,且stop_words必须传一个列表对象

    # 2.调用实例对象的fit_transform()
    new_data = transfer.fit_transform(data)  # 会自动去除单个词
    # print("new_data:\n",new_data) # 返回稀疏矩阵(通常默认情况下都是返回稀疏矩阵)
    print("new_data:\n", new_data.toarray())  # 返回密集矩阵

    return None
if __name__ == "__main__":
    # datasets_demo()
    count_demo()
new_data:
 [[1 1 1 2 3 2 2 0]
 [1 0 0 2 2 2 2 1]]

Process finished with exit code 0

countVectorizer统计每个样本特征词出现的个数

中文无法用此方法划分,会把一句话当作一个词,可以手动分词解决
借助工具:jieba分词---------结巴

中文文本特征抽取—jieba结巴

import sklearn.feature_extraction.text as text
import jieba
 
transfer = text.CountVectorizer(stop_words=['vb'])

def count_chinese_demo2():
    data = ['发表回复这件事', '飞机里面飞一杯飞机专属奶茶', '没有什么比在飞机上喝一杯飞机专属的飞机奶茶要更好了']
    data_new = []
    # 中文文本分词
    for send in data:
        data_new.append(' '.join(list(jieba.cut(send))))
    print(data_new)
 
    # 文本特征提取
    data_final = transfer.fit_transform(data_new)
    print(data_final.toarray())
   # print(transfer.get_feature_names())
 
if __name__ == "__main__":
    count_chinese_demo2()
['发表 回复 这件 事', '飞机 里面 飞 一杯 飞机 专属 奶茶', '没有 什么 比 在 飞机 上 喝一杯 飞机 专属 的 飞机 奶茶 要 更好 了']
[[0 0 0 1 0 1 0 0 0 1 0 0]
 [1 1 0 0 0 0 1 0 0 0 1 2]
 [0 1 1 0 1 0 1 1 1 0 0 3]]

Process finished with exit code 0

🌸I could be bounded in a nutshell and count myself a king of infinite space.
 特别鸣谢:木芯工作室
特别鸣谢:木芯工作室 、Ivan from Russia


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

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

相关文章

Python 10k+ 面试试题,看看你是否掌握

前言 大家早好、午好、晚好吖 ❤ ~ 面试实战题:采集世界最大旅游平台Tripadvisor 另我给大家准备了一些资料,包括: 2022最新Python视频教程、Python电子书10个G (涵盖基础、爬虫、数据分析、web开发、机器学习、人工智能、面试题&#xff…

Python GUI编程:音乐播放器(多线程、爬虫、进度条、文件)

文章目录1. 程序运行结果2.程序实现原理3. GUI布局4. 功能介绍5. 代码实现1. 程序运行结果 Python实现音乐播放器(爬虫、多线程、进度条、文件)2.程序实现原理 本音乐播放器GUI方面运用Python的tkinter实现,播放的音乐来自网络爬虫和本电脑已经有的。为了使整个程序…

Android studio设置全屏显示的两种方式

两种在Androidstudio中设置全屏的方式,推荐第二种 第一种(Java文件中设置) 直接在onCreate()函数中设置 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);package com.exa…

MARKETS AND MARKET LOGIC——The Market‘s Principles (6)_3

市场的组成——对行为观察的反思 制定市场理解 理解市场逻辑将有助于每个参与者提高其在市场上成功的可能性,因为他将能够阅读市场活动并接收市场生成的信息,这些信息很少有参与者承认或理解。这一信息特别涉及市场如何接受或拒绝随着时间的推移而升高或…

Linux用户标识符UID与GID和用户账号

1.用户标识符UID和GID UID 表示的是用户的标识(User Identification) GID 表示的是用户组的标识(Group Identification) 显示用户ID信息。 命令:id username 2.用户账号 用户和用户组的信息都存放在…

RabbitMQ(一)Windows下载安装

目录一、下载安装包二、安装erlang三、安装RabbitMQ四、配置RabbitMQ管理界面官网地址:https://www.rabbitmq.com/ 下载地址:https://www.rabbitmq.com/download.html 一、下载安装包 RabbitMQ Windows下载地址:https://www.rabbitmq.com/in…

001. Nginx场景,优点,组成部分和编译

目录一: Nginx三个重要的使用场景二: Nginx的优点三:Nginx文件的组成部分四:编译Nginx一: Nginx三个重要的使用场景 静态资源服务 疑问:为什么需要静态资源服务?答: 在整个的web请求…

string_string数据类型概括

目录string数据类型创建字符串的三种方式检查字符串的方法常用的字符串方法字符串遍历切割字符串为数组​截取子串判断某个字符串是否出现在当前字符串中文本匹配-match、(es6)matchAll文本替换-replace、(es6)replaceAll(es6)获取某个位置的字符串有关ASCII码的方法获取某字符…

Good Bye 2022: 2023 is NEAR C Koxia and Number Theory

Problem - C - Codeforces 题意: 给定一个数列a,问你是否存在一个数 x 使得所有数加上x之后两两互质 思路: 一、 我们知道一个结论,一些数两两之间互质,就说明所有数之间的质因子都不重合 如果要我们去判断一堆数…

回顾与展望Zebec举办的“Web3.0 TechHive Summit 2022 大会”

随着流支付生态 Zebec 不断的实现商业进展,我们看到,其生态从Solana陆续的迁移到以BNB Chain为代表的EVM链上,并推出了以ZK-Rollup为主要技术手段的公链Zebec Chain,以在未来服务且满足于Web2、Web3世界的发展需求。 Zebec正在成…

若依框架:前端项目结构与初始页面渲染流程

目录 main.js入口文件 前端页面初始化 package.json配置文件 vue-cli:.env模式和环境变量配置 vue-cli三大核心构件 CLI 服务与npm scripts vue-cli-service命令与.env模式配置文件 .env模式和环境变量配置 vue.config.js:项目启动-自动打开默认…

pycharm如何设置python文件模板

pycharm如何设置python文件模板设置文件模板预定义变量设置自定义模板变量设置文件模板 打开设置界面 进入编辑器->文件和代码模板 此处我只写了文件头注释模板,也可以加一些默认代码,比如: python if __name__ "__main__":…

NC65在单据添加按钮跳转到固定单据,且进行数据初始化

实现功能 下面两个是按钮 下面红框里面的内容是上面单据带过来的 上面就是本地代码实现的功能 具体实现代码 提前约定 为了方便称呼,这里把第一张图称为上游单据,第二张图为下游单据 所有代码AggVo都要替换成你自己的 配置文件 上游单据拓展配置文…

2023年天津美术学院专升本专业课线上考试安排准备及设备操作说明

天津美术学院2023年高职升本招生专业考试考生须知及操作说明一、考试时间安排二、考前准备 (一)纸张及其他材料(二)考试设备及网络 1.考生须提前准备好至少两部智能手机,为确保网络考试顺利进行,建议考生使用最近3年上市的主流品牌手机(如iPh…

太强了!这么设计中间件完美解决了百万并发的问题!

V-xin:ruyuan0330 获得600页原创精品文章汇总PDF 目录 一、大部分人对Java并发仍停留在理论阶段二、中间件系统的内核机制:双缓冲机制三、百万并发的技术挑战四、内存数据写入的锁机制以及串行化问题五、片机制 分段加锁机制 六、缓冲区写满时的双缓冲…

c++ - 第19节 - c++11

1.C11简介 c11简介:在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1),使得C03这个名字已经取代了C98称为C11之前的最新C标准名称。不过由于C03(TC1)主要是对C98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯…

Pycharm打开Project(工程)时停留在preparing workspace时间过长,导致打开很慢的解决方法...

Pycharm打开Project(工程)时停留在preparing workspace时间过长,导致打开很慢的解决方法… 昊虹君用Pycharm进行Python的开发,一直用得好好的,也没作过什么异常操作,但是从上星期开始,打开Project(工程)时停留在preparing worksp…

【王道操作系统】2.1.1 进程的定义、特征、组成、组织

进程的定义、特征、组成、组织 文章目录进程的定义、特征、组成、组织1.进程的定义2.进程的特征3.进程的组成4.进程的组织1.进程的定义 程序的概念: 进程的概念: 进程和程序的区别和联系: 区别: 进程是动态的,程序是静…

Linux系统下crond任务调度指令的常见用法

Linux系统下crond任务调度指令的常见用法 任务调度 任务调度是指系统在某个时间执行的特定的命令或程序。任务调度分类:1)系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等;2)个别用户工作:个别用户可能希望执行某些程序,比如对mysql数据库的备份。 基本语…

【攻防世界】网鼎杯2018 Web fakebook

学web总是能让我学到新的知识,很开心,很有趣,很好玩 打开题目 一个登录按钮,一个注册按钮,其余没有什么发现,对于web来说,常规先测试一下robots.txt文件 果然又发现,有一个bak文件…