特征构造和降维

news2024/9/19 11:02:26

特征构造(Feature Engineering)

特征构造是从现有数据中创建新的特征,以揭示数据中的隐藏关系,从而提高模型表现。这是数据预处理中一个关键步骤,可以显著提升模型的性能。

原理

通过特征构造,我们可以利用现有特征之间的关系来创建新的特征。例如,对于两个特征 x1 和 x2,我们可以构造它们的交互特征 x1× x2:

此外,可以使用各种数学运算、统计量或领域知识来构造新的特征,以揭示数据中的隐藏关系。

案例:在线购物平台数据

假设我们有一个在线购物平台的用户行为数据集,其中包含用户的基本信息和购买行为数据,如访问次数、购买次数、平均购买金额等。我们将通过特征构造,创建一些新的特征,如每次访问的平均购买金额和购买率,并进行可视化分析。

数据描述

  • user_id:用户ID
  • visits:访问次数
  • purchases:购买次数
  • total_spent:总消费金额

Python代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 生成示例数据
np.random.seed(42)
data = pd.DataFrame({
    'user_id': range(1, 101),
    'visits': np.random.randint(1, 20, 100),
    'purchases': np.random.randint(0, 10, 100),
    'total_spent': np.random.uniform(10, 1000, 100)
})

# 构造新特征
data['avg_spent_per_visit'] = data['total_spent'] / data['visits']
data['purchase_rate'] = data['purchases'] / data['visits']

# 显示前几行数据
print("数据集前几行:")
print(data.head())

# 绘制图形
plt.figure(figsize=(14, 6))

# 图形1:每次访问的平均购买金额与总消费金额的关系
plt.subplot(1, 2, 1)
sns.scatterplot(x=data['avg_spent_per_visit'], y=data['total_spent'])
plt.title('Avg Spent per Visit vs Total Spent')
plt.xlabel('Avg Spent per Visit ($)')
plt.ylabel('Total Spent ($)')

# 图形2:购买率与总消费金额的关系
plt.subplot(1, 2, 2)
sns.scatterplot(x=data['purchase_rate'], y=data['total_spent'])
plt.title('Purchase Rate vs Total Spent')
plt.xlabel('Purchase Rate')
plt.ylabel('Total Spent ($)')

plt.tight_layout()
plt.show()

# 更多图形
plt.figure(figsize=(14, 6))

# 图形3:访问次数与总消费金额的关系
plt.subplot(1, 2, 1)
sns.scatterplot(x=data['visits'], y=data['total_spent'])
plt.title('Visits vs Total Spent')
plt.xlabel('Visits')
plt.ylabel('Total Spent ($)')

# 图形4:每次访问的平均购买金额的分布
plt.subplot(1, 2, 2)
sns.histplot(data['avg_spent_per_visit'], kde=True)
plt.title('Distribution of Avg Spent per Visit')
plt.xlabel('Avg Spent per Visit ($)')
plt.ylabel('Frequency')

plt.tight_layout()
plt.show()

代码解析

  1. 生成示例数据:创建一个包含用户访问和购买行为的示例数据集,包括用户ID、访问次数、购买次数和总消费金额。
  2. 构造新特征
    • avg_spent_per_visit:每次访问的平均购买金额,通过总消费金额除以访问次数计算得到。
    • purchase_rate:购买率,通过购买次数除以访问次数计算得到。
  1. 显示前几行数据:输出数据集的前几行,以便检查数据和新特征的正确性。
  2. 绘制图形
    • 图形1:展示每次访问的平均购买金额与总消费金额的关系。使用散点图来观察不同用户的购买行为。
    • 图形2:展示购买率与总消费金额的关系。使用散点图来观察购买率对总消费金额的影响。

    • 图形3:展示访问次数与总消费金额的关系。使用散点图来观察不同访问次数用户的消费情况。
    • 图形4:展示每次访问的平均购买金额的分布。使用直方图和核密度估计(KDE)来观察每次访问的平均购买金额的分布情况。

通过这个生活场景的案例,我们可以看到特征构造如何揭示数据中的隐藏关系,并帮助我们更好地理解和分析数据。构造的新特征不仅可以提高模型的表现,还可以为数据分析提供更多有价值的视角。

降维(Dimensionality Reduction)

降维是减少特征数量的技术,旨在保留数据的主要信息。常用的方法包括主成分分析(PCA)和线性判别分析(LDA)。通过降维,可以减少数据的复杂性,消除噪声,并提高模型的性能。

原理

  • 主成分分析(PCA)
    1. 数据中心化:将数据集的每个特征减去其均值。
    2. 计算协方差矩阵:描述数据的协方差信息。
    3. 特征值分解:对协方差矩阵进行特征值分解,得到特征值和特征向量。
    4. 选择前k个最大特征值对应的特征向量构成变换矩阵。
    5. 变换数据:用变换矩阵将原始数据投影到低维空间。

核心公式:

案例:客户购买行为数据

假设我们有一个大型超市的客户购买行为数据集,其中包含多个特征,如客户年龄、月均购买次数、月均消费金额、购买种类数等。我们将通过PCA和t-SNE降维方法,将数据从高维降到二维,以便可视化分析。

数据描述

  • customer_id:客户ID
  • age:年龄
  • avg_purchases_per_month:月均购买次数
  • avg_spent_per_month:月均消费金额
  • purchase_variety:购买种类数

Python代码

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.decomposition import PCA
from sklearn.manifold import TSNE

# 生成示例数据
np.random.seed(42)
data = pd.DataFrame({
    'customer_id': range(1, 101),
    'age': np.random.randint(18, 70, 100),
    'avg_purchases_per_month': np.random.randint(1, 30, 100),
    'avg_spent_per_month': np.random.uniform(100, 5000, 100),
    'purchase_variety': np.random.randint(1, 20, 100)
})

# 提取特征列
features = data[['age', 'avg_purchases_per_month', 'avg_spent_per_month', 'purchase_variety']]

# 使用PCA将数据降到2维
pca = PCA(n_components=2)
data_pca = pca.fit_transform(features)

# 使用t-SNE将数据降到2维
tsne = TSNE(n_components=2, random_state=42)
data_tsne = tsne.fit_transform(features)

# 绘制PCA降维后的数据
plt.figure(figsize=(14, 6))

plt.subplot(1, 2, 1)
scatter = plt.scatter(data_pca[:, 0], data_pca[:, 1], c=data['age'], cmap='viridis', alpha=0.7)
plt.colorbar(scatter, label='Age')
plt.title('PCA of Customer Data')
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')

# 绘制t-SNE降维后的数据
plt.subplot(1, 2, 2)
scatter = plt.scatter(data_tsne[:, 0], data_tsne[:, 1], c=data['age'], cmap='viridis', alpha=0.7)
plt.colorbar(scatter, label='Age')
plt.title('t-SNE of Customer Data')
plt.xlabel('t-SNE Component 1')
plt.ylabel('t-SNE Component 2')

plt.show()

# 计算PCA的前两个主成分的解释方差比
explained_variance = pca.explained_variance_ratio_
print(f'Explained variance by the first two principal components: {explained_variance[0]:.2f}, {explained_variance[1]:.2f}')

# 用Seaborn绘制Pairplot图(可以绘制更多维度,但这里只选前两个维度示范)
df_pca = pd.DataFrame(data_pca, columns=['PC1', 'PC2'])
df_pca['age'] = data['age']

sns.pairplot(df_pca, hue='age', palette='viridis')
plt.suptitle('Pairplot of PCA Components', y=1.02)
plt.show()

代码解析

  1. 生成示例数据:创建一个包含客户购买行为的示例数据集,包括客户ID、年龄、月均购买次数、月均消费金额和购买种类数。
  2. 提取特征列:从数据集中提取用于降维的特征列。
  3. 使用PCA降维:将数据降到二维,方便可视化分析。绘制PCA降维后的散点图,以客户年龄为颜色。
  4. 使用t-SNE降维:同样将数据降到二维,并绘制t-SNE降维后的散点图,以客户年龄为颜色。

  1. 解释方差比:计算PCA前两个主成分的解释方差比,展示降维后的信息保留程度。
  2. 绘制Pairplot图:使用Seaborn绘制PCA主成分的成对关系图,以客户年龄为颜色。

通过这个生活场景的案例,我们可以看到降维如何帮助我们减少数据的复杂性,同时保留主要信息,从而更好地理解和分析数据。

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

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

相关文章

“云计算环境下的等保测评要点分析“

随着云计算技术的广泛应用,企业越来越多地将业务迁移到云端,这不仅带来了灵活性和效率的提升,也对信息安全提出了新的挑战。等保测评作为我国信息安全等级保护制度的重要组成部分,其在云计算环境下的实施具有特殊性。本文将围绕“…

nginx 简单使用方法

nginx是用于 Web 服务、反向代理、内容缓存、负载均衡、媒体流传输等场景的开源软件。 主要作用有三个:1、反向代理 负载均衡动静分离 下载地址:nginx: download nginx执行命令及启动 //假设安装在E:\server\nginx-1.20.0目录下 //cmd命令进入安装文…

如何在 VitePress 中增加一个全局自定义组件

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storm…

【Python实战】轻松实现自动发送邮件

本文收录于 《一起学Python趣味编程》专栏,从零基础开始,分享一些Python编程知识,欢迎关注,谢谢! 文章目录 一、前言二、开发准备三、正式开始四、总结一、前言 本文介绍如何使用Python开源项目“PythonSendMail”,快速实现自动发送带Excel报表附件的邮件。只需要进行简…

操作系统篇--八股文学习第十天| 进程和线程之间有什么区别;并行和并发有什么区别;解释一下用户态和核心态,什么场景下,会发生内核态和用户态的切换?

进程和线程之间有什么区别 答: 进程是资源调度和分配的基本单位。 线程是程序执行的最小单位,线程是进程的子任务,是进程内的执行单元。 一个进程至少有一个线程,一个进程可以运行多个线程,这些线程共享同一块内存…

oracle rac-> rac配置adg避坑注意点

例如源主库db_name为aaa db_unique_name为aaa,实例名为aaa1,aaa2 ORACLE_SID为aaa1,aaa2 tnsnames.ora的服务名配置:aaa/dgaaa 则备库设置参考:db_name相同为aaa,db_unique_name不同为dgaaa,实例名为dgaaa1,dgaaa2…

【LeetCode】56. 区间合并

区间合并 题目描述: 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。 示例 1: …

Oracle的一些脚本工具总结

一、操作系统性能 在linux 6 之后,建议使用dstat监控操作系统的各项指标。 使用方法: yum install dstat dstat -cdlrgmnpsy 二、we.sql https://download.csdn.net/download/zengxiangbo/89601165 详见文章关联附件。 Oracle脚本工具,查…

企业安全生产管理是否将成为新的朝阳产业?

这个答案我可以肯定的告诉你,是的! 首先朝阳产业是啥?朝阳产业指的是具有广阔发展前景、高成长性和创新性的产业。 但你也有可能不信我说的这句。因为在大多数人看来,安全生产管理这块儿,企业的关注度不多&#xff0…

Oracle Database 确认表空间大小的方法

Oracle Database 确认表空间大小的方法 sql: WITH object_size AS (SELECT segment_name,owner,segment_type,tablespace_name,SUM(bytes) total_bytesFROM dba_segmentsGROUP BY segment_name, owner, segment_type, tablespace_name ), table_size AS (SELECT segment_name …

【探索Linux】P.43(网络层 —— IP协议)

阅读导航 引言一、IP协议基本概念二、IP协议头格式三、网段划分1. 网络号和主机号2. 引入子网掩码(1)基本概念(2)默认子网掩码(3)子网掩码的作用(4)子网掩码与IP地址的结合&#xff…

探索Python代码质量的守护神:Flake8

文章目录 探索Python代码质量的守护神:Flake8背景:为何选择Flake8?简介:Flake8是什么?安装:如何获取Flake8?使用方法:Flake8的基本命令场景应用:Flake8在实际开发中的作用…

SOMEIPSRV_RPC_13: 不同服务可以共享相同的端口

测试目的: 验证不同的服务是否能够共享同一个传输层协议的端口号。 描述 本测试用例旨在验证在同一个电子控制单元(ECU)上,不同服务的多个服务实例是否能够监听不同的端口,同时确保不同的服务能够共享同一个端口号。 测试拓扑&#xff1a…

接口测试:使用 curl 发送请求

简介 cURL 是一个通过 URL 传输数据的,功能强大的命令行工具。cURL 可以与 Chrome Devtool 工具配合使用,把浏览器发送的真实请求还原出来,附带认证信息,脱离浏览器执行,方便开发者重放请求、修改参数调试,…

SAP HCM 薪酬过账-忽略成本分配的含义

导读 INTRODUCTION 忽略成本分配:昨天分析C0表与C1表的作用,是为今天说的忽略成本分配按钮的铺垫,忽略成本分配这个翻译有点难让人理解,从字母意思感觉就是所有成本类的不拆分处相关的行项目,但是实际不是这样&#xf…

大数据-56 Kafka SpringBoot与Kafka 基础简单配置和使用

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

ALB快速实现IPv4服务的负载均衡

阿里云应用型负载均衡ALB支持HTTP、HTTPS和QUIC协议,专门面向网络应用层,提供强大的业务处理能力。 为了实现IPv4服务的负载均衡,需要快速创建一个ALB实例,并将来自客户端的访问请求转发至后端服务器。 操作流程 第一步&#x…

多语言 AI 翻译 API 数据接口

AI / 翻译 基于 AI 多语言模型 支持多语言 / 基于模型。 1. 产品功能 基于自有专业模型进行 AI 多语言翻译高效的文本翻译性能全接口支持 HTTPS(TLS v1.0 / v1.1 / v1.2 / v1.3);全面兼容 Apple ATS;全国多节点 CDN 部署&#xf…

ITSS服务经理/ITSS服务工程师,招投标需要准备吗?

信息技术服务标准(ITSS)是中国首套完整的信息技术服务标准体系,全面规定了IT服务产品及其组成要素的标准化实施,旨在提供可信赖的IT服务。 在国际竞争日益激烈的背景下,推动国内标准的国际化已成为广泛共识&#xff0…

excel如何绘制多列数据的折线图

1.注意表中的数据必须是数据类型的,不能是字符串格式的。如果是用python生成的,需要填充int或者float型的数据。 2.选择数据(多列数据的选择,可以按住ctrl键后选中多列) 2. 选择插入 3.选择 推荐的图表->所有图表…