机器学习———特征工程

1 特征工程概念

特征工程就是对特征进行相关的处理,一般使用pandas来进行数据清洗和数据处理、使用sklearn来进行特征工程,特征工程是将任意数据(如文本或图像)转换为可用于机器学习的数字特征,比如:字典特征提取(特征离散化)、文本特征提取、图像特征提取。

2 特征工程API

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

转换器对象调用fit_transform()进行转换, 其中fit用于计算数据,transform进行最终转换

fit_transform()可以使用fit()和transform()代替

data_new = transfer.fit_transform(data)
可写成
transfer.fit(data)
data_new = transfer.transform(data)

3 DictVectorizer 字典列表特征提取

稀疏矩阵

一个矩阵中大部分元素为零,只有少数元素是非零的矩阵。 例如,在一个1000 x 1000的矩阵中,如果只有1000个非零元素,那么这个矩阵就是稀疏的。

三元组表

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

(行,列) 数据

(0,0) 10

(0,1) 20

(2,0) 90

(2,20) 8

(8,0) 70

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

非稀疏矩阵(稠密矩阵)

矩阵中非零元素的数量与总元素数量相比接近或相等,也就是说矩阵中的大部分元素都是非零的。

api

  • 创建转换器对象:

        sklearn.feature_extraction.DictVectorizer(sparse=True)

        参数:

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

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

  • 转换器对象调用:

        fit_transform(data)

        参数:

        data为一维字典数组或一维字典列表,返回转化后的矩阵或数组

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

示例:

from sklearn.feature_extraction import DictVectorizer
import pandas as pd # sklearn.feature_extraction.DictVectorizer(sparse=True)data = [{'city': '北京', 'temperature': 100}, 
{'city': '上海', 'temperature': 60}, 
{'city': '深圳', 'temperature': 30}]# 初始化工具(字典变成向量的工具器)
# sparse=False表示返回的是数组
model=DictVectorizer(sparse=False)
data=model.fit_transform(data)
print(data,type(data))
# 获取所有的特征名称
print(model.get_feature_names_out())# sparse=True返回类型为csr_matrix的稀疏矩阵,可以调用.toarray()方法将稀疏矩阵转换为数组
model=DictVectorizer(sparse=True)
data=model.fit_transform(data)
print(data,type(data))
print(model.get_feature_names_out())
arr=data.toarray()
print(arr)

 sparse=False结果:

 

 sparse=True结果:

 

4 CountVectorizer 文本特征提取

(1)API

sklearn.feature_extraction.text.CountVectorizer(stop_words=' ')

关键字:

参数stop_words,值为list,表示词的黑名单(不提取的词)

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

(2) 英文文本提取

# CountVectorizer 文本特征提取
from sklearn.feature_extraction.text import CountVectorizer
corpus = [  'I love machine learning. Its awesome.', 'Its a book amazon book', 'Amazon is a great company']
# 创建一个词频提取对象
# 构造函数关键字参数stop_words,值为list,表示词的黑名单(不提取的词)
vectorizer = CountVectorizer(stop_words=['amazon'])
# 提取词频
x=vectorizer.fit_transform(corpus)
print(x)
print(x.toarray())
print(vectorizer.get_feature_names_out())

 输出结果:

(3) 中文文本提取

 中文文本不像英文文本,中文文本文字之间没有空格,所以要先分词,一般使用jieba分词.

pip install jieba

 jieba使用函数:jieba.cut(data)

 示例:

# 中文文本提取
from sklearn.feature_extraction.text import CountVectorizer
import jieba# 传入没有断词的文本
def my_cut(text):return ' '.join(jieba.cut(text))corpus = ['我来到北京清华大学',  '他来到了网易杭研大厦',  '小明硕士毕业与中国科学院']
vectorizer = CountVectorizer(stop_words=[])
x=vectorizer.fit_transform(my_cut(el) for el in corpus)
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), 表示一个词在当前篇文章中的重要性

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

(2) API

sklearn.feature_extraction.text.TfidfVectorizer()

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

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

(3) 示例

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(res.toarray())
print(transfer.get_feature_names_out())
ddata=pd.DataFrame(res.toarray(),columns=transfer.get_feature_names_out())
ddata

 输出结果:

6 无量纲化-预处理

无量纲,即没有单位的数据

(1) MinMaxScaler 归一化

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

1、公式:

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

2、归一化API

sklearn.preprocessing.MinMaxScaler(feature_range)

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

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

fit_transform函数的返回值为ndarray

3、示例:

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

 

4、缺点

最大值和最小值容易受到异常点影响,如一个异常值远远大于正常值,所以鲁棒性较差。所以常使用标准化的无量钢化

(2)StandardScaler 标准化

它的目的是将不同特征的数值范围缩放到统一的标准范围,以便更好地适应一些机器学习算法,特别是那些对输入数据的尺度敏感的算法。

1、标准化公式

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

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

2、标准化 API

sklearn.preprocessing.StandardScale

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

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

3、标准化示例
from sklearn.preprocessing import StandardScaler
import numpy as np
# 初始化标准化工具
scaler=StandardScaler()
np.random.seed(7)data=np.random.randint(0,100,(10,4))
print(data)
x=scaler.fit_transform(data)
print(x)

 

4、注意点

在数据预处理中,特别是使用如StandardScale这样的数据转换器时,fit、fit_transform和transform这三个方法的使用是至关重要的,它们各自有不同的作用:

  1. fit:

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

    • 你应当仅在训练集上使用fit方法。

  2. fit_transform:

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

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

  3. transform:

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

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

总结来说:我们常常是先fit_transform(x_train)然后再transform(x_text)  

7 特征降维

实际数据中,有时候特征很多,会增加计算量,降维就是去掉一些特征,或者转化多个特征为少量个特征

 特征降维其目的:是减少数据集的维度,同时尽可能保留数据的重要信息。

1 .特征选择

(a) VarianceThreshold 低方差过滤特征选择

如果一个特征的方差很小,说明这个特征的值在样本中几乎相同或变化不大,包含的信息量很少,模型很难通过该特征区分不同的对象

(b) 根据相关系数的特征选择

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

api:

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

返回对象有两个属性:

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

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

示例:

from scipy.stats import pearsonr
import pandas as pd
def association_demo():data = pd.read_csv('src/factor_returns.csv')data = data.iloc[:, 1:-2]# 计算某两个变量之间的相关系数r1 = pearsonr(data["pe_ratio"], data["pb_ratio"])print(r1.statistic) #-0.0043893227799362555 相关性, 负数表示负相关print(r1.pvalue) #0.8327205496590723        正相关性r2 = pearsonr(data['revenue'], data['total_expense'])print(r2) #PearsonRResult(statistic=0.9958450413136111, pvalue=0.0)return None
association_demo()

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务器数据恢复—分区结构被破坏的reiserfs文件系统数据恢复案例

服务器数据恢复环境: 一台服务器中有一组由4块SAS硬盘组建的RAID5阵列,上层安装linux操作系统统。分区结构:boot分区LVM卷swap分区(按照顺序),LVM卷中划分了一个reiserfs文件系统作为根分区。 服务器故障…

vue3+vite搭建脚手架项目本地运行electron桌面应用

1.搭建脚手架项目 搭建Vue3ViteTs脚手架-CSDN博客 2.创建完项目后,安装所需依赖包 npm i vite-plugin-electron electron26.1.0 3.根目录下创建electron/main.ts electron/main.ts /** electron/main.ts */import { app, BrowserWindow } from "electron&qu…

C++ | Leetcode C++题解之第556题下一个更大元素III

题目: 题解: class Solution { public:int nextGreaterElement(int n) {int x n, cnt 1;for (; x > 10 && x / 10 % 10 > x % 10; x / 10) {cnt;}x / 10;if (x 0) {return -1;}int targetDigit x % 10;int x2 n, cnt2 0;for (; x2 …

大数据技术之Hadoop :我是恁爹

就如上图中的技术分类,大数据技术主要解决的就是海量数据的存储和计算问题。 这两个问题的解决方案最先被 Google 被提出,用于解决 Google 搜索引擎海量的网页存储和索引的构建。对应的技术就是日后被人所熟知的 HDFS 和 MapReduce。 不关注大数据的可…

云计算:定义、类型及对企业的影响

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 云计算:定义、类型及对企业的影响 云计算:定义、类型及对企业的影响 云计算:定义、类型及对企…

如何优化Elasticsearch的查询性能?

优化Elasticsearch查询性能可以从以下几个方面进行: 合理设计索引和分片: 确保设置合理的分片和副本数,考虑数据量、节点数和集群大小。根据数据量和节点数量调整分片数量,避免使用过多分片,因为每个分片都需要额外的…

星期-时间范围选择器 滑动选择时间 最小粒度 vue3

星期-时间范围选择器 功能介绍属性说明事件说明实现代码使用范例 根据业务需要,实现了一个可选择时间范围的周视图。用户可以通过鼠标拖动来选择时间段,并且可以通过快速选择组件来快速选择特定的时间范围。 如图: 功能介绍 时间范围选择&…

光流法与直接法在SLAM中的应用

本文总结视觉SLAM中常用的光流法与直接法 1、Lucas-Kanade光流法 相机所拍摄到的图像随相机视角的变化而变化,这种变化也可以理解为图像中像素的反向移动。“光流”(Optical Flow)是指通过分析连续图像帧来估计场景中像素或特征点的运动的技…

SSE (Server-Sent Events) 服务器实时推送详解

Server-Sent Events 一、什么是 SSE ?二、SSE 的工作原理三、SSE 的基本配置1.HTTP 请求和响应头设置2.SSE 字段介绍3.SSE 事件数据流示例 四、SseEmitter 的基本配置1.SseEmitter 介绍及用法2.使用 SseEmitter 示例11)编写核心 SSE Client2)编写 Controller3)前端接收与处理 …

AI大模型:重塑软件开发流程的优势、挑战及应对策略

随着人工智能技术的飞速发展,AI大模型正在深刻影响着软件开发的各个环节。本文将详细分析AI在软件开发流程中带来的优势,面临的挑战,以及开发者的应对策略。 一、AI在软件开发流程中的优势 提高开发效率 AI大模型能够自动生成高质量的代码…

《重学Java设计模式》之 原型模式

原型模式主要解决的问题就是创建重复对象,而这部分对象内容本身比较复杂,生成过程可能从库或者RPC接口中获取数据的耗时较长,因此采用克隆的方式节省时间。 案例:上机考试抽题,要求打乱题目、答案数据 工厂结构 选择题…

Java项目实战II基于Spring Boot的药店管理系统的设计与实现(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着医疗行业的快速发展和人们对健康需…

html+js+css实现拖拽式便签留言

前些日子在网上冲浪时,看到一个便签式留言墙,让人耳目一新。心想这个看着不错,额想要。于是便开始搜寻是否有相应开源插件,想将其引入自己的博客中。但是搜寻了一圈,都没有符合预期的,要么功能不符合。有的功能符合&am…

模型压缩相关技术概念澄清(量化/剪枝/知识蒸馏)

1.模型压缩背景 随着深度学习技术的不断发展,模型的规模和复杂度也随之增加。大型模型往往具有更高的精度和更强的泛化能力,但在实际应用中,模型的大小却成为了一个制约因素。模型体积过大会导致存储、传输和推理速度等方面的瓶颈&#xff0…

Linux入门:环境变量与进程地址空间

一. 环境变量 1. 概念 1️⃣基本概念: 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数 如:我们在编写C/C代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里&#x…

Mysql前言

文章目录 Mysql 数据库简介SQL 基础语法什么是 SQL语句SQL 的作用SQL 语句的分类SQL 通用语法查询状态 🏡作者主页:点击! 🤖Mysql专栏:点击! ⏰️创作时间:2024年11月12日18点20分 SQL是数据库…

VCSVerdi:KDB文件的生成和导入

相关阅读 VCShttps://blog.csdn.net/weixin_45791458/category_12828763.html Verdihttps://blog.csdn.net/weixin_45791458/category_12829428.html?spm1001.2014.3001.5482 前言 在复杂的设计中,很难在HDL或测试平台级别(如使用系统函数&#xff…

2024年【汽车修理工(高级)】考试试卷及汽车修理工(高级)证考试

题库来源:安全生产模拟考试一点通公众号小程序 汽车修理工(高级)考试试卷是安全生产模拟考试一点通总题库中生成的一套汽车修理工(高级)证考试,安全生产模拟考试一点通上汽车修理工(高级&#…

灵活就业,真的等同于失业吗?“三无人员”如何齐短板获贷款

现在灵活就业的人越来越多,目前有约2亿人选择灵活就业,今天咱们就来好好聊聊,灵活就业,它真的等同于失业吗? 咱们可以看看那些跑外卖的、做网约车司机的,虽然他们看起来在忙忙碌碌地工作,但细究…

python识别ocr 图片和pdf文件

#识别图片 pip3 install paddleocr pip3 install paddlepaddle#识别pdf pip3 install PyMuPDF 重点:路径不能有中文,不然pdf文件访问不了 from paddleocr import PaddleOCR from rest_framework.response import Response from rest_framework.views im…