【Python】特征衍生

news2024/9/25 19:23:57

特征衍生

  • 1. 单变量特征衍生
    • 1.1 数据重编码
    • 1.2 高阶多项式
  • 2. 双变量特征衍生
    • 2.1 四则运算
    • 2.2 多项式衍生
      • 2.2.1 导包 & 数据
      • 2.2.2 二阶衍生
      • 2.2.3 三阶衍生
  • 3. 交叉组合
      • 3.1 导包 & 数据
      • 3.2 生成衍生列和名称
      • 3.3 独热编码

1. 单变量特征衍生

1.1 数据重编码

  • 连续变量
    标准化:0-1标准化、Z-Score标准化
    离散化:等距分箱、等频分箱、聚类分箱
  • 离散变量
    非数值->数值:自然数编码、字典编码
    列->新列:独热编码、哑变量变换

1.2 高阶多项式

  • 原理
    X >>> X2、X3、X4 … …
  • 代码实现
    可以手动实现,也可利用sklearn中的PolynomialFeature评估器实现。
from sklearn.preprocessing import PolynomialFeatures
import numpy as np

x1 = np.array([1, 2, 3])
# (3,) >>> (3,1)
x1.reshape(-1, 1)
'''
array([[1],
       [2],
       [3]])
'''
# 1次方到5次方
PolynomialFeatures(degree=5).fit_transform(x1.reshape(-1, 1))
'''
array([[  1.,   1.,   1.,   1.,   1.,   1.],
       [  1.,   2.,   4.,   8.,  16.,  32.],
       [  1.,   3.,   9.,  27.,  81., 243.]])
'''

2. 双变量特征衍生

2.1 四则运算

X1, X2 >>> X1+X2, X1-X2, X1*X2, X1/X2

2.2 多项式衍生

2.2.1 导包 & 数据

from sklearn.preprocessing import PolynomialFeatures
import pandas as pd

df = pd.DataFrame({'X1':[1,2,3], 'X2':[2,3,4]})
df
'''
	X1	X2
0	1	2
1	2	3
2	3	4
'''

2.2.2 二阶衍生

'''
多项式衍生
X1,X2 >>> X1,X2 | X1^2,X1*X2,X2^2
X1,X2,X3 >>> X1,X2,X3 | X1^2,X1*X2,X1*X3,X2^2,X2*X3,X3^2

include_bias 默认True,包含特征的0次方
interaction_only 默认False,True则只创建交叉项
'''
PolynomialFeatures(degree=2, include_bias=False).fit_transform(df)
'''
array([[ 1.,  2.,  1.,  2.,  4.],
       [ 2.,  3.,  4.,  6.,  9.],
       [ 3.,  4.,  9., 12., 16.]])
'''

2.2.3 三阶衍生

在这里插入图片描述

'''
X1,X2 >>> X1,X2 | X1^2,X1*X2,X2^2 | X1^3,X1^2*X2,X1*X2^2,X2^3
'''
PolynomialFeatures(degree=3, include_bias=False).fit_transform(df)
'''
array([[ 1.,  2.,  1.,  2.,  4.,  1.,  2.,  4.,  8.],
       [ 2.,  3.,  4.,  6.,  9.,  8., 12., 18., 27.],
       [ 3.,  4.,  9., 12., 16., 27., 36., 48., 64.]])
'''

创建特征的同时创建列名称

df = pd.DataFrame({'X1':[1,2,3]
                  ,'X2':[2,3,4]
                  ,'X3':[1,0,0]})
df
'''
	X1	X2	X3
0	1	2	1
1	2	3	0
2	3	4	0
'''
# 选取X1、X2进行三阶衍生
colNames = ['X1', 'X2']
degree = 3
colNames_new = []
# 生成新列名
for deg in range(2, degree+1):
    for i in range(deg+1):
        col_temp = colNames[0] + '^' + str(deg-i) + '*' + colNames[1] + '^'  + str(i)
        colNames_new.append(col_temp)
colNames_new
'''
['X1^2*X2^0',
 'X1^1*X2^1',
 'X1^0*X2^2',
 'X1^3*X2^0',
 'X1^2*X2^1',
 'X1^1*X2^2',
 'X1^0*X2^3']
'''

3. 交叉组合

在这里插入图片描述

3.1 导包 & 数据

df = pd.DataFrame({'SeniorCitizen':[0,0,0,0,0]
                  ,'Partner':['Yes','No','No','No','No']
                  ,'Dependents':['No','No','No','No','No']})
df
'''

SeniorCitizen	Partner	Dependents
0	0	Yes	No
1	0	No	No
2	0	No	No
3	0	No	No
4	0	No	No
'''

3.2 生成衍生列和名称

colNames = ['SeniorCitizen', 'Partner', 'Dependents']
colNames_new_l = []
features_new_l = []

for col_index, col_name in enumerate(colNames):
    print(col_index, col_name)
'''
0 SeniorCitizen
1 Partner
2 Dependents
'''
# 衍生列名称
for col_index, col_name in enumerate(colNames):
    for col_sub_index in range(col_index+1, len(colNames)):
        newNames = col_name + ' & ' + colNames[col_sub_index]
        print(newNames)
'''
SeniorCitizen & Partner
SeniorCitizen & Dependents
Partner & Dependents
'''
# 衍生列名称及特征本身
for col_index, col_name in enumerate(colNames):
    for col_sub_index in range(col_index+1, len(colNames)):
        newNames = col_name + '&' + colNames[col_sub_index]
        colNames_new_l.append(newNames)
        newDF = pd.Series(df[col_name].astype('str')
                         + '&'
                         + df[colNames[col_sub_index]].astype('str')
                         ,name=newNames)
        features_new_l.append(newDF)
        
features_new = pd.concat(features_new_l, axis=1)
features_new
'''

SeniorCitizen&Partner	SeniorCitizen&Dependents	Partner&Dependents
0	0&Yes	0&No	Yes&No
1	0&No	0&No	No&No
2	0&No	0&No	No&No
3	0&No	0&No	No&No
4	0&No	0&No	No&No
'''

3.3 独热编码

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

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

相关文章

对程序员来说最重要的小事——整洁代码

文章目录为什么要写整洁代码命名名副其实做有意义的区分类名、方法名函数短小只做一件事注释注释类型好注释坏注释格式目的垂直格式横向格式团队规则总结为什么要写整洁代码 现在阅读这篇博客的你不论是刚入行的新人还是开发了很多年的老鸟一定碰到过"祖传代码"&…

【原创】java+swing+mysql户籍管理系统设计与实现

户籍管理系统感觉跟学生管理系统有些类似,一个是对学生进行信息的管理,一个是对社会人员进行信息管理,难度系数基本一样,今天我们就来介绍一下使用javaswing和mysql进行户籍管理系统的开发。 功能分析: 户籍管理&…

【java 8】方法引用与构造器引用

📋 个人简介 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜📝 个人主页:馆主阿牛🔥🎉 支持我:点赞👍收藏⭐️留言&#x1f4d…

INT3断点和硬件断点

Ollydbg动态调试的时候需要打一些断点,断点分为INT3断点和硬件断点,本文是区分两个断点的文章。 目录 INT3断点 好处 坏处 硬件断点 原理 优点 缺点 INT3断点 OD中使用F2快捷键设置的断点就是INT3断点 打INT3断点的时候,断点处就会被…

Unity学习笔记--在Editor下实现一个有下拉菜单的文件路径记忆功能(保姆级教程)

目录前言需求分析知识前提一、下拉菜单的实现二、选取对应文件夹路径三、写入到.txt文件完整代码前言 最近需要在Unity编辑器下实现一个面板,有一个下拉菜单,其他人可以往这个下拉菜单里面添加一些文件夹路径,保证下次进来的时候能够直接通过…

Linux SPI-NAND 驱动开发指南

文章目录Linux SPI-NAND 驱动开发指南1 概述1.1 编写目的1.2 适用范围1.3 相关人员3 流程设计3.1 体系结构3.2 源码结构3.3 关键数据定义3.3.1 flash 设备信息数据结构3.3.2 flash chip 数据结构3.3.3 aw_spinand_chip_request3.3.4 ubi_ec_hdr3.3.5 ubi_vid_hdr3.4 关键接口说…

webrtc QOS笔记二 音频buffer数据不足生成很多gap的问题

webrtc QOS笔记二 音频buffer数据不足生成很多gap的问题 文章目录webrtc QOS笔记二 音频buffer数据不足生成很多gap的问题记录个iusse. 插入音频数据后,GetAudioInternal 进行操作决策: Normal:正常播放。 Acceleration:变声不变调的减速播放算法。 Pr…

【学习笔记】互联网金融:芝麻信用分的建模过程

学习资料: 数据分析学习随记 | 互联网金融行业2C授信模型(芝麻信用) 1. 背景 互联网金融的本质是风控。 1.1 数据分析师的角色 数据分析师在金融行业基本上有两种角色: 1.1.1 数据建模师 偏算法,但要很懂业务。要求对算法的理解较深&am…

电子标签播种墙方案

一、PTL优势: 二、系统构架: v1.2基站软件管理系统仓库标签v1.4仓库标签三、基站特点: 接收PC下达的操作指令,解析后再通过RF发送给电子标签 无线通讯距离30m无线通信速率200/50kbps网络通信速率10/100 Mbps自定义双向数据通讯协…

接口测试很难?3分钟带你入门接口自动化测试

1、什么是接口? 接口是连接前台和后台的桥梁,前台通过接口调用后端已完成的功能,而无需关注内部的实现细节。借助于接口,可以实现前后台分离,各自完成开发工作后,进行联调,提高工作效率。 2、接…

开学季电容笔怎么选?学生党高性价比电容笔推荐

或许许多人会认为苹果Pencil是无可取代的,但是我认为这压感取决于我们的预算和需求。要是我们对于绘画没有过高的要求的话,其实可以选择使用平替电容笔,而没必要入手apple pencil。为了让你对电容笔有更多的认识,我接下来推荐几款…

Flutter第三方插件objectbox的使用

Flutter基础 demo地址 参考地址 文章目录Flutter基础前言一、demo效果图二、objectbox是什么?三、objectbox的使用1.在pubspec.yaml文件中添加2.执行flutter pub get命令3.创建数据库模型4.执行flutter pub run build_runner build 命令5.如果报错则执行flutter pu…

Renderdoc中一个daraw的API调用以及其作用

分析renderdoc中一个draw调用的api接口,如下是一个draw调用的渲染api的过程,下面来分析一下这几个函数的作用。 PSSetShaderResources、VSSetShader、PSSetShader这三个方法在renderdoc调用过程使用的方法,这三个方法的做法分别如下&#xff…

【华为OD机试模拟题】用 C++ 实现 - 日志采集系统(2023.Q1)

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…

NMS详解

(类别,坐标1,坐标2,坐标3,坐标4,类别分数) step1:对最后一列分数进行排序 ,可以看到类别就被打乱了 step2: 弹出得到selected_bboxes作为基准,减少bbox_list。其实就是准…

寻路库recastnavigation改造

本文是介绍对寻路库recastnavigation 改造,使得使用更加友好。 Git仓库: https://github.com/jiangguilong2000/recastnavigation 首先,我们要做一些前置操作 SDL: 开放源代码的跨平台多媒体开发库 Premake:量跨平台构建系统 环境: VS 2019…

国内知名插画培训机构有哪些,学习插画怎么选培训班

国内知名插画培训机构有哪些?给大家梳理了国内5家专业的插画师培训班,最新无大插画班排行榜,各有优势和特色! 一:国内知名插画培训机构排名 1、轻微课(五颗星) 主打课程有日系插画、游戏原画…

Linux 计划任务讲解

目录 计划任务 一次性计划任务 长期性计划任务 计划任务 管理员可以编辑自己的和普通用户的计划任务 普通用户只可以编辑自己的计划任务 计划任务根据执行方式分为一次性计划任务、长期性计划任务 一次性计划任务 此计划只执行一次,执行后或就不会再执行了 通…

项目管理之三点估算(正态分布)

三点估算法主要来自于项目的计划评审技术 PERT,能评估时间与概率的关系。 三点估算法不仅可以用于定量风险分析,也可用于进度管理中活动历时估算。先记住几个概念:最乐观时间TO:完成该工作最少需要的时间;最悲观时间TP…

R统计绘图-PCA详解1(princomp/principal/prcomp/rda等)

此文为《精通机器学习:基于R》的学习笔记,书中第九章详细介绍了无监督学习-主成分分析(PCA)的分析过程和结果解读。 PCA可以对相关变量进行归类,从而降低数据维度,提高对数据的理解。分析的主要目的一般是:1)识别数据…