特征工程:特征构建

news2024/10/6 8:24:45

目录


一、前言

二、正文

Ⅰ.分类特征重新编码

 ①分类特征

 ②离散特征

 ③多标签类别编码

Ⅱ.数值特征重新编码

 ①多项式

 ②多个变量的多项式特征

Ⅲ.文本数据的特征构建

①文本词频条形图

 ②词袋模型

③TF-IDF矩阵

三、结语


一、前言

 

 特征工程中的特征构建的主要目的是生成新的特征,而针对不同的特征,有多种方式可以形成新的特征,例如有针对分类特征、针对数值特征和针对文本特征对其进行生成新的特征。

 

 

二、正文

 

 

Ⅰ.分类特征重新编码

 

 ①分类特征
from sklearn import preprocessing
import pandas as pd
import numpy as np
Iris=pd.read_csv(r'C:\Users\asuspc\Desktop\program\data\chap2\Iris.csv')
np.random.seed(12)
label=np.random.choice(Iris.Species.values,size=4,replace=False)
label=label.reshape(-1,1)
OrdE=preprocessing.OrdinalEncoder()
label_OrdE=OrdE.fit_transform(label)

使用sklearn中的preprocessing模块来完成。针对类别标签,常用的方法是将其编码为序列号,preprocessing中的OridinalEncoder()来帮助我们完成。我们读取数据使用read_csv方法,接着用random中的choice方法,选取要编码的数据,Iris.Species.values则为数组的形式将所有类别按照一维的形式展现;label=label.reshape(-1,1)则是将其转化为二维数组,且按照一列的形式排列。OrdE=preprocessing.OrdinalEncoder()接着提取模块的方法方便使用;最后再执行这个语句,如下:label_OrdE=OrdE.fit_transform(label),以编码的方法对label类别的数据进行归一化。

 

此时我们已经成功将类别进行编码,根据结果可以看出,setosa被编码为0,versicolor被编码为1,virginica被编码为2。 

 

 ②离散特征

 

le=preprocessing.LabelEncoder()
label_le=le.fit_transform([1,2,3,10,10])
print("0~n-1的整数:\n",label_le)
OneHotE=preprocessing.OneHotEncoder()
label_OneHotE=OneHotE.fit_transform(label)
print('OneHot编码:\n',label_OneHotE)

 离散特征可以使用两种方式,一种是preprocessing模块中的LabelEncoder和preprocessing模块中的OneHotEncoder方法。

 

 从输出中我们可以发现LabelEncoder方法使用之后,我们将数组变成了[0,1,2,3,3],而对label变量进行OneHotEncoder的方法,我们可以发现它只是给出了数值1所在矩阵的位置(也就是索引),那么输出来一个n*3的矩阵应该就是这样:

array([[1., 0., 0.],
       [0., 0., 1.],
       [1., 0., 0.],
       [0., 1., 0.]])

就能够得到三个类别标签。

 

lb=preprocessing.LabelBinarizer()
label_lb=lb.fit_transform(label)
print("one vs all:\n",label_lb)
#输出结果:
one vs all:
 [[1 0 0]
 [0 0 1]
 [1 0 0]
 [0 1 0]]

那么还有一种办法就是二值化,由于方法类似而且 输出出来的结果与OneHotEncoder的方法相同,这里不过多赘述。

 

 ③多标签类别编码

 

mle=preprocessing.MultiLabelBinarizer()
label_mle=mle.fit_transform([('A','B'),('B','C'),('D')])
print("Various categreory:\n",label_mle)

 使用的方法如上,将方法提取再使用。

 这里多类别是在说:总类别的类别个数取决于列数,然后每一行的类别出现应用索引的方法将每行按二值表示出来。

 

 

Ⅱ.数值特征重新编码

 

 ①多项式

 

X=np.arange(1,5).reshape(-1,1)
ployF=preprocessing.PolynomialFeatures(degree=3,include_bias=False)
ployFX=ployF.fit_transform(X)
#输出结果
X:
array([[1],
       [2],
       [3],
       [4]])

ployFX:
array([[ 1.,  1.,  1.],
       [ 2.,  4.,  8.],
       [ 3.,  9., 27.],
       [ 4., 16., 64.]])

 针对单个变量x的多项式特征,通常使用幂运算得到[x^1,x^2,x^3......],如上给出了方法

interaction_only: 默认为False,字面意思就是只能交叉相乘,不能有a^2这种.

include_bias: 默认为True, 这个bias指的是多项式会自动包含1,设为False就没这个1了

 

 ②多个变量的多项式特征

 

X2=np.arange(1,11).reshape(-1,2)
ployFm=preprocessing.PolynomialFeatures(degree=2,interaction_only=False,include_bias=False)
ployFXm=ployFm.fit_transform(X2)
#输出结果
X2:
array([[ 1,  2],
       [ 3,  4],
       [ 5,  6],
       [ 7,  8],
       [ 9, 10]])

ployFXm:  a    b     a^2   a*b   b^2    
array([[  1.,   2.,   1.,   2.,   4.],
       [  3.,   4.,   9.,  12.,  16.],
       [  5.,   6.,  25.,  30.,  36.],
       [  7.,   8.,  49.,  56.,  64.],
       [  9.,  10.,  81.,  90., 100.]])

通过特征的平方组成新特征,同样使用 PolynomialFeatures方法来完成。针对两个变量[a,b]生成多项式特征,并制定幂为2。

interaction_only: 默认为False,字面意思就是只能交叉相乘,不能有a^2这种.

include_bias: 默认为True, 这个bias指的是多项式会自动包含1,设为False就没这个1了

 

Ⅲ.文本数据的特征构建

 

①文本词频条形图

 

 文本数据作为一种非结构化的数据在机器学习的应用当中也经常出现。例如:对新闻的类型进行分类,以及判读邮件是否为垃圾信息,这些都是对文本进行学习的方法,但是算法并不能理解文字的意思,因此需要使用相应的数据特征对文本数据进行表示。文本数据通常是词频特征、TF-ID矩阵等。

 

textdf=pd.read_table(r'C:\Users\asuspc\Desktop\program\data\chap3\文本数据.txt')
print(textdf)
#输出结果
                                                text
0                                 I come from China.
1                                 My maijor is math.
2                       Life is short, I use Python.
3                  Python is a programming language.
4               Python, R and Matlab, I love Python.
5  My maijor is computer. He maijor is computer t...
6                        I come from Shanghai China.
7                   Life is short and happy in time.

获取得到文本数据,将文本数据进行打印。

import re
textdf['text']=textdf.text.apply(lambda x: x.lower())
textdf['text']=textdf.text.apply(lambda x: re.sub('[^\w\s]','',x))
print(textdf['text'])
#输出结果
0                                    i come from china
1                                    my maijor is math
2                           life is short i use python
3                     python is a programming language
4                    python r and matlab i love python
5    my maijor is computer he maijor is computer te...
6                           i come from shanghai china
7                      life is short and happy in time

获取文本数据之后对文本进行预处理,保留有用的文本数据,剔除不必要的内容,且对数据内容进行大小写转换。

import matplotlib.pyplot as plt
text="".join(textdf.text)
text=text.split(" ")
textfre=pd.Series(text).value_counts()
textfre.plot(kind='bar',figsize=(10,6),rot=90)
plt.ylabel('word')
plt.xlabel('frequency')
plt.show()

 先对字符串进行拼接,将每一行的单词都拼接在一块,然后用逗号对每一个单词进行分隔开放到一个列表当中。之后对一整个列表的单词分类计数textfre=pd.Series(text).value_counts()

接着在计数表的基础上画出条形统计图即可。

从图中我们就能够分析出在这段文本里头的词频。可以发现is的出现次数对于这个文本来说是占据主导的地位的。

 ②词袋模型

 针对一条文本,我们可以词袋模型生成一个向量,该向量可以用来表示文本的特征,因此多个文本内容可以使用一个矩阵来表示,二词袋模型是文本表示常用的模型,该模型只关注文档中是否出现给定的单词和单词出现的频率,舍弃了文本的结构,单词出现的顺序和位置的信息。

from sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer
cv=CountVectorizer(stop_words='english')
cv_matrix=cv.fit_transform(textdf.text)
cv_matrixdf=pd.DataFrame(data=cv_matrix.toarray(),columns=cv.get_feature_names_out())
print(cv_matrixdf)
#输出结果
   china  come  computer  happy  language  life  love  ...  programming  python  shanghai  short  technology  time  use
0      1     1         0      0         0     0     0  ...            0       0         0      0           0     0    0
1      0     0         0      0         0     0     0  ...            0       0         0      0           0     0    0
2      0     0         0      0         0     1     0  ...            0       1         0      1           0     0    1
3      0     0         0      0         1     0     0  ...            1       1         0      0           0     0    0
4      0     0         0      0         0     0     1  ...            0       2         0      0           0     0    0
5      0     0         2      0         0     0     0  ...            0       0         0      0           1     0    0
6      1     1         0      0         0     0     0  ...            0       0         1      0           0     0    0
7      0     0         0      1         0     1     0  ...            0       0         0      1           0     1    0

[8 rows x 17 columns]

 针对得到的矩阵可以根据不同的分析目的使用不同的分析方法。例如要知道每个样本之间的相关性,则利用上面的矩阵计算文本之间的余弦相似性。

import seaborn as sns
from sklearn.metrics.pairwise import cosine_similarity
textcosine=cosine_similarity(cv_matrixdf)
plt.figure(figsize=(8,6))
ax=sns.heatmap(textcosine,fmt='0.2f',annot=True,cmap='YlGnBu')
plt.show()

从sklearn库中找到模块有余弦相似性的方法然后将矩阵放到方法当中则会自动生成余弦相似性,然后通过热力图可视化体现出数据之间相似性的关系。

 

 从图中可以发现文本0和文本6的相似性是最大的。

 

③TF-IDF矩阵

 

import seaborn as sns
from sklearn.metrics.pairwise import cosine_similarity
from sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer
TFI=TfidfVectorizer(stop_words='english')
TFI_mat=TFI.fit_transform(textdf.text).toarray()
textcosine2=cosine_similarity(TFI_mat)
plt.figure(figsize=(8,6))
ax=sns.heatmap(textcosine2,fmt='0.2f',annot=True,cmap='YlGnBu')
plt.show()

 

 针对改数据华科仪计算文本数据的文档一词项TF-IDF矩阵,这是用于信息检索与数据挖掘的技术,经常用于评估一个词项对于一个文件集或者一个语料库中的一份文件的重要程度。此的重要性随着他的出现次数成正比增加,但会随着他在语料库中出现的频率成反比下降。

 

 

从文中依然可以发现是文本0和文本6的相似性最大。 

 

三、结语

 

 特征构建到此就结束了,希望对你能够有所帮助,点赞收藏起来以备不时之需吧。

 

 

 

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

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

相关文章

记一次使用ASMLIB标记磁盘导致的数据库系统宕机案例

在对某医院HIS数据库环境搜集过程中,发现这套Oracle RAC数据库没有正确使用到multipath提供的多路径磁盘,本着对用户及合作伙伴负责的态度,将过程做一描述说明,以及提出一点解决问题的思路建议。 系统环境: 操作系统…

第八届:世界3D渲染挑战赛《无尽阶梯》正式开启

全世界的3D艺术创作者们引颈期盼的盛事“全球3D渲染艺术大奖赛”已迈入第八个年头。本届比赛的主题为“无尽的阶梯”,参赛者们可通过挑战赛展现自身的创造力,比赛在行业内拥有极高的知名度,含金量十足,参赛这可通过这里提高自己在…

[React] ref属性

简介 ref 即 reference ,是 React 提供给我们的安全访问 DOM 元素或者某个组件实例的句柄。 组件被调用时会新建一个该组件的实例,而 ref 就会指向这个实例。它可以是一个回调函数,这个回调函数会在组件被挂载后立即执行。 为了防止内存泄漏…

【C语言】贪吃蛇 详解

该项目需要的技术要点 C语言函数、枚举、结构体、动态内存管理、预处理指令、链表、Win32API等。 由于篇幅限制 和 使知识模块化, 若想了解 使用到的 Win32API 的知识:请点击跳转:【Win32API】贪吃蛇会使用到的 Win32API 目录 1. 贪吃蛇游…

配置Jenkins自动构建打包项目

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 需求说明 1、给A项目配置jenkins每2小时无条件自动构建一次,无论是否有代码提交。 2、给B项目配置jenkins每15分钟检…

如何在Mac上允许主流浏览器使用弹出式窗口?这里有详细步骤

这篇文章教你如何关闭流行的Mac浏览器上的弹出窗口阻止程序,包括Safari、Chrome和Firefox。它还探讨了你可能希望这样做的原因及其影响。 如何在Mac上允许Safari使用弹出窗口 如果你经常在Mac上使用Safari,你会注意到默认情况下弹出窗口阻止程序是打开的。有时,这并不方便…

Python进阶----在线翻译器(Python3的百度翻译爬虫)

目录 一、此处需要安装第三方库requests: 二、抓包分析及编写Python代码 1、打开百度翻译的官网进行抓包分析。 2、编写请求模块 3、输出我们想要的消息 三、所有代码如下: 一、此处需要安装第三方库requests: 在Pycharm平台终端或者命令提示符窗口中输入以下代…

Springboot集成jasypt实现配置文件加密

Jasypt它提供了单密钥对称加密和非对称加密两种加密方式。 单密钥对称加密:一个密钥加盐,可以同时用作内容的加密和解密依据; 非对称加密:使用公钥和私钥两个密钥,才可以对内容加密和解密; 我们以单密钥对称…

鸿蒙内核框架

1 内核概述 内核简介 用户最常见到并与之交互的操作系统界面,其实只是操作系统最外面的一层。操作系统最重要的任务,包括管理硬件设备,分配系统资源等,我们称之为操作系统内在最重要的核心功能。而实现这些核心功能的操作系统模…

Android ImageView 设置圆角及外边框样式

github地址:GitHub - WeiLianYang/RoundImageView: 🔥🔥🔥用于设置 ImageView 的 圆角、外边框颜色、外边框宽度 添加依赖 repositories {mavenCentral() } implementation io.github.weilianyang:RoundImageView:1.0.2 效果预…

Dijkstra算法(求最短路)

简介: 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。 特点: 迪杰斯特拉算法采用的是一种贪心策略&a…

nginx简单配置四种携带/时的拼接关系

代理静态文件(代理路径后缀与被代理的路径后缀不相同) 1、 当 location 尾部有 /,且代理地址尾部也有 / 时: location /test11/ {root /usr/local/nginx/html/; } 则访问 http://ip/test11/aaa,实际访问的是/us…

Linux环境下配置mysql主从复制

主从配置需要注意的地方 1、主DB server和从DB server数据库的版本一致 2、主DB server和从DB server数据库数据一致[这里就会可以把主的备份在从上还原,也可以直接将主的数据目录拷贝到从的相应数据目录] 3、主DB server开启二进制日志,主DB server和从DB serve…

使用esp32 cam + SR602人体感应模块制作一个小型的监控

需求: 做一个小型的监控,类似电子猫眼,监测到人之后,取一张图 然后发送到自己的邮箱。 架构: 1.sr602 传感器监测到人 2. esp32 cam 取图 并通过mqtt协议传到远端服务器 3, 服务器利用python 搭建一个mqtt客户端&…

dump分析方法

一、关于dump 1、什么是dump 在计算机领域中,术语“dump”通常用来指代将某种数据以某种格式进行转储或导出的过程。这个术语可以用于多种不同的上下文,下面是一些常见的情况: 内存转储(Memory Dump):在…

GRUB2 致力于 TPM2 自动磁盘解锁、TrenchBoot 等

Oracle 的 Daniel Kiper 提供了当前 GRUB 引导加载程序开发活动的状态更新、未来展望以及预计在 11 月份发布下一个版本的计划。 Kiper 本周末出席了在布鲁塞尔举行的 FOSDEM 2024,再次提供有关 GRUB 的状态更新。 早在 12 月,GRUB 2.12 就发布了&#…

09_树莓派_树莓派外设板_GPIO_按键的中断与消抖

目录 1.树莓派外设集成板总体介绍 2.第一部分 按键矩阵 GPIO_按键与中断 3.实现效果 1.树莓派外设集成板总体介绍 1)前言:这是一块为了验证树莓派【兼容树莓派多个型号】的40pins的外设接口的外接板,告别复杂的面包板外设搭建。【欢迎各位…

Allegro如何把Symbols,shapes,vias,Clines,Cline segs等多种元素一起移动

Allegro如何把Symbols,shapes,vias,Clines,Cline segs等多种元素一起移动 在用Allegro进行PCB设计时,有时候需要同时移动某个区域的所有元素,如:Symbols,shapes,vias,Clines,Cline segs等元素。那么如何操作呢? 首先就是把Symbols,shapes,vias,Clines,Cline …

速度规划:s形曲线------pencv c++绘图(1)

理论篇 代码篇&#xff1a; opencv环境配置 注意&#xff01;注意&#xff01;注意&#xff01; 配置结束后运行环境切换为如下再运行&#xff1a; #include <iostream> #include <cmath>#include <opencv2/opencv.hpp>using namespace std;double a_max…

2023年03月CCF-GESP编程能力等级认证C++编程二级真题解析

一、单选题(每题2分,共30分) 第1题 以下存储器中的数据不会受到附近强磁场干扰的是( )。 A.硬盘 B.U盘 C.内存 D.光盘 答案:D 第2题 下列流程图,属于计算机的哪种程序结构?( )。 A.顺序结构 B.循环结构 C.分支结构 D.数据结构 答案:C 第3题 下列关…