机器学习day2-特征工程

news2024/11/16 10:23:47

四.特征工程

1.概念

一般使用pandas来进行数据清洗和数据处理、使用sklearn来进行特征工程

将任意数据(文本或图像等)转换为数字特征,对特征进行相关的处理

步骤:1.特征提取;2.无量纲化(预处理):归一化、标准化;3.降维:底方差过滤特征选择,主成分分析-PCA降维

2.特征工程API

①.实例化转换器对象

DictVectorizer      字典特征提取
CountVectorizer     文本特征提取
TfidfVectorizer     TF-IDF文本特征词的重要程度特征提取 
MinMaxScaler        归一化
StandardScaler      标准化
VarianceThreshold   底方差过滤降维
PCA                 主成分分析降维

②.fit,transform和fit_transform

fit:用于计算数据的统计信息,比如均值和标准差(在StandardScaler的情况下),这些统计信息随后会被用于预测出来的数据

transform:使用已经通过fit方法计算出的统计信息来转换数据。

fit_transform:两者结合,更高效

一旦scaler对象在X_train上被fit,它就已经知道了如何将数据标准化。

先fit_transform(x_train)然后再transform(x_text)

fit只用一次

# fit 和 transform 和fittransform 区别
from sklearn.preprocessing import StandardScaler,MinMaxScaler
import numpy as np
transfer=StandardScaler()
x=np.random.randint(100,size=(3,4))
print(x)
transfer.fit(x)#计算出均值和标准差
x=transfer.transform(x)
# x=transfer.fit_transform(x)
print(x)
x2=np.array([[10,20,30,40]])
x2=transfer.transform(x2)
​
print(x2)

3.DictVectorizer 字典列表特征提取

1.稀疏矩阵

一个矩阵中大部分元素为0,常见于大规模数据分析、图形学、自然语言处理、机器学习等领域

常用存储方式:①.三元组表 (Coordinate List, COO):三元组表就是一种稀疏矩阵类型数据,存储非零元素的行索引、列索引和值:

(行,列) 数据

(0,0) 10

(0,1) 20

(2,0) 90

(2,20) 8

(8,0) 70

表示除了列出的有值, 其余全是0

②.压缩稀疏行 (CSR - Compressed Sparse Row):

  • CSR 格式将稀疏矩阵中的非零元素按行优先的方式存储。它使用了三个数组:

    • data:存储非零元素的值。

    • indices:存储data中每个元素的列索引。

    • indptr:存储每一行在dataindices数组中的起始位置。

  • CSR 格式非常适合快速地进行行访问和矩阵向量乘法。

③.压缩稀疏列 (CSC - Compressed Sparse Column):

  • CSC 格式类似于 CSR,但它是按列优先的方式来存储稀疏矩阵。同样也使用了三个数组:

    • data:存储非零元素的值。

    • indices:存储data中每个元素的行索引。

    • indptr:存储每一列在dataindices数组中的起始位置。

  • CSC 格式对于快速地进行列访问和某些类型的矩阵运算很有帮助。

④.字典 (Dictionary of Keys - DOK):

DOK 格式使用一个字典来存储非零元素,其中键是元素的位置(通常是元组 (row, column)),值是非零元素本身。

  • 这种格式适合于动态地增加或修改矩阵中的非零元素。

⑤.链表 (List of Lists - LIL):

  • LIL 格式使用两个列表来表示稀疏矩阵。其中一个列表包含每一行的非零元素,另一个列表包含了这些非零元素的列索引。

  • LIL 格式适合于构建稀疏矩阵,特别是当矩阵的结构在构建过程中发生变化时。

⑥.块稀疏行 (BSR - Block Sparse Row):

  • BSR 格式类似于 CSR,但它不是处理单个非零元素,而是处理固定大小的非零元素块。

  • 这种格式适用于那些非零元素倾向于形成小的密集子矩阵的情况。

2.非稀疏矩阵(稠密矩阵)

矩阵中的大部分元素都是非0的,矩阵的存储通常采用标准的二维数组形式。在数学计算、线性代数等通用计算领域更为常见。

3.API

创建转换器对象:

sklearn.feature_extraction.DictVectorizer(sparse=True)

DictVectorizer:字典向量化工具

参数:

sparse=True返回类型为csr_matrix的稀疏矩阵

sparse=False表示返回的是数组,数组可以调用.toarray()方法将稀疏矩阵转换为数组

转换器对象:

转换器对象调用fit_transform(data)函数,参数data为一维字典数组或一维字典列表,返回转化后的矩阵或数组

转换器对象get_feature_names_out()方法获取特征名

eg1.提取为稀疏矩阵对应的数组
# 字典列表特征提取
from sklearn.feature_extraction import DictVectorizer
import pandas   as pd
data=[{'city':'北京','money':38,"age":20},
      {'city':'上海','money':60,"age":29},
      {'city':'深圳','money':30,"age":32},
       {'city':'深圳','money':40,"age":49}]
# 初始化工具(字典变成向量的工具器)
model=DictVectorizer(sparse=False)#sparse是否转换成三元组形式
data=model.fit_transform(data)
# print(data,type(data))
# print(model.get_feature_names_out())#获取所有的特征名称
ddata=pd.DataFrame(data=data,columns=model.get_feature_names_out())
# print(ddata)
ddata
eg2.提取为稀疏矩阵
# 字典列表特征提取
from sklearn.feature_extraction import DictVectorizer
import pandas   as pd
data=[{'city':'北京','money':38,"age":20},
      {'city':'上海','money':60,"age":29},
      {'city':'深圳','money':30,"age":32},
       {'city':'深圳','money':40,"age":49}]
# 初始化工具(字典变成向量的工具器)
model=DictVectorizer(sparse=True)#sparse是否转换成三元组形式
data=model.fit_transform(data)
print(data,type(data))
arr=data.toarray()#把三元组(稀疏矩阵)转化为数组
print(arr)

4.CountVectorizer 文本特征提取

1.API

sklearn.feature_extraction.text.CountVectorizer

构造函数关键字参数stop_words,值为list,表示词的黑名单(不提取的词)

fit_transform函数的返回值为稀疏矩阵

eg3.英文文本提取
# CountVectorizer 文本特征提取
from sklearn.feature_extraction.text import CountVectorizer
corpus = ['I love machine learning. Its awesome.', 'Its a book amazon book', 'Amazon is book a great company']
# 创建一个词频提取对象
vectorizer = CountVectorizer(stop_words=[])
# 提取词频
x=vectorizer.fit_transform(corpus)
print(x)
print(x.toarray())
print(vectorizer.get_feature_names_out())
eg4.中文文本提取
! pip install -i https://pypi.tuna.tsinghua.edu.cn/simple jieba
# CountVectorizer 中文本特征提取
from sklearn.feature_extraction.text import CountVectorizer
import jieba
import pandas as pd
# arr=list(jieba.cut("我爱北京天安门"))
# print(arr)
# str1=" ".join(arr)
# print(str1)
#传入的文本(没有断词的字符串) 用jieba分词工具转化为数据容器,然后再把数据容器中元素用空格连接成字符串
def my_cut(text):
    return " ".join(jieba.cut(text))
​
​
corpus = ["教育学会会长期间,坚定支持民办教育事业!",  "扶持民办,学校发展事业","事业做出重大贡献!"]
# # 创建一个词频提取对象
vectorizer = CountVectorizer(stop_words=[])
# 提取词频
data=[my_cut(el) for el in corpus]
print(data)
x=vectorizer.fit_transform(data)
print(x)
print(x.toarray())
print(vectorizer.get_feature_names_out())
​
ddata=pd.DataFrame(x.toarray(),columns=vectorizer.get_feature_names_out())
ddata

5.TfidfVectorizer TF-IDF文本特征词的重要程度特征提取

1.算法

词频(Term Frequency, TF), 表示一个词在当前篇文章中的重要性,是对词数的归一化

TF=某个词在文章中的出现次数/文章的总词数

逆文档频率(Inverse Document Frequency, IDF), 反映了词在整个文档集合中的稀有程度

IDF=lg((语料库的文档总数+1)/(包含该词的文档数+1))

TF-IDF=词频(TF)×逆文档频率(IDF)

2.API

sklearn.feature_extraction.text.TfidfVectorizer()

构造函数关键字参数stop_words,表示词特征黑名单

fit_transform函数的返回值为稀疏矩阵

eg5
from sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer
import jieba
import pandas as pd
def my_cut(text):
    return " ".join(jieba.cut(text))
data=["教育学会会长期间,坚定支持民办教育事业!",  "扶持民办,学校发展事业","事业做出重大贡献!"]
data=[my_cut(i) for i in data]
print(data)
transfer=TfidfVectorizer(stop_words=[])
res=transfer.fit_transform(data)
print(transfer.get_feature_names_out())
print(res.toarray())
ddata=pd.DataFrame(res.toarray(),columns=transfer.get_feature_names_out())
ddata

6.无量纲化-预处理

1.MinMaxScaler 归一化

2.归一化API

sklearn.preprocessing.MinMaxScaler(feature_range)

参数:feature_range=(0,1) 归一化后的值域,可以自己设定

fit_transform函数归一化的原始数据类型可以是list、DataFrame和ndarray, 不可以是稀疏矩阵

fit_transform函数的返回值为ndarray

eg6.归一化
from sklearn.preprocessing import MinMaxScaler
import pandas as   pd
scaler=MinMaxScaler(feature_range=(0,1))
data=pd.read_excel("./src/test2.xlsx")
print(data.values)
# arr=scaler.fit_transform(data.values)
arr=scaler.fit_transform(data)
print(arr)

鲁棒性较差

# 字典列表特征提取后的结果归一化
from sklearn.feature_extraction import DictVectorizer
from sklearn.preprocessing  import MinMaxScaler
import pandas   as pd
data=[{'city':'北京','money':38,"age":20},
      {'city':'上海','money':60,"age":29},
      {'city':'深圳','money':30,"age":32},
       {'city':'深圳','money':40,"age":49}]
# 初始化工具(字典变成向量的工具器)
model=DictVectorizer(sparse=True)#sparse是否转换成三元组形式
data=model.fit_transform(data)
# print(data,type(data))
arr=data.toarray()#把三元组(稀疏矩阵)转化为数组
print(arr)
arr_1=MinMaxScaler().fit_transform(arr)
arr_1

3.StandardScaler 标准化

4.标准化API

sklearn.preprocessing.StandardScale

与MinMaxScaler一样,原始数据类型可以是list、DataFrame和ndarray

fit_transform函数的返回值为ndarray, 归一化后得到的数据类型都是ndarray

eg7.标准化
from sklearn.preprocessing import StandardScaler
import numpy as np
# 初始化标准化工具
scaler = StandardScaler()
np.random.seed(7)
data=np.array([[1,2,3,4],
               [2,2,3,4],
               [3,2,3,4],
               [4,2,3,4]])
#np.random.randint(0,100,(30,4))
# print(data)
# 把data进行标准化
x=scaler.fit_transform(data)
print(x)

7.特征降维

降维:去掉一些特征或者将多个特征转化为少量个特征

在尽可能保留数据的重要信息上减少数据集维度,可以减少计算成本、去除噪声

方式:特征选择、主成份分析(PCA)

1.特征选择
①.VarianceThreshold 低方差过滤特征选择

计算方差-设定阈值-过滤特征

eg8
# 低方差过滤
from sklearn.feature_selection import VarianceThreshold
transfer=VarianceThreshold(threshold=0.01)
x=[[0,2,0,3],
   [0,1,4,3],
   [0,1,1,3]]
x=transfer.fit_transform(x)
print(x)

②.根据相关系数的特征选择

正相关性:一个变量增加通常伴随着另一个变量的增加。ρ=1,完全正相关

负相关性:一个变量减少通常伴随着另一个变量的减少。ρ=-1,完全负相关

不相关:两者的相关性很小,一个变量变化不会引起另外的变量变化。ρ=0,不存在线性关系

! pip install -i https://pypi.tuna.tsinghua.edu.cn/simple scipy

皮尔逊相关系数(Pearson correlation coefficient)是一种度量两个变量之间线性相关性的统计量。它提供了两个变量间关系的方向(正相关或负相关)和强度的信息,取值范围是 [−1,1]。绝对值越大,表示越相关,当两特征完全相关时,两特征的值表示的向量是在同一条直线上,当两特征的相关系数绝对值很小时,两特征值表示的向量接近在同一条直线上。当相关系值为负数时,表示负相关

|ρ|<0.4为低度相关; 0.4<=|ρ|<0.7为显著相关; 0.7<=|ρ|<1为高度相关

API:

scipy.stats.personr(x, y) 计算两特征之间的相关性

返回对象有两个属性:

statistic皮尔逊相关系数[-1,1]

pvalue零假设(了解),统计上评估两个变量之间的相关性,越小越相关

from scipy.stats import pearsonr
import numpy as np
x1=[1,2,3,4,5]
y=[2,4,6,8,10]
r=pearsonr(x1,y)
print(r.statistic,r.pvalue)

2.主成份分析(PCA)

从原始特征空间中找到一个新的坐标系统,使得数据在新坐标轴的投影能够最大程度地保留数据的方差,同时减少维度。

保留信息/丢失信息=信息保留的比例

步骤:得到矩阵-用矩阵P对原始数据进行线性变换,得到新的数据矩阵Z-根据主成分的方差等,确定最终保留的主成分个数,留下方差大的

API

from sklearn.decomposition import PCA

PCA(n_components=None)

n_components:

  • 实参为小数时:表示降维后保留百分之多少的信息

  • 实参为整数时:表示减少到多少特征

    eg9
#特征降维 减少到多少特征
from sklearn.decomposition import PCA
data=[[2,8,4,5],
      [6,3,0,8],
      [5,4,9,1]]
pca=PCA(n_components=2)
data=pca.fit_transform(data)
print(data)

#特征降维
from sklearn.decomposition import PCA
import numpy as np
data=np.random.rand(5,100)#5条数据,100个特征量
#print(data)
pca=PCA(n_components=0.8)
data=pca.fit_transform(data)
print(data.shape,data)

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

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

相关文章

Llama架构及代码详解

Llama的框架图如图&#xff1a; 源码中含有大量分布式训练相关的代码&#xff0c;读起来比较晦涩难懂&#xff0c;所以我们对llama自顶向下进行了解析及复现&#xff0c;我们对其划分成三层&#xff0c;分别是顶层、中层、和底层&#xff0c;如下&#xff1a; Llama的整体组成…

stm32在linux环境下的开发与调试

环境安装 注&#xff1a;文末提供一键脚本 下载安装stm32cubeclt 下载地址为&#xff1a;https://www.st.com/en/development-tools/stm32cubeclt.html 选择 linux版本下载安装 安装好后默认在家目录st下 > $ ls ~/st/stm32cubeclt_1.16.0 …

第T7周:Tensorflow实现咖啡豆识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目标 具体实现 &#xff08;一&#xff09;环境 语言环境&#xff1a;Python 3.10 编 译 器: PyCharm 框 架: &#xff08;二&#xff09;具体步骤 1. 使…

亲测有效:Maven3.8.1使用Tomcat8插件启动项目

我本地maven的settings.xml文件中的配置&#xff1a; <mirror><id>aliyunmaven</id><mirrorOf>central</mirrorOf><name>阿里云公共仓库</name><url>https://maven.aliyun.com/repository/public</url> </mirror>…

LLM - 使用 LLaMA-Factory 微调大模型 Qwen2-VL SFT(LoRA) 图像数据集 教程 (2)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/143725947 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 LLaMA-…

神经网络与Transformer详解

一、模型就是一个数学公式 模型可以描述为:给定一组输入数据,经过一系列数学公式计算后,输出n个概率,分别代表该用户对话属于某分类的概率。 图中 a, b 就是模型的参数,a决定斜率,b决定截距。 二、神经网络的公式结构 举例:MNIST包含了70,000张手写数字的图像,其中…

鲸鱼机器人和乐高机器人的比较

鲸鱼机器人和乐高机器人各有其独特的优势和特点&#xff0c;家长在选择时可以根据孩子的年龄、兴趣、经济能力等因素进行综合考虑&#xff0c;选择最适合孩子的教育机器人产品。 优势 鲸鱼机器人 1&#xff09;价格亲民&#xff1a;鲸鱼机器人的产品价格相对乐高更为亲民&…

Flink Source 详解

Flink Source 详解 原文 flip-27 FLIP-27 介绍了新版本Source 接口定义及架构 相比于SourceFunction&#xff0c;新版本的Source更具灵活性&#xff0c;原因是将“splits数据获取”与真“正数据获取”逻辑进行了分离 重要部件 Source 作为工厂类&#xff0c;会创建以下两…

路漫漫其修远兮,吾将上下而求索---第一次使用github的过程记录和个人感受

文章目录 1.仓库位置2.新建仓库3.配置仓库4.克隆和上传5.推荐文章和我的感受 1.仓库位置 这个仓库的位置就是在我们的这个个人主页的右上角&#xff1b;如果是第一次注册账号的话&#xff0c;这个主页里面肯定是不存在仓库的&#xff0c;需要我们自己手动的进行创建&#xff1…

npm list -g --depth=0(用来列出全局安装的所有 npm 软件包而不显示它们的依赖项)

您提供的命令 npm list -g --depth0 是在 Node Package Manager (npm) 的上下文中使用的&#xff0c;用来列出全局安装的所有 npm 软件包而不显示它们的依赖项。 这是它的运作方式&#xff1a; npm list -g --depth0-g: 指定列表应包括全局安装的软件包。--depth0: 限制树形结…

tdengine学习笔记

官方文档&#xff1a;用 Docker 快速体验 TDengine | TDengine 文档 | 涛思数据 整体架构 TDENGINE是分布式&#xff0c;高可靠&#xff0c;支持水平扩展的架构设计 TDengine分布式架构的逻辑结构图如下 一个完整的 TDengine 系统是运行在一到多个物理节点上的&#xff0c;包含…

K8S单节点部署及集群部署

1.Minikube搭建单节点K8S 前置条件&#xff1a;安装docker&#xff0c;注意版本兼容问题 # 配置docker源 wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo# 安装docker环境依赖 yum install -y yum-utils device-m…

以往运维岗本人面试真题分享

以下是本人面试运维岗的一些面试经历&#xff0c;在此做个记录分享 目录 TCP/IP三次握手 IPtables IPtables四表五链都是什么&#xff1f; nat端口如何做&#xff1f; 开放本机的80端口该如何做&#xff1f; 如何在单用户模式下引导Centos&#xff1f; nginx轮询模式都有…

STM32 串口输出调试信息

软硬件信息 CubeMX version 6.12.1Keil uVision V5.41.0.0 注意 串口有多种&#xff1a; TTL232485 串口的相关知识&#xff1a; 01-【HAL库】STM32实现串口打印&#xff08;printf方式) &#xff0c; 内含 TTL 和 232 区别。 我把 232 串口连进 STM32 串口助手收到的信息…

Python 三种方式实现自动化任务

在这篇文章中&#xff0c;我们将介绍一些用Python实现机器人过程自动化的包。机器人流程自动化&#xff08;Robotic process automation&#xff0c;简称RPA&#xff09;是指将鼠标点击和键盘按压自动化的过程&#xff0c;即模拟人类用户的操作。RPA用于各种应用程序&#xff0…

Android ART知多少?

Android 虚拟机 ART&#xff08;Android Runtime&#xff09;是 Android 平台上的应用程序运行时环境&#xff0c;用于执行应用程序的字节码。ART 自 Android 5.0&#xff08;Lollipop&#xff09;开始取代了 Dalvik&#xff0c;成为 Android 的默认运行时环境。本文将从以下几…

Vulnhub靶场 Billu_b0x 练习

目录 0x00 准备0x01 主机信息收集0x02 站点信息收集0x03 漏洞查找与利用1. 文件包含2. SQL注入3. 文件上传4. 反弹shell5. 提权&#xff08;思路1&#xff1a;ssh&#xff09;6. 提权&#xff08;思路2&#xff1a;内核&#xff09;7. 补充 0x04 总结 0x00 准备 下载链接&#…

软间隔支持向量机支持向量的情况以及点的各种情况

软间隔支持向量 ​ 这一节我们要回答的问题是&#xff1f;如何判断一个点是软间隔支持向量机中的支持向量&#xff0c;在硬间隔支持向量机中&#xff0c;支持向量只需要满足一个等式&#xff1a; y i ( w T x i b ) − 1 0 y_i(w^Tx_i b) -1 0 yi​(wTxi​b)−10 ​ 在软间…

PCA 原理推导

针对高维数据的降维问题&#xff0c;PCA 的基本思路如下&#xff1a;首先将需要降维的数据的各个变量标准化&#xff08;规范化&#xff09;为均值为 0&#xff0c;方差为 1 的数据集&#xff0c;然后对标准化后的数据进行正交变换&#xff0c;将原来的数据转换为若干个线性无关…

在Ubuntu 24.04 LTS上安装飞桨PaddleX

前面我们介绍了《在Windows用远程桌面访问Ubuntu 24.04.1 LTS》本文接着介绍安装飞桨PaddleX。 PaddleX 3.0 是基于飞桨框架构建的一站式全流程开发工具&#xff0c;它集成了众多开箱即用的预训练模型&#xff0c;可以实现模型从训练到推理的全流程开发&#xff0c;支持国内外多…