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

用Python实现特征工程之特征提取——数值特征提取、类别特征提取、文本特征提取、时间特征提取

特征提取是特征工程中的关键步骤,它从原始数据中提取有意义的特征,以便机器学习模型能够更好地理解和学习数据。根据数据类型,特征提取可以分为数值特征提取、类别特征提取、文本特征提取和时间特征提取。下面详细讲解每种特征提取方法,并提供相应的Python代码示例。

1. 数值特征提取

数值特征是直接以数值形式存在的数据,通过各种数学和统计方法进行处理,以提取有意义的特征。

常见方法:
  • 标准化和归一化:将特征缩放到相同的范围内。
  • 多项式特征:通过创建特征的多项式组合来增加特征维度。
  • 离散化:将连续数值特征转换为离散类别特征。
  • 统计特征:如均值、标准差、最大值、最小值等。
示例代码:
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler, PolynomialFeatures, KBinsDiscretizer# 生成示例数据
data = {'feature1': np.random.rand(100), 'feature2': np.random.rand(100) * 100}
df = pd.DataFrame(data)# 标准化
scaler = StandardScaler()
df[['feature1', 'feature2']] = scaler.fit_transform(df[['feature1', 'feature2']])# 多项式特征
poly = PolynomialFeatures(degree=2, include_bias=False)
poly_features = poly.fit_transform(df[['feature1', 'feature2']])
poly_df = pd.DataFrame(poly_features, columns=poly.get_feature_names_out(['feature1', 'feature2']))# 离散化
discretizer = KBinsDiscretizer(n_bins=5, encode='ordinal', strategy='uniform')
df['feature1_binned'] = discretizer.fit_transform(df[['feature1']])# 统计特征
df['feature1_mean'] = df['feature1'].mean()
df['feature1_std'] = df['feature1'].std()print(df.head())
print(poly_df.head())
代码运行结果:
   feature1  feature2  feature1_binned  feature1_mean  feature1_std
0  1.382126  1.292491              4.0       0.453807      0.289735
1  0.275574 -0.636928              1.0       0.453807      0.289735
2  0.963689 -0.700971              3.0       0.453807      0.289735
3 -1.449630 -1.012800              0.0       0.453807      0.289735
4 -1.020036 -0.827177              0.0       0.453807      0.289735feature1  feature2  feature1^2  feature1 feature2  feature2^2
0  1.382126  1.292491     1.910268    1.787529    1.669678
1  0.275574 -0.636928     0.075943   -0.175531    0.405678
2  0.963689 -0.700971     0.928396   -0.675249    0.491360
3 -1.449630 -1.012800     2.101423    1.467240    1.025753
4 -1.020036 -0.827177     1.040473    0.844401    0.684210

 

2. 类别特征提取

类别特征是表示离散类别的数据,通过编码等方法将其转换为模型可用的数值形式。

常见方法:
  • 独热编码(One-Hot Encoding):将每个类别转换为一个二进制特征。
  • 标签编码(Label Encoding):将每个类别映射到一个唯一的整数。
  • 频率编码:根据类别的出现频率进行编码。
  • 目标编码:根据目标变量对类别进行编码。
示例代码:
from sklearn.preprocessing import OneHotEncoder, LabelEncoder# 生成示例数据
df = pd.DataFrame({'category': ['A', 'B', 'C', 'A', 'B', 'C']})# 独热编码
onehot_encoder = OneHotEncoder(sparse=False)
onehot_encoded = onehot_encoder.fit_transform(df[['category']])
onehot_df = pd.DataFrame(onehot_encoded, columns=onehot_encoder.get_feature_names_out(['category']))# 标签编码
label_encoder = LabelEncoder()
df['category_encoded'] = label_encoder.fit_transform(df['category'])# 频率编码
df['category_freq'] = df['category'].map(df['category'].value_counts() / len(df))print(df.head())
print(onehot_df.head())
代码运行结果:
  category  category_encoded  category_freq
0        A                 0       0.333333
1        B                 1       0.333333
2        C                 2       0.333333
3        A                 0       0.333333
4        B                 1       0.333333category_A  category_B  category_C
0         1.0         0.0         0.0
1         0.0         1.0         0.0
2         0.0         0.0         1.0
3         1.0         0.0         0.0
4         0.0         1.0         0.0

3. 文本特征提取

文本特征是处理自然语言数据,通过各种方法将其转换为数值特征。

常见方法:
  • 词袋模型(Bag of Words):统计每个词在文本中出现的次数。
  • TF-IDF:根据词在文档中的频率和逆文档频率进行加权。
  • 词嵌入(Word Embedding):使用预训练的词向量将词转换为密集向量。
  • 文本长度:统计文本的长度或单词数量。
示例代码:
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer# 生成示例数据
texts = ["This is a sample text", "Another sample text for feature extraction"]# 词袋模型
vectorizer = CountVectorizer()
bag_of_words = vectorizer.fit_transform(texts)
bag_of_words_df = pd.DataFrame(bag_of_words.toarray(), columns=vectorizer.get_feature_names_out())# TF-IDF
tfidf_vectorizer = TfidfVectorizer()
tfidf = tfidf_vectorizer.fit_transform(texts)
tfidf_df = pd.DataFrame(tfidf.toarray(), columns=tfidf_vectorizer.get_feature_names_out())# 文本长度
df = pd.DataFrame({'text': texts})
df['text_length'] = df['text'].apply(len)
df['word_count'] = df['text'].apply(lambda x: len(x.split()))print(bag_of_words_df.head())
print(tfidf_df.head())
print(df.head())
代码运行结果:
   another  extraction  feature  for  is  sample  text  this
0        0           0        0    0   1       1     1     1
1        1           1        1    1   0       1     1     0another  extraction   feature   for        is     sample     text       this
0  0.000000     0.000000  0.000000  0.000000  0.573536  0.415078  0.415078  0.573536
1  0.461199     0.461199  0.461199  0.461199  0.000000  0.333893  0.333893  0.000000text  text_length  word_count
0              This is a sample text           21           5
1  Another sample text for feature extraction           40           6

4. 时间特征提取

时间特征是表示时间或日期的数据,通过提取各种时间相关的特征来丰富数据。

常见方法:
  • 提取日期和时间成分:如年、月、日、小时、分钟、秒等。
  • 周期性特征:如星期几、月份等,可以使用正弦和余弦变换。
  • 时间差特征:计算两个时间点之间的差异。
示例代码:
import pandas as pd# 生成示例数据
date_rng = pd.date_range(start='2022-01-01', end='2022-01-10', freq='D')
df = pd.DataFrame(date_rng, columns=['date'])# 提取日期和时间成分
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
df['day'] = df['date'].dt.day
df['dayofweek'] = df['date'].dt.dayofweek# 周期性特征
df['day_sin'] = np.sin(df['dayofweek'] * (2 * np.pi / 7))
df['day_cos'] = np.cos(df['dayofweek'] * (2 * np.pi / 7))# 时间差特征
df['time_diff'] = df['date'] - df['date'].shift(1)print(df.head())
代码运行结果:
        date  year  month  day  dayofweek   day_sin   day_cos time_diff
0 2022-01-01  2022      1    1          5  0.781831  0.623490       NaT
1 2022-01-02  2022      1    2          6  0.974928  0.222521   1 days
2 2022-01-03  2022      1    3          0  0.000000  1.000000   1 days
3 2022-01-04  2022      1    4          1 -0.974928  0.222521   1 days
4 2022-01-05  2022      1    5          2 -0.781831 -0.623490   1 days

这些代码示例展示了各种特征提取方法在不同数据类型上的应用。通过合理的特征提取,可以提高机器学习模型的性能和效果。

相关文章:

用Python实现特征工程之特征提取——数值特征提取、类别特征提取、文本特征提取、时间特征提取

特征提取是特征工程中的关键步骤,它从原始数据中提取有意义的特征,以便机器学习模型能够更好地理解和学习数据。根据数据类型,特征提取可以分为数值特征提取、类别特征提取、文本特征提取和时间特征提取。下面详细讲解每种特征提取方法&#…...

按图搜索新体验:阿里巴巴拍立淘API返回值详解

阿里巴巴拍立淘API是一项基于图片搜索的商品搜索服务,它允许用户通过上传商品图片,系统自动识别图片中的商品信息,并返回与之相关的搜索结果。以下是对阿里巴巴拍立淘API返回值的详细解析: 一、主要返回值内容 商品信息 商品列表…...

vue跨域问题

本地调试 可以通过在vue.config.js中配置devServer来实现跨域请求。 module.exports {publicPath: ./,productionSourceMap: false, // 生产环境是否生成 sourceMap 文件devServer: {proxy: {/bi: {target: http://1.11.113.20:1234/bi, // 后台接口域名ws: false, //…...

【NLP】文本处理的基本方法【jieba分词、命名实体、词性标注】

文章目录 1、本章目标2、什么是分词3、jieba的使用3.1、精确模式分词3.2、全模式分词3.3、搜索引擎模式分词3.4、中文繁体分词3.5、使用用户自定义词典 4、什么是命名实体识别5、什么是词性标注6、小结7、jieba词性对照表⭐ 🍃作者介绍:双非本科大三网络…...

unity 本地使用Json(全套)

提示:文章有错误的地方,还望诸位大神不吝指教! 文章目录 前言一、Json是什么?二、创建Json文件1.在线编辑并转实体类(C#)2.Json文件 三、解析Json并使用四、报错:JsonError:JsonExce…...

java消息队列ActiveMQ

安装 前置条件 activemq的运行依赖于jdk,需要提前安装jdk如果已经安装了jdk,需要根据jdk的版本来选择对应的版本进行安装activemq版本对应在官网上,使用java -version 看jdk的版本注意:jdk和mq的版本不一致会报错,电脑…...

Android SurfaceFlinger——信号同步原理(五十一)

经过前面系列文章的学习,我们的已经理解了 SurfaceFlinger 运行机制以及同步机制,但是SurfaceFlinger 又是以什么方法是把需要刷新的信号发送给 App 进程的。 一、VSync简介 垂直同步(Vertical Synchronization,简称 VSync)是一种用于同步视频信号和显示设备刷新率的技术…...

html+css网页制作 博云丝网5个页面 无js ui还原度100%

htmlcss网页制作 博云丝网5个页面 无js ui还原度100% 网页作品代码简单,可使用任意HTML编辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取…...

Docker Hub 镜像代理加速

因为未知原因,docker hub 已经不能正常拉取镜像,可以使用以下代理服务来进行: "https://docker.m.daocloud.io", "https://noohub.ru", "https://huecker.io", "https://dockerhub.timeweb.cloud"…...

矩阵:消除冗余

矩阵 基本概念 矩阵(Matrix)是一个按照行和列排列的元素的二维数组。具体来说,一个 ( m \times n ) 的矩阵有 ( m ) 行和 ( n ) 列,表示为: A ( a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋮ ⋮ ⋱ ⋮ a m 1 a m 2 ⋯…...

【AWS账号解绑关联】Linker账号解绑重新关联注意事项

文章目录 一、来自客户疑问二、提交工单获取帮助三、最佳操作说明四、最佳操作步骤五、参考资料活动上新 一、来自客户疑问 将Linker账号,从一个组织中退出,重新关联到新的组织中,这解绑到重新完成新的关联绑定期间会在Linker账号中的账单中…...

入门学习使用overleaf和latex

文章目录 1.下载对应的latex论文模板2.overleaf平台的使用2.1overleaf平台的介绍2.2overleaf平台模板文件的上传2.3latex语法的学习2.3.2 分段(如下图显示)2.3.3 其他2.3.4简单latex实操2.3.5 换行符和换页符2.3.6左右居中对齐2.3.7 字体设置2.3.8插入固定位置图片2.3.9文字包围…...

后端调优——分布式锁选型——入门

文章目录 引言正文分布式锁的定义分布式锁的具体应用场景如何实现分布式锁主动轮询型分布式锁实现思路一、MySQL分布式锁二、Redis分布式锁 监听回调型分布式锁Etcd分布式锁Zookeeper分布式锁 锁的对比 总结 引言 最近面试,一直被问到分布式锁,然后仅仅…...

k8s集群管理 Pod管理命令

k8s集群管理命令 信息查询命令 子命令说明help用于查看命令及子命令的帮助信息cluster-info显示集群的相关配置信息api-resources查看当前服务器上所有的资源对象api-versions查看当前服务器上所有资源对象的版本config管理当前节点上的认证信息 资源对象概述 Pod概述 Pod 管…...

Java 并发(二)—— AQS原理

AQS,全名AbstractQueuedSynchronizer。 抽象队列同步器定义多线程访问共享资源的同步模板,解决了实现自定义同步器时涉及的大量细节问题,简化开发两种同步状态:独占、共享核心组件:State变量、CLH变体队列、获取 / 释…...

Maven插件:exec-maven-plugin-代码执行或者直接输出内置变量信息

文章目录 概述使用应用自行实现记录项目打包插件 概述 官网&#xff1a; https://www.mojohaus.org/exec-maven-plugin/usage.html   依赖&#xff1a; https://mvnrepository.com/artifact/org.codehaus.mojo/exec-maven-plugin 使用 <plugin><groupId>org.codeh…...

https://ffmpeg.org/

https://ffmpeg.org/ https://www.gyan.dev/ffmpeg/builds/ https://github.com/BtbN/FFmpeg-Builds/releases F:\Document_ffmpeg F:\Document_ffmpeg\ffmpeg-master-latest-win64-gpl-shared\bin...

linux 源码部署polardb-x 错误汇总

前言 在linux 源码部署polardb-x 遇到不少错误&#xff0c;特在此做个汇总。 问题列表 CN 启动报错 Failed to init new TCP 详细错误如下 Caused by: Failed to init new TCP. XClientPool to my_polarx#267b21d8127.0.0.1:33660 now 0 TCP(0 aging), 0 sessions(0 runni…...

vscode用快捷键一键生成vue模板

项目中有些代码模块是固定的&#xff0c;如下面的代码所示&#xff0c;为了不重复写这些相同的代码&#xff0c;我们可以使用快键键一键生成模板。 流程&#xff1a; 中文&#xff1a;首选项-> 用户代码片段 -> 输入框中输入vue,找到vue.json文件&#xff08;没有vue.j…...

ARM 架构硬件新趋势:嵌入式领域的未来

目录 目录 一、ARM 架构概述 二、新趋势一&#xff1a;AI 加速器集成 三、新趋势二&#xff1a;更高效的电源管理 四、新趋势三&#xff1a;安全性增强 五、结语 随着物联网 (IoT) 和边缘计算的发展&#xff0c;ARM 架构在嵌入式系统中的应用越来越广泛。从智能手机到智能…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...