首页 > 其他分享 >机器学习—特征工程(三)

机器学习—特征工程(三)

时间:2024-04-11 12:29:42浏览次数:19  
标签:机器 fit 特征 text transform feature 学习 sparse data

什么是特征工程

特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。

  • 意义︰会直接影响机器学习的效果

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

在这里插入图片描述

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

sklearn 特征工程
pandas 数据清洗、数据处理

特征工程包含内容

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

什么是特征抽取

例一:
在这里插入图片描述
机器学习算法——统计方法——数学公式
文本类型—>数值

例二:
在这里插入图片描述
类型——>数值

特征提取

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

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

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

特征提取API

sklearn.feature_extraction

字典特征提取

类别——>one-hot编码

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

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

vector 数学:向量 物理:矢量
矩阵 matrix 二维数组
向量 vector 一维数组
父类:transformer

1应用

[{i'city': '北京', ' temperature ' :100},
{ ' city ' : '上海', ' temperature ':60},
{ 'city ': '深圳', ' temperature ' :30}]

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

sparse=True返回稀疏矩阵,元组表示非0值的位置
sparse=False范围二维数组
稀疏矩阵好处就是节省内存,提高加载效率

2流程分析

  • 实例化类DictVectorizer
  • 调用fit_transform方法输入数据并转换(注意返回格式)
from sklearn.feature_extraction import DictVectorizer

def dict_demo( ) :
	data = [{i'city': '北京', ' temperature ' :100},{ ' city ' : '上海', ' temperature ':60},{ 'city ': '深圳', ' temperature ' :30}]
	#1、实例化一个转换器类
	transfer = DictVectorizer(sparse=False)
	#2、调用fit_transform
	data = transfer.fit_transform(data)
	print("返回的结果:\n",data)
	#打印特征名字
	print("特征名字: \n",transfer.get_feature_names( ))
	return None

注意观察没有加上sparse=False参数的结果

pandas中的离散化的时候,也实现了类似的效果。这个处理数据的技巧叫做”one-hot“编码:
在这里插入图片描述
在这里插入图片描述

3总结
对于特征当中存在共别信息的我们都会做one-hot编码处理

4应用场景

  • 数据集当中类别特征比较多
    • 将数据集的特征——>字典类型
    • bictVectorizer转换
  • 本身拿到的数据就是字典类型

文本特征提取

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

  • sklearn.feature_extraction.text.CountVectorizer(stop_words=[])
    • 返回词频矩阵
  • CountVectorizer.fit_transform(X) X:文本或者包含文本字符串的可迭代对象
    • 返回值:返回sparse矩阵
  • CountVectorizer.inverse_transform(X) X:array数组或者sparse矩阵
    • 返回值:转换之前数据格
  • CountVectorizer.get_feature_names()
    • 返回值:单词列表
  • sklearn.feature_extraction.text.TfidfVectorizer

1应用
我们对以下数据进行特征提取

["life is short,i like python" ,
"life is too long,i dislike python"]

在这里插入图片描述

在这里插入图片描述

没有sparse=True参数,用.toarray()
单词作为特征,统计每个样本特征词出现的个数

方法1: CountVectorizer

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

中文没有空格的分割
data =[“我 爱 北京 天安门”,“天安门 上 太阳 升"]
在这里插入图片描述

stop_words停用词
在这里插入图片描述在这里插入图片描述

2流程分析

  • 实例化类CountVectorizer
  • 调用fit_transform方法输入数据并转换(注意返回格式,利用toarray()进行sparse矩阵转换array数组)
from sklearn.feature_extraction.text import CountVectorizer

def text_count_demo():
	data = ["life is short,i like python" ,"life is too long,i dislike python"]
	#1、实例化一个转换器类
	# transfer = CountVectorizer(sparse=False)
	transfer = CountVectorizer( )
	#2、调用fit_transform
	data = transfer.fit_transform(data)
	print("文本特征抽取的结果:\n", data.toarray())
	print("返回特征名字:\n",transfer.get_feature_names())

	return None

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

3jieba分词处理

  • jieba.cut()
    • 返回词语组成的生成器

需要安装下jieba库

pip3 install jieba

4案例分析
对以下三句话进行特征值化

今天很残酷,明天更残酷,后天很美好,
但绝对大部分是死在明天晚上,所以每个人不要放弃今天。

我们看到的从很远星系来的光是在几百万年之前发出的,
这样当我们看到宇宙时,我们是在看它的过去。

如果只用一种方式了解某样事物,你就不会真正了解它。
了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。
  • 分析
    • 准备句子,利用jieba.cut进行分词
    • 实例化CountVectorizer
    • 将分词结果变成字符串当作fit_transform的输入值
from sklearn.feature_extraction.text import Countvectorizer
import jieba

def cut_word (text):
#用结巴对中文字符串进行分词
	text = " ".join(list(jieba.cut(text)))
	return text

def text_chinese_count_demo2():
	data = ["今天很残酷,明天更残酷,后天很美好,
但绝对大部分是死在明天晚上,所以每个人不要放弃今天。","我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。","如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]
	#将原始数据转换成分好词的形式
	text_list = []
	
	for sent in data;
		text_list.append(cut_word(sent))
	print(text_list)
	
	#1、实例化一个转换器类
	#transfer = CountVectorizer(sparse=False)
	transfer = 	CountVectorizer()
	#2、调用fit_transform
	data = transfer.fit_transform(text_list)
	print("文本特征抽取的结果:\n", data.toarray( ))
	print("返回特征名字:\n", transfer.get_feature_names())

	return None

在这里插入图片描述

关键词∶在某一个类别的文章中,出现的次数很多,但是在其他类别的文章当中出现很少

方法2:TfidfVectorizer

在这里插入图片描述
5 Tf-idf文本特征提取

  • TF-IDF的主要思想是︰如果某个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
  • TF-IDF作用:用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。

TF-IDF—>重要程度 TF—>词频 IDF—>逆向文档频率
eg:
在这里插入图片描述

5.1公式

  • 词频(term frequency,tf)指的是某一个给定的词语在该文件中出现的频率
  • 逆向文档频率(inverse document frequency,idf)是一个词语普遍重要性的度量。某一特定词语的idf,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取以10为底的对数得到。
    在这里插入图片描述

5.2 API

  • sklearn.feature_extraction.text.TfidfVectorizer(stop_words=None,…)
    • 返回词的权重矩阵
      • TfidfVectorizer.fit_transform(X)
        • X:文本或者包含文本字符串的可迭代对象
        • 返回值:返回sparse矩阵
      • TfidfVectorizer.inverse_transform(X)
        • X:array数组或者sparse矩阵
        • 返回值:转换之前数据格式
      • TfidfVectorizer.get_feature_names()
        • 返回值:单词列表

5.3 流程分析
在这里插入图片描述
在这里插入图片描述

6 Tf-idf的重要性
分类机器学习算法进行文章分类中前期数据处理方式

标签:机器,fit,特征,text,transform,feature,学习,sparse,data
From: https://blog.csdn.net/qq_37441377/article/details/137556517

相关文章

  • 机器学习—无量纲化和降维(四)
    什么是特征预处理?通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程1包含内容数值型数据的无量纲化:归一化标准化2特征预处理APIsklearn.preprocessing为什么要进行归一化or标准化?特征的单位或者大小相差较大,或者某特征的方差相比其他的特征......
  • markdown学习(基础语法)
    Markdown学习标题三级标题四级标题字体字体斜体字体加粗字体斜体加粗划线字体引用一个向右箭头用于引用分割线三个-符号:三个*符号:图片超链接点击跳转到力扣列表abcabc表格右键插入即可代码javac++c#......
  • Markdown学习Day01
    MarkDown学习标题两个#号加空格加内容三级标题三个#号加空格加内容四级标题四个#号加空格加内容最多类推到六级标题字体HelloHello头尾双*加粗Hello头尾单*斜体Hello头尾三*斜体加粗Hello头尾双~删除线引用拥抱美好新生活引用=>符号加空格分割线三......
  • 学习Source Generators之打包成Nuget使用
    前面我们简单的实现了一个从swagger生成实体类的Generator,在实际使用中,通过nuget包引用使用会更方便,那么本篇文章将介绍如何将Generator打包成Nuget来使用。打包Nuget这里我们将GenerateClassFromSwagger.Analysis打包成Nuget进行使用。首先需要修改项目文件。修改项目文件在......
  • 深度学习-nlp-循环神经网络RNN--69
    目录1.概述2.RNN的模型参考:https://zhuanlan.zhihu.com/p/308449051.概述输出会反馈到输入的神经网络:循环神经网络(RecurrentNeuralNetworks,以下简称RNN),它广泛的用于自然语言处理中的语音识别,手写书别以及机器翻译等领域。在前面讲到的DNN和CNN中,训练样本的输入和输出......
  • org.apache.commons.lang3.ArrayUtils 学习笔记
    1234567891011121314151617181920212223242526272829303132333435package com.nihaorz.model; /** *@作者王睿 *@时间2016-5-17上午10:05:17 * */public class Person{    private Stringid;    pr......
  • 数据是一维数据,利用tensorflow深度学习框架,写一个带自注意力机制的卷积神经网络,并进行
    下面是一个使用TensorFlow框架的带有自注意力机制的卷积神经网络(Self-AttentionConvolutionalNeuralNetwork)的示例代码,包括数据处理、模型定义和训练过程:importtensorflowastffromtensorflow.keras.layersimportConv1D,Dense,GlobalMaxPooling1D,Concatenate#......
  • 艾科瑞特科技:自然语言处理-全任务支持零样本学习模型-中文版
    艾科瑞特科技:自然语言处理-全任务支持零样本学习模型-中文版关键词:目标检测、目标跟踪、图像识别、图像分类、视频分析、自然语言处理、自然语言分析、计算机视觉、人工智能、AIGC、AI、大模型、多模态大模型、API、Docker、镜像、API市场、云市场、国产软件、信创内容摘要:......
  • html学习
    <!DOCTYPEhtml><htmllang="en"><head>  <metacharset="UTF-8">  <metahttp-equiv="X-UA-Compatible"content="IE=edge">  <metaname="viewport"content="width=d......
  • Springcloud学习笔记63---RocketMq超时重试,导致重复消费的问题,解决方案
    1.重复消费的背景当Consumer处理时间过长,在超时时间内没有返回给Broker消费状态,那么Broker也会自动重试。设定一个超时时间,达到超时时间的那个消费当作消费失败处理。Java客户端中的DefaultPushConsumer中的构造方法中的consumeTimeout字段(默认15分钟)。packagewilliam.rmq.......