当前位置: 首页 > news >正文

机器学习基础02_特征工程

目录

一、概念

二、API

三、DictVectorize字典列表特征提取

四、CountVectorize文本特征提取

五、TF-IDF文本1特征词的重要程度特征提取

六、无量纲化预处理

1、MinMaxScaler 归一化

2、StandardScaler 标准化

七、特征降维

1、特征选择

VarianceThreshold   底方差过滤降维

根据相关系数的特征选择


一、概念

一般是使用pandas来进行数据清洗和数据处理、使用sklearn来对特征进行相关的处理。

特征工程是将任意数据(如文本或图像)转换为可用于机器学习的数字特征,比如:字典特征提取(特征离散化)、文本特征提取、图像特征提取。

步骤:

  • 特征提取, 如果不是像dataframe那样的数据,要进行特征提取,比如字典特征提取,文本特征提取

  • 无量纲化(预处理)

    • 归一化

    • 标准化

  • 降维

    • 底方差过滤特征选择

    • 主成分分析-PCA降维

二、API

实例化转换器对象,转换器类有很多,都是Transformer的子类,常用的子类有:

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

三、DictVectorize字典列表特征提取

- 创建转换器对象:

  sklearn.feature_extraction.DictVectorizer(sparse=True)

  参数

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

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

- 转换器对象:

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

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

a)提取为稀疏矩阵对应的数组

# DictVectorizer  字典列表特征提取
# 01 提取为稀疏矩阵对应的数组
from sklearn.feature_extraction import DictVectorizer
import pandas as pddata = [{'city':'成都', 'age':30, 'temperature':200}, {'city':'重庆','age':33, 'temperature':60}, {'city':'北京', 'age':42, 'temperature':80}]
# 创建DictVectorizer对象 字典转变为向量的工具器
transfer = DictVectorizer(sparse=False)# 返回的是数组
data_new = transfer.fit_transform(data)# 类型为numpy.ndarray
print('data_new:\n', data_new)
print('特征名字:\n', transfer.get_feature_names_out())# 返回特征名字pd.DataFrame(data=data_new, columns=transfer.get_feature_names_out())

 

b)提取为稀疏矩阵(三元组)

# 02 提取为稀疏矩阵(三元组)
from sklearn.feature_extraction import DictVectorizer
data = [{'city':'成都', 'age':30, 'temperature':200},{'city':'重庆','age':33, 'temperature':60}, {'city':'北京', 'age':42, 'temperature':80}]
transfer = DictVectorizer(sparse=True)# sparse=True表示返回的是稀疏矩阵
data_new = transfer.fit_transform(data)
# data_new的类型为<class 'scipy.sparse._csr.csr_matrix'>
print("data_new:\n", data_new) # 三元组
#得到特征 
print("特征名字:\n", transfer.get_feature_names_out())
print(data_new.toarray()) # 三元组(稀疏矩阵)转换为数组

 

其中, 稀疏矩阵对象调用toarray()函数, 得到类型为ndarray的二维稀疏矩阵。

关于稀疏矩阵和三元组

稀疏矩阵是指一个矩阵中大部分元素为零,只有少数元素是非零的矩阵。 在数学和计算机科学中,当一个矩阵的非零元素数量远小于总的元素数量,且非零元素分布没有明显的规律时,这样的矩阵就被认为是稀疏矩阵。

三元组表就是一种稀疏矩阵类型数据,存储非零元素的行索引、列索引和值:

(行,列) 数据

(0,0) 10

(0,1) 20

(2,0) 90

(2,20) 8

(8,0) 70

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

四、CountVectorize文本特征提取

sklearn.feature_extraction.text.CountVectorizer

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

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

a)英文文本特征提取

from sklearn.feature_extraction.text import CountVectorizer
import pandas as pddata=["stu is well, stu is great", "You like stu"]
# 创建一个词频提取对象 提取文本特征向量
transfer = CountVectorizer(stop_words=['you','is'])# you和is这两个词会被过滤掉
data_new = transfer.fit_transform(data)# 进行提取,得到稀疏矩阵
print(data_new)pd.DataFrame(data=data_new.toarray(),index=["第一个句子","第二个句子"],columns=transfer.get_feature_names_out())

b)中文文本特征提取

jieba库安装

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

# CountVectorizer 中文文本特征提取
from sklearn.feature_extraction.text import CountVectorizer
import jieba# data = ' '.join(data)
# print(data)
# 传入的文本(未断词的字符串)用jieba分词工具转化为数据容器,在把数据容器中的元素用空格连接成字符串
def my_cut(text):return ' '.join(jieba.cut(text))data = ["教育学会会长期间,坚定支持民办教育事业!",  "扶持民办,学校发展事业","事业做出重大贡献!"]transfer = CountVectorizer(stop_words=[])
# 提取词频,得到稀疏矩阵
data_new = transfer.fit_transform([my_cut(dt) for dt in data])
print(data_new)
print(transfer.get_feature_names_out())pd.DataFrame(data=data_new.toarray(),columns=transfer.get_feature_names_out())

五、TF-IDF文本1特征词的重要程度特征提取

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

TF = 某词出现次数/总词数

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

IDF = lg[(文档总数+1)/(包含该词的文档数+1)] + 1

重要程度 TF-TDF = TF*TDF

# TfidfVectorizer TF-IDF文本特征词的重要程度特征提取 
from sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer
import jieba
import pandas as pddef my_cut(text):return ' '.join(jieba.cut(text))
data = ["教育学会会长期间,坚定支持民办教育事业!",  "扶持民办,学校发展事业","事业做出重大贡献!"]
data = [my_cut(i) for i in data]
# print(data)
transfer = TfidfVectorizer(stop_words=[])
data_new = transfer.fit_transform(data)
# print(data_new.toarray())
pd.DataFrame(data=data_new.toarray(),columns=transfer.get_feature_names_out())

六、无量纲化预处理

无量纲数据即没有单位的数据,无量纲化包括“归一化”和“标准化”。

1、MinMaxScaler 归一化

通过对原始数据进行变换把数据映射到指定区间(默认为0-1)。

x_scaled = (x - x_min)/(x_max - x_min)

这里的 𝑥min 和 𝑥max 分别是每种特征中的最小值和最大值,而 𝑥是当前特征值,𝑥scaled 是归一化后的特征值。

若要缩放到其他区间,可以使用公式:x_scaled'=x_scaled*(max-min)+min

from sklearn.preprocessing import MinMaxScaler
import pandas as pdscaler = MinMaxScaler(feature_range=(0, 1))
data = pd.read_excel('../src/minmaxscaler.xlsx')
# print(data.values)
data_new = scaler.fit_transform(data)
print(data_new)

最大值和最小值容易受到异常点影响,所以鲁棒性较差。所以常使用标准化的无量纲化。

2、StandardScaler 标准化

最常见的标准化方法是Z-score标准化,也称为零均值标准化。它通过对每个特征的值减去其均值,再除以其标准差,将数据转换为均值为0,标准差为1的分布。

μ = x.mean()

σ = x.std()

z_score = (x - μ) / σ

z是转换后的数值,x是原始数据的值,μ是该特征的均值,σ是该特征的标准差。

from sklearn.preprocessing import StandardScaler
import numpy as npscaler = StandardScaler()
np.random.seed(6)
data = np.random.randint(0,100,size=(4,4))# 随机生成4行4列的数据
# scaler.fit(data) # 计算出均值和标准差 只调用一次
# scaler.transform(data) # 转化数据
data_standard = scaler.fit_transform(data) # 后续调用transform方法print(data)
print(data_standard)

 

 关于fit()、fit_transform()、transform()

1. fit:

   - 这个方法用来计算数据的统计信息,比如均值和标准差(在`StandardScaler`的情况下)。这些统计信息随后会被用于数据的标准化。

   - 应仅在训练集上使用`fit`方法。

2. fit_transform:

   - 这个方法相当于先调用`fit`再调用`transform`,但是它在内部执行得更高效。

   - 它同样应当仅在训练集上使用,它会计算训练集的统计信息并立即应用到该训练集上。

3. transform:

   - 这个方法使用已经通过`fit`方法计算出的统计信息来转换数据。

   - 它可以应用于任何数据集,包括训练集、验证集或测试集,但是应用时使用的统计信息必须来自于训练集。

在使用`StandardScaler`时,`fit`方法会根据训练数据集计算均值和标准差,然后将这些值保存在`StandardScaler`对象中。当你在另一个数据集上使用`transform`方法时,`StandardScaler`对象会根据之前计算的均值和标准差来转换数据。

一旦`scaler`对象在`X_train`上被`fit`,它就已经知道了如何将数据标准化。总的来说,我们常常是先使用fit_transform(x_train)然后再调用transform(x_text)。

七、特征降维

降维即去掉一些特征,或者转化多个特征为少个特征,以减少数据集的维度,同时尽可能保留数据的重要信息。

在高维空间中处理数据可能非常耗时且计算密集。降维可以简化模型,降低训练时间和资源需求。高维数据可能包含许多无关或冗余特征,这些特征可能引入噪声并导致过拟合。降维可以帮助去除这些不必要的特征。

1、特征选择

VarianceThreshold   底方差过滤降维

Filter(过滤式): 主要探究特征本身特点, 特征与特征、特征与目标值之间关联。

- 方差选择法: 低方差特征过滤

  如果一个特征的方差很小,说明这个特征的值在样本中几乎相同或变化不大,包含的信息量很少,模型很难通过该特征区分不同的对象,比如区分甜瓜子和咸瓜子还是蒜香瓜子,如果有一个特征是长度,这个特征相差不大可以去掉。

  1. 计算方差:对于每个特征,计算其在训练集中的方差(每个样本值与均值之差的平方,在求平均)。

  2. 设定阈值:选择一个方差阈值,任何低于这个阈值的特征都将被视为低方差特征。

  3. 过滤特征:移除所有方差低于设定阈值的特征。

# 低方差过滤
from sklearn.feature_selection import VarianceThreshold
transfer = VarianceThreshold(threshold=0.5)# 方差阈值
data = [[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]]
data_new = transfer.fit_transform(data)print(data_new)
根据相关系数的特征选择

正相关性(Positive Correlation)是指两个变量之间的一种统计关系,其中一个变量的增加通常伴随着另一个变量的增加,反之亦然。在正相关的关系中,两个变量的变化趋势是同向的。当我们说两个变量正相关时,意味着:

- 如果第一个变量增加,第二个变量也有很大的概率会增加。

- 同样,如果第一个变量减少,第二个变量也很可能会减少。

在数学上,正相关性通常用正值的相关系数来表示,这个值介于0和1之间。当相关系数等于1时,表示两个变量之间存在完美的正相关关系,即一个变量的值可以完全由另一个变量的值预测。

负相关性(Negative Correlation)与正相关性刚好相反,但是也说明相关,比如运动频率和BMI体重指数程负相关。

不相关指两者的相关性很小,一个变量变化不会引起另外的变量变化,只是没有线性关系。

# 皮尔逊相关系数
from scipy.stats import pearsonr
import pandas as pddata = pd.read_csv('../src/factor_returns.csv')
data = data.iloc[:, 1:-2]
print(data)
# 计算某两个变量之间的相关系数
r = pearsonr(data["pe_ratio"], data["pb_ratio"])
print(r)
print(r.statistic)# 皮尔逊相关系数[-1,1]  -0.004389322779936271
print(r.pvalue)# 零假设 统计上评估两个变量之间的相关性,越小越相关 0.8327205496590723

注:开发中一般不使用求相关系数的方法,一般使用主成分分析,因为主成分分析过程中就包括了求相关系数。

相关文章:

机器学习基础02_特征工程

目录 一、概念 二、API 三、DictVectorize字典列表特征提取 四、CountVectorize文本特征提取 五、TF-IDF文本1特征词的重要程度特征提取 六、无量纲化预处理 1、MinMaxScaler 归一化 2、StandardScaler 标准化 七、特征降维 1、特征选择 VarianceThreshold 底方差…...

CSS Modules中的 :global

最近写需求遇到如下代码&#xff0c;我们来分析一番&#xff1a; .medicine-bot {:global(.cosd-site-vcard-card) {margin-top: -3px;}:global(.cosd-site-vcard-title-text) {font-size: var(--cos-text-headline-sm);}:global(.cosd-site-vcard-button) {background-color: …...

linux病毒编写+vim shell编程

学习视频来自B站UP主泷羽sec&#xff0c;如涉及侵权马上删除文章 感谢泷羽sec 团队的教学 请一定遵循《网络空间安全法》&#xff01;&#xff01;&#xff01; Linux目录介绍 /bin 二进制可执行文件&#xff08;kali里面是工具一些文件&#xff09;/etc 系统的管理和配置文…...

WinDefender Weaker

PPL Windows Vista / Server 2008引入 了受保护进程的概念&#xff0c;其目的不是保护您的数据或凭据。其最初目标是保护媒体内容并符合DRM &#xff08;数字版权管理&#xff09;要求。Microsoft开发了此机制&#xff0c;以便您的媒体播放器可以读取例如蓝光&#xff0c;同时…...

智能工厂的设计软件 为了监管控一体化的全能Supervisor 的监督学习 之 序5 架构for认知系统 总述 (架构全图)

本文提要 本文讨论的“智能工厂的设计软件” for认知系统的架构全图 &#xff0c;这有别于前面所说的“智能工厂的设计软件”的“全景图”。两者在内容和侧重点上有所不同&#xff0c;但它们共同构成了对智能工厂设计软件的全面描述。 全景图是对智能工厂设计软件的整体概览&…...

vmware集群 vSAN HCL 数据库

HCL数据库升级 https://partnerweb.vmware.com/service/vsan/all.json VSAN版本目录升级 https://vcsa.vmware.com/ph/api/v1/results?deploymentId2d02e861-7e93-4954-9a73-b08692a330d1&collectorIdVsanCloudHealth.6_5&objectId0c3e9009-ba5d-4e5f6-bae8-f25ec5…...

人工智能引发直播革命:AI 技术塑造无人直播全新体验

在数字化浪潮席卷全球的今天&#xff0c;人工智能&#xff08;AI&#xff09;技术以其无与伦比的速度和广度&#xff0c;正深刻地改变着各行各业的面貌。其中&#xff0c;直播行业作为新媒体时代的宠儿&#xff0c;也迎来了由AI技术引领的颠覆性变革。这场由人工智能引发的直播…...

数据研发基础 | 什么是流批一体

流批一体的概念是可能出现在大厂的面试题中的&#xff0c;虽然就算大厂实习也没机会实操这样的高级操作&#xff0c;学一点概念&#xff0c;面试多少是能说上一两句的。大致就是希望一套代码能同时在批处理和流处理中运行&#xff08;同时做离线计算和实时计算&#xff09;。下…...

《Python网络安全项目实战》项目6 编写密码工具程序

《Python网络安全项目实战》项目6 编写密码工具程序 项目6 编写密码工具程序任务6.1 猜数字游戏任务描述任务分析任务实施6.1.1 编写基本的猜数字程序6.1.3 测试并修改程序6.1.4 给程序增加注释 任务拓展任务实施6.2.1 生成随机密码6.2.4 菜单功能 相关知识1. 密码字典2. 密码字…...

现代C++HTTP框架cinatra

文章目录 cinatra简介主要特点 快速上手编译器版本要求使用指南快速示例 项目地址 cinatra简介 cinatra是一个基于C20协程的高性能HTTP框架&#xff0c;它的目标是提供一个快速开发的C HTTP框架解决方案 它不仅支持HTTP/1.1和1.0&#xff0c;还支持SSL和WebSocket&#xff0c…...

【功耗现象】com.gorgeous.lite后台Camera 使用2小时平均电流200mA耗电量400mAh现象

现象 轻颜相机(com.gorgeous.lite)后台Camera 使用2小时平均电流200mA(BugReport提供的电流参考数据),耗电量400mAh 即耗电占比(200mA*2h)/(12.83h*52.68mA )400mAh/623mAh62% CameraOct 10 202321:03:08 - 23:03:372h16m15s859ms to 4h16m44s984msactive duration: 2h 0m 29…...

06.VSCODE:备战大项目,CMake专项配置

娇小灵活的简捷配置不过是年轻人谈情说爱的玩具&#xff0c;帝国大厦的构建&#xff0c;终归要交给CMake去母仪天下。一个没有使用 CMake 的 C 项目&#xff0c;就像未来世界里的一台相声表演&#xff0c;有了德纲却无谦&#xff0c;观众笑着遗憾。—— 语出《双城记》作者&…...

还是小时候味道的麻辣片

麻辣片的诞生&#xff0c;源于人们对辣味的热爱和对丰富口感的追求。它将辣椒的火辣、香料的浓郁和豆制品的醇厚完美结合在一起&#xff0c;创造出了一种令人回味无穷的美食体验。无论是在学校的小卖部、街头的小吃摊&#xff0c;还是超市的货架上&#xff0c;麻辣片都以其鲜艳…...

GaussDB部署架构

GaussDB部署架构 云数据库GaussDB管理平台&#xff08;TPOPS&#xff09;基于B/S架构开发&#xff0c;由Web、管控Service、管控Agent三部分组成&#xff0c;软件结构如图1所示。 图1 各节点部署架构 Web&#xff1a;作为用户接入子系统&#xff0c;用于将用户在Web下发的操作…...

遥测数据采集工具Grafana Alloy

介绍 Alloy是Grafana产品公司旗下的一款新主推遥测数据采集工具&#xff0c;Grafana Alloy也是一个开源OpenTelemetry收集器&#xff0c;具有内置 Prometheus管道并支持指标、日志、跟踪和配置文件。Alloy支持为OTEL、Prometheus、Pyroscope、Loki等服务提供许多指标、日志、跟…...

线性数据结构

数组 数组&#xff08;Array&#xff09; 是一种很常见的数据结构。它由相同类型的元素&#xff08;element&#xff09;组成&#xff0c;并且是使用一块连续的内存来存储。 我们直接可以利用元素的索引&#xff08;index&#xff09;可以计算出该元素对应的存储地址。 数组…...

【ArcGIS微课1000例】0127:计算城市之间的距离

本文讲述,在ArcGIS中,计算城市(以地级城市为例)之间的距离,效果如下图所示: 一、数据准备 加载配套实验数据包中的地级市和行政区划矢量数据(订阅专栏后,从私信查收数据),如下图所示: 二、计算距离 1. 计算邻近表 ArcGIS提供了计算点和另外点之间距离的工具:分析…...

【算法】二分

1. 找到有序区间中 x 最左边的数字的位置 static int getL(int a[], int l, int r, int x) {while (l < r) {int mid l r >> 1;if (x < a[mid]) {r mid;} else {l mid 1;}}if (a[l] ! x) return -1;return l;} 2. 找到有序区间中 x 最右边的数字的位置 stati…...

ARM CCA机密计算安全模型之简介

安全之安全(security)博客目录导读 目录 1、引言 2、问题陈述 3、CCA 安全保证 3.1 对领域所有者的安全保证 3.2 对host环境的安全保证 Arm 机密计算架构&#xff08;CCA&#xff09;安全模型&#xff08;SM&#xff09;定义了 CCA 隔离架构的安全要求和基本安全属性。这…...

蓝桥杯-洛谷刷题-day3(C++)

目录 1.忽略回车的字符串输入 i.getline() ii.逐个字符的识别再输入 2.获取绝对值abs() 3.做题时的误区 4.多个变量的某一个到达判断条件 i.max() 5.[NOIP2016 提高组] 玩具谜题 i.代码 6.逻辑上的圆圈 i.有限个数n的数组 7.数组的定义 i.动态数组 1.忽略回车的字符串输…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...