0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Python特征生成作用和生成的方法

数据分析与开发 来源:CSDN 作者:python阿喵 2021-03-10 15:53 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

创造新的特征是一件十分困难的事情,需要丰富的专业知识和大量的时间。机器学习应用的本质基本上就是特征工程。——Andrew Ng

业内常说数据决定了模型效果上限,而机器学习算法是通过数据特征做出预测的,好的特征可以显著地提升模型效果。这意味着通过特征生成(即从数据设计加工出模型可用特征),是特征工程相当关键的一步。

本文从特征生成作用、特征生成的方法(人工设计、自动化特征生成)展开阐述并附上代码。

1 特征生成的作用

特征生成是特征提取中的重要一步,作用在于:

增加特征的表达能力,提升模型效果;(如体重除以身高就是表达健康情况的重要特征,而单纯看身高或体重,对健康情况表达就有限。)

可以融入业务上的理解设计特征,增加模型的可解释性;

2 一键数据情况分析

本文示例的数据集是客户的资金变动情况,如下数据字典:

cust_no:客户编号;I1 :性别;I2:年龄;E1:开户日期; B6 :近期转账日期;C1 (后缀_fir表示上个月):存款;C2:存款产品数; X1:理财存款;X2:结构性存款; label:资金情况上升下降情况。

75030a1c-7efa-11eb-8b86-12bb97331649.png

这里安利一个超实用Python库,可以一键数据分析(数据概况、缺失、相关性、异常值等等),方便结合数据分析报告做特征生成。

#一键数据分析 importpandas_profiling pandas_profiling.ProfileReport(df)

3 特征生成方法(手动)

特征生成方法可以分为两类:聚合方式、转换方式。

3.1 聚合方式

聚合方式是指对存在一对多的字段,将其对应多条记录分组聚合后统计平均值、计数、最大值等数据特征。如以上述数据集,同一cust_no对应多条记录,通过对cust_no(客户编号)做分组聚合,统计C1字段个数、唯一数、平均值、中位数、标准差、总和、最大、最小值,最终得到按每个cust_no统计的C1平均值、最大值等特征。

#以cust_no做聚合,C1字段统计个数、唯一数、平均值、中位数、标准差、总和、最大、最小值 df.groupby('cust_no').C1.agg(['count','nunique','mean','median','std','sum','max','min'])

此外还可以pandas自定义聚合函数生成特征,比如加工聚合元素的平方和:

#自定义分组聚合统计函数 defx2_sum(group): returnsum(group**2) df.groupby('cust_no').C1.apply(x2_sum)

3.2 转换方式

转换方式是指对字段间做加减乘除等运算生成数据特征的过程,对不同字段类型有不同转换方式。

3.2.1 数值类型

加减乘除多个字段做运算生成新的特征,这通常需要结合业务层面的理解以及数据分布的情况,以生成较优的特征集。

importnumpyasnp #前后两个月资金和 df['C1+C1_fir']=df['C1']+df['C1_fir'] #前后两个月资金差异 df['C1-C1_fir']=df['C1']-df['C1_fir'] #产品数*资金 df['C1*C2']=df['C1']*df['C2'] #前后两个月资金变化率 df['C1/C1_fir']=df['C1']/df['C1_fir']-1 df.head()

多个列统计直接用聚合函数统计多列的方差、均值等

764b13ce-7efa-11eb-8b86-12bb97331649.png

importnumpyasnp df['C1_sum']=np.sum(df[['C1_fir','C1']],axis=1) df['C1_var']=np.var(df[['C1_fir','C1']],axis=1) df['C1_max']=np.max(df[['C1_fir','C1']],axis=1) df['C1_min']=np.min(df[['C1_fir','C1']],axis=1) df['C1-C1_fir_abs']=np.abs(df['C1-C1_fir']) df.head()

排名编码特征按特征值对全体样本进行排序,以排序序号作为特征值。这种特征对异常点不敏感,也不容易导致特征值冲突。

#排序特征 df['C1_rank']=df['C1'].rank(ascending=0,method='dense') df.head()76778a26-7efa-11eb-8b86-12bb97331649.png

3.2.2 字符类型

截取当字符类型的值过多,通常可对字符类型变量做截取,以减少模型过拟合。如具体的家庭住址,可以截取字符串到城市级的粒度。

字符长度统计字符串长度。如转账场景中,转账留言的字数某些程度可以刻画这笔转账的类型。

频次通过统计字符出现频次。如欺诈场景中地址出现次数越多,越有可能是团伙欺诈。

#字符特征 #由于没有合适的例子,这边只是用代码实现逻辑,加工的字段并无含义。 #截取第一位字符串 df['I1_0']=df['I1'].map(lambdax:str(x)[:1]) #字符长度 df['I1_len']=df['I1'].apply(lambdax:len(str(x))) display(df.head()) #字符串频次 df['I1'].value_counts()

3.2.3 日期类型

常用的有计算日期间隔、周几、几点等等。

76965c9e-7efa-11eb-8b86-12bb97331649.png

#日期类型 df['E1_B6_interval']=(df.E1.astype('datetime64[ns]')-df.B6.astype('datetime64[ns]')).map(lambdax:x.days) df['E1_is_month_end']=pd.to_datetime(df.E1).map(lambdax:x.is_month_end) df['E1_dayofweek']=df.E1.astype('datetime64[ns]').dt.dayofweek df['B6_hour']=df.B6.astype('datetime64[ns]').dt.hour df.head()

4 特征生成方法(自动化)

传统的特征工程方法通过人工构建特征,这是一个繁琐、耗时且容易出错的过程。自动化特征工程是通过Fearturetools等工具,从一组相关数据表中自动生成有用的特征的过程。对比人工生成特征会更为高效,可重复性更高,能够更快地构建模型。

4.1 FeatureTools上手

Featuretools是一个用于执行自动化特征工程的开源库,它有基本的3个概念:1)Feature Primitives(特征基元):生成特征的常用方法,分为聚合(agg_primitives)、转换(trans_primitives)的方式。可通过如下代码列出featuretools的特征加工方法及简介。

importfeaturetoolsasft ft.list_primitives()

771610b0-7efa-11eb-8b86-12bb97331649.png

2)Entity(实体)可以被看作类似Pandas DataFrame, 多个实体的集合称为Entityset。实体间可以根据关联键添加关联关系Relationship。

#df1为原始的特征数据 df1=df.drop('label',axis=1) #df2为客户清单(cust_no唯一值) df2=df[['cust_no']].drop_duplicates() df2.head() #定义数据集 es=ft.EntitySet(id='dfs') #增加一个df1数据框实体 es.entity_from_dataframe(entity_id='df1', dataframe=df1, index='id', make_index=True) #增加一个df2数据实体 es.entity_from_dataframe(entity_id='df2', dataframe=df2, index='cust_no') #添加实体间关系:通过 cust_no键关联 df_1 和 df 2实体 relation1=ft.Relationship(es['df2']['cust_no'],es['df1']['cust_no']) es=es.add_relationship(relation1)

3)dfs(深度特征合成):是从多个数据集创建新特征的过程,可以通过设置搜索的最大深度(max_depth)来控制所特征生成的复杂性

##运行DFS特征衍生 features_matrix,feature_names=ft.dfs(entityset=es, target_entity='df2', relationships=[relation1], trans_primitives=['divide_numeric','multiply_numeric','subtract_numeric'], agg_primitives=['sum'], max_depth=2,n_jobs=1,verbose=-1)

4.2 FeatureTools问题点

4.2.1 内存溢出问题Fearturetools是通过工程层面暴力生成所有特征的过程,当数据量大的时候,容易造成内存溢出。解决这个问题除了升级服务器内存,减少njobs,还有一个常用的是通过只选择重要的特征进行暴力衍生特征。

4.2.2 特征维度爆炸当原始特征数量多,或max_depth、特征基元的种类设定较大,Fearturetools生成的特征数量巨大,容易维度爆炸。这是就需要考虑到特征选择、特征降维。

原文标题:一文归纳Python特征生成方法(全)

文章出处:【微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    7314

    浏览量

    93972
  • 机器学习
    +关注

    关注

    66

    文章

    8541

    浏览量

    136232
  • python
    +关注

    关注

    57

    文章

    4857

    浏览量

    89579

原文标题:一文归纳Python特征生成方法(全)

文章出处:【微信号:DBDevs,微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    不只有AI协作编程(Vibe Coding):生成式系统级芯片(GenSoC)将如何把生成式设计推向硬件层面

    但是否能将这种生成式的、目标驱动的方法从软件层向下延伸呢?这一理念是否可以直接应用于硬件本身呢?通过GenSoC,开发者可用自然语言或高级模型描述系统行为,XMOS的工具链将自动生成确定的、实时的、可重构的SoC,并可即刻直接部
    的头像 发表于 11-07 14:04 283次阅读

    如何通过地址生成器实现神经网络特征图的padding?

    ,从而使卷积输出特征图结果满足我们的需求,这种补零的操作称之为padding,如下图所示。 关于padding的实现,一般有两种操作,第一种是使用稀疏地址生成器,寻找padding数据地址的规律,当
    发表于 10-22 08:15

    探索无限可能:生成式推荐的演进、前沿与挑战

    )的生成式推荐(Generative Recommendations, GRs)正逐步形成一种区别于判别式推荐的新范式,展现出替代依赖复杂手工特征的传统推荐系统的强大潜力。本文系统全面地介绍了基于LLM的生成式推荐系统(GRs)
    的头像 发表于 10-20 16:42 4393次阅读
    探索无限可能:<b class='flag-5'>生成</b>式推荐的演进、前沿与挑战

    如何让大模型生成你想要的测试用例?

    ,有角色定位,有业务背景,有个人偏好,有目标达成标准,有格式规范要求等,让智能模板充当你的个人翻译官,充分发挥每一句设定提示词的作用和价值,生成属于你想要风格的测试
    的头像 发表于 09-26 10:01 560次阅读
    如何让大模型<b class='flag-5'>生成</b>你想要的测试用例?

    智能体化AI和生成式AI的区别

    生成式 AI 的核心是“生成内容” —— 比如用大模型写报告,是对输入指令的被动响应。而智能体化 AI(Agentic AI)的关键是 “自主决策”:它像一个有经验的助理,能感知环境、记忆习惯、规划
    的头像 发表于 08-25 17:24 1210次阅读

    生成式 AI 重塑自动驾驶仿真:4D 场景生成技术的突破与实践

    生成式AI驱动的4D场景技术正解决传统方法效率低、覆盖不足等痛点,如何通过NeRF、3D高斯泼溅等技术实现高保真动态建模?高效生成极端天气等长尾场景?本文为您系统梳理AI驱动的4D场景生成
    的头像 发表于 08-06 11:20 4772次阅读
    <b class='flag-5'>生成</b>式 AI 重塑自动驾驶仿真:4D 场景<b class='flag-5'>生成</b>技术的突破与实践

    Copilot操作指南(一):使用图片生成原理图符号、PCB封装

    的操作方法。  ”   图片生成原理图符号(Symbol) Copilot 支持图片生成原理图符号功能,支持原理图编辑器与符号编辑器两种场景。只需在 Copilot 中  @图片生成
    的头像 发表于 07-15 11:14 3899次阅读
    Copilot操作指南(一):使用图片<b class='flag-5'>生成</b>原理图符号、PCB封装

    利用NVIDIA 3D引导生成式AI Blueprint控制图像生成

    AI 赋能的图像生成技术突飞猛进,从早期模型会生成手指过多的人类图像,到现在能创造出令人惊叹的逼真视觉效果。即使取得了如此飞跃,仍然存在一个挑战:实现创意掌控。
    的头像 发表于 06-05 09:24 737次阅读

    ​Diffusion生成式动作引擎技术解析

    Diffusion生成式动作引擎 Diffusion生成式动作引擎是一种基于扩散模型(Diffusion Models)的生成式人工智能技术,专注于生成连续、逼真的人类动作或动画序列。
    的头像 发表于 03-17 15:14 2705次阅读

    Python中的迭代器与生成

    Python迭代器与生成器 列表生成式 列表生成式也叫做列表推导式,它本身还是列表,只不过它是根据我们定义的规则来生成一个真实的列表。  
    的头像 发表于 02-20 10:43 677次阅读

    聚云科技获亚马逊云科技生成式AI能力认证

    近日,云管理服务提供商聚云科技成功获得亚马逊云科技生成式AI能力认证。此次认证标志着聚云科技在利用亚马逊云科技全托管的生成式AI服务方面取得了显著成就,特别是在Amazon Bedrock等技术
    的头像 发表于 02-19 10:33 832次阅读

    聚云科技荣获亚马逊云科技生成式AI能力认证

    助力企业加速生成式AI应用落地 北京2025年2月14日 /美通社/ -- 云管理服务提供商聚云科技获得亚马逊云科技生成式AI能力认证,利用亚马逊云科技全托管的生成式AI服务Amazon
    的头像 发表于 02-14 16:07 699次阅读

    聚云科技荣获亚马逊云科技生成式AI能力认证 助力企业加速生成式AI应用落地

    北京 ——2025 年 2 月 14 日 云管理服务提供商聚云科技获得亚马逊云科技生成式AI能力认证,利用亚马逊云科技全托管的生成式AI服务Amazon Bedrock等技术,从应用范围、模型选择
    发表于 02-14 13:41 323次阅读

    生成式AI工具好用吗

    当下,生成式AI工具正以其强大的内容生成能力,为用户带来了前所未有的便捷与创新。那么,生成式AI工具到底好用吗?答案无疑是肯定的。接下来,AI部落小编带您了解。
    的头像 发表于 01-17 09:54 816次阅读

    OpenAI开放Sora视频生成模型

    OpenAI近日宣布,其倾力打造的人工智能视频生成系统Sora已正式向美国及其他市场的ChatGPT Plus订阅用户开放。自去年首次公开预览以来,Sora历经约10个月的精心研发与优化,现已全面
    的头像 发表于 12-10 11:16 1074次阅读