特征工程:特征构建

目录


一、前言

二、正文

Ⅰ.分类特征重新编码

 ①分类特征

 ②离散特征

 ③多标签类别编码

Ⅱ.数值特征重新编码

 ①多项式

 ②多个变量的多项式特征

Ⅲ.文本数据的特征构建

①文本词频条形图

 ②词袋模型

③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://xiahunao.cn/news/2780520.html

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

相关文章

分享88个时间日期JS特效,总有一款适合您

分享88个时间日期JS特效,总有一款适合您 88个时间日期JS特效下载链接:https://pan.baidu.com/s/16UhIi4d42AkUN5uj2oGFFw?pwd8888 提取码:8888 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,…

LeetCode Python - 10.正则表达式匹配

文章目录 题目答案运行结果 题目 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。 ‘.’ 匹配任意单个字符 ‘*’ 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串 s的,而不是部分…

Linux中pipe管道操作

管道的读写操作: 读操作: ​​​有数据:read正常读,返回读出的字节数无数据:1 写段全部关闭:read解除阻塞,返回0,相当于文件读到了尾部 2 写段没有全部关闭&#xf…

漂亮不是工业HMI的追求?我劝你,这个想法要变了

对于工业HMI(Human Machine Interface)来说,漂亮并不是唯一的追求,但它仍然是一个重要的方面。在工业环境中,HMI的设计需要考虑到使用者的工作效率和安全性,因此功能性和易用性是首要考虑的因素。然而&…

分享89个时间日期JS特效,总有一款适合您

分享89个时间日期JS特效,总有一款适合您 89个时间日期JS特效下载链接:https://pan.baidu.com/s/127_keimOfy_AKrCNT4TQNA?pwd8888 提取码:8888 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,…

Python 中的异步编程:提升程序性能的利器

随着互联网应用的迅猛发展,越来越多的应用程序需要处理大量的并发请求。传统的同步编程模型在处理大量并发请求时往往效率低下,造成程序响应速度变慢。为了解决这个问题,Python 提供了异步编程这一强大的工具,可以在单线程环境下实…

JavaScript资源加载:onload,onerror

🧑‍🎓 个人主页:《爱蹦跶的大A阿》 🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ ​ ✨ 前言 资源加载 是 web 开发中的一个重要概念,指的是浏览器加载…

CSP-202312-2-因子化简(质数筛法)

CSP-202312-2-因子化简 一、质数筛法 主流的质数筛法包括埃拉托斯特尼筛法(Sieve of Eratosthenes)、欧拉筛法(Sieve of Euler)、线性筛法(Linear Sieve)等。这些算法都用于高效地生成一定范围内的质数。 …

C++ Qt框架开发| 基于Qt框架开发实时成绩显示排序系统(1)

目标:旨在开发一个用户友好的软件工具,用于协助用户基于输入对象的成绩数据进行排序。该工具的特色在于,新输入的数据将以红色高亮显示,从而直观地展现出排序过程中数据变化的每一个步骤。 结果展示: 本程序是一个基于…

aardio 编辑GUI界面,调用 python 脚本示例

aardio 中调用 python 的方法有两种,py3 和 process.python 模块 py3 模块:如果经常要拿到python返回的值或从aardio中传数据给python去处理,aardio和python的交互比较多的话,可以考虑使用py3模块,缺点是:p…

java学习07---综合练习

飞机票 1.需求: 机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。 按照如下规则计算机票价格:旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来年4月)头等舱7…

Linux笔记之xhost +和docker的关系以及GDK_SCALE和GDK_DPI_SCALE详解

Linux笔记之xhost 和docker的关系以及GDK_SCALE和GDK_DPI_SCALE详解 ——2024-02-11 code review! 文章目录 Linux笔记之xhost 和docker的关系以及GDK_SCALE和GDK_DPI_SCALE详解xhost 的作用xhost 与 Docker 的关系 -e GDK_SCALE 和 -e GDK_DPI_SCALE详解GDK_SCALEGDK_DPI_SC…

ClickHouse--03--数据类型

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 数据类型1. Int2.FloattoFloat32(...) 用来将字符串转换成 Float32 类型的函数toFloat64(...) 用来将字符串转换成 Float64 类型的函数 3.DecimaltoDecimal32(value…

学习Android的第十天

目录 Android CheckBox 复选框 获得选中的 CheckBox 的值 自定义点击效果 改变文字与选择框的相对位置 修改文字与选择框的距离 Android ToggleButton 开关按钮 改变 ToggleButton 的状态和文本 Android Switch 开关 改变 Switch 的状态和文本 Android CheckBox 复选框…

Python 3 中使用 pandas 和 Jupyter Notebook 进行数据分析和可视化

简介 Python 的 pandas 包用于数据操作和分析,旨在让您以直观的方式处理带标签或关联数据。 pandas 包提供了电子表格功能,但由于您正在使用 Python,因此它比传统的图形电子表格程序要快得多且更高效。 在本教程中,我们将介绍如…

深入解析大型数据中心云平台的网络技术与实践

最简单的总结 SDN主流选择了OverLay。虚拟集群的规模(非物理机所能比拟) 使得Vxlan的组播传播( 虚拟机构成的集群包含的 MAC 地址数量往往多一两个数量级 MAC地址表 )对网络设备性能要求巨大(你不可能每个交换机都买核心交换机一样的配置吧)…

ZigBee学习——在官方例程实现组网

✨Z-Stack版本:3.0.2 ✨IAR版本:10.10.1 ✨这篇博客是在善学坊BDB组网实验的基础上进行完善,并指出实现的过程中会出现的各种各样的问题! 善学坊教程地址: ZigBee3.0 BDB组网实验 文章目录 一、基础工程选择二、可能遇…

力扣刷题之旅:高阶篇(一)—— 并查集的应用

力扣(LeetCode)是一个在线编程平台,主要用于帮助程序员提升算法和数据结构方面的能力。以下是一些力扣上的入门题目,以及它们的解题代码。 --点击进入刷题地址 引言 在算法的世界中,并查集是一种非常高效且实用的数…

PySQLRecon:一款功能强大的MSSQL安全测试工具

关于PySQLRecon PySQLRecon是一款功能强大的MSSQL安全测试工具,该工具基于SQLRecon实现其功能,可以帮助广大红队研究人员针对MSSQL执行攻击性安全测试。 环境配置 由于该工具基于Python 3开发,因此我们首先需要在本地设备上安装并配置好Pyt…

微软和苏黎世联邦理工学院开源SliceGPT创新压缩技术节省大量部署资源;OpenAI成立儿童安全团队,防AI误用

🦉 AI新闻 🚀 微软和苏黎世联邦理工学院开源SliceGPT创新压缩技术节省大量部署资源 摘要:微软和苏黎世联邦理工学院研究人员开源了SliceGPT,通过对大模型的权重矩阵进行压缩切片,实现了模型紧缩,节省了部…