kaggle平台学习复习笔记 | 特征工程

news2024/12/27 13:19:26

目录

  • 数值字段
    • round
    • Box/Bins
  • 类别字段
    • onehot
    • LabelEncoder
    • Ordinal Encoding
    • BinaryEncoder
    • Frequency/Count Encoding
    • Mean/Target Encoding
  • 日期字段
  • 特征筛选
    • feature_importances_
    • 利用方差
    • 利用相关性
    • 利用线性模型
    • 迭代消除
    • 排列重要性(Permutation Importance)

特征工程决定了模型精度的上限。

特征工程是数据挖掘的主要工作内容:数据清洗、数据预处理、数据转换。

特征工程大概占据了60%-70%的时间。

数值字段

在这里插入图片描述
例子:

df = pd.DataFrame({
    'student_id': [1,2,3,4,5,6,7],
    'country': ['China', 'USA', 'UK', 'Japan', 'Korea', 'China', 'USA'],
    'education': ['Master', 'Bachelor', 'Bachelor', 'Master', 'PHD', 'PHD', 'Bachelor'],
    'age': [34.5, 28.9, 19.5, 23.6, 19.8, 29.8, 31.7],
    'target': [1, 0, 1, 0, 1, 0, 1]
})
df.head(10)

在这里插入图片描述

round

# 省略小数点
df['age_round1'] = df['age'].round()
# 按照区间进行分段 (实质是缩放)
df['age_round2'] = (df['age'] / 10).astype(int)
df.head(10)

在这里插入图片描述
可以一定程度上忽略特殊值对模型的影响

Box/Bins

df['age_<20'] = (df['age'] <= 20).astype(int)
df['age_20-25'] = ((df['age'] > 20) & (df['age'] <=25)).astype(int)
df['age_20-25'] = ((df['age'] > 25) & (df['age'] <= 30)).astype(int)
df['age_>30'] = (df['age'] > 30).astype(int)
df.head(10)

在这里插入图片描述
分箱,类似于one hot 编码

类别字段

类别字段是最常见的字段
主要分为两种:

  1. 一种是常规的类别字段
    比如:①猫、狗、牛
    ②铅笔、钢笔、油笔
  2. 有次序性的类别字段
    比如: ①专科、本科、博士
    ②(情感分析中)不好、一般、好
    在这里插入图片描述
    例子
    假设数据如下:
df = pd.DataFrame({
    'student_id': [1,2,3,4,5,6,7],
    'country': ['China', 'USA', 'UK', 'Japan', 'Korea', 'China', 'USA'],
    'education': ['Master', 'Bachelor', 'Bachelor', 'Master', 'PHD', 'PHD', 'Bachelor'],
    'target': [1, 0, 1, 0, 1, 0, 1]
})
df.head(10)

在这里插入图片描述

onehot

pandas中get_dummies()函数是onehot编码

pd.get_dummies(df, columns=['education'])
# one-of-k

# 1 0 0
# 0 1 0 
# 0 0 1

在这里插入图片描述
sklearn中封装的onehot编码

from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder()
ohe.fit_transform(df[['education']]).toarray()

在这里插入图片描述

LabelEncoder

标签编码
优点:相比于onehot,没有增加太多的数据维度
缺点:编码后形成了大小关系

sklearn中的LabelEncoder

from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df['country_LabelEncoder'] = le.fit_transform(df['country'])
df.head(10)

在这里插入图片描述
pandas中的factorize()方法

df['country_LabelEncoder'] = pd.factorize(df['country'])[0]
df.head(10)

在这里插入图片描述

一个比较通用的方法:
遇到一个类别字段,如果它的取值空间个数<10,就用onehot;否则,就用LabelEncoder

Ordinal Encoding

指定它的编码等级

df['education'] = df['education'].map(
                    {'Bachelor': 1, 
                    'Master': 2, 
                    'PHD': 3})
df.head(10)

在这里插入图片描述

BinaryEncoder

二进制编码,机组中的二进制编码

import category_encoders as ce
encoder = ce.BinaryEncoder(cols= ['country'])

pd.concat([df, encoder.fit_transform(df['country']).iloc[:, 1:]], axis=1)

在这里插入图片描述

Frequency/Count Encoding

出现频率

df['country_count'] = df['country'].map(df['country'].value_counts()) / len(df)
df.head(10)

在这里插入图片描述
出现次数

df['country_count'] = df['country'].map(df['country'].value_counts())
df.head(10)

在这里插入图片描述

Mean/Target Encoding

目标编码
以目标值作为参照进行编码

df.groupby(['country'])['target'].mean()

在这里插入图片描述
解释: china 出现了两次,分别是0和1 ,均值就是0.5

df['country_target'] = df['country'].map(df.groupby(['country'])['target'].mean())
df.head(10)

在这里插入图片描述
优点:能够帮助模型更好的拟合
缺点:容易过拟合
使用训练集的target encoding对全部数据集进行编码,不能直接对验证集进行target encoding

日期字段

在这里插入图片描述

特征筛选

特征筛选方法,在比赛中,最实用的方法是:删除/添加一个字段,看看对模型精度是否产生影响,如果增加精度,就保留这个字段,如果精度减少,就删除这个字段。

基于统计值的特征筛选

  1. 字段方差:表示字段的波动范围,如果字段波动范围小,表示这个字段包含的信息量较少
  2. 字段缺失比例:缺失比例较多,60%以上,基本可以删除该特征
  3. 分布一致性:训练集和特征集的特征分布是否均衡,若不均衡,可以考虑删除该特征
  4. 离群点以及标签的相关性:比如用皮尔逊相关系数,以及杰卡德相关系数,来判断特征与标签的相关性。

基于模型的特征筛选

  1. 线性模型
    在这里插入图片描述
  2. 树模型
    在这里插入图片描述
  3. 某特征随机打散后,模型精度前后对比
    在这里插入图片描述
    在这里插入图片描述

feature_importances_

随机森林回归器 feature_importances_

import numpy as np
from sklearn.ensemble import RandomForestRegressor

from sklearn.datasets import load_boston
data = load_boston()

rf = RandomForestRegressor()
rf.fit(data.data, data.target);
print(rf.feature_importances_)

plt.figure(figsize=(12, 6))
plt.bar(range(1, 14), rf.feature_importances_)
_ = plt.xticks(range(1, 14), data.feature_names)

在这里插入图片描述

lightgbm回归器 feature_importances_

import numpy as np
from lightgbm import LGBMRegressor
data = load_boston()

clf = LGBMRegressor()
clf.fit(data.data, data.target)

plt.figure(figsize=(12, 6))
plt.bar(range(1, 14), clf.feature_importances_)
_ = plt.xticks(range(1, 14), data.feature_names)

在这里插入图片描述

利用方差

from sklearn.feature_selection import VarianceThreshold
X = [[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 1], [0, 1, 0], [0, 1, 1]]
sel = VarianceThreshold(threshold=(.8 * (1 - .8)))
sel.fit_transform(X)

sel.fit_transform(data.data)
print(data.feature_names[~sel.get_support()])
print(data.feature_names)

在这里插入图片描述

利用相关性

SelectKBest 、 f_regression

from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import  f_regression

sel = SelectKBest(f_regression, k='all').fit(data.data, data.target)
sel.fit_transform(data.data, data.target)
print(data.feature_names)
print(sel.scores_)

plt.figure(figsize=(12, 6))
plt.bar(range(data.data.shape[1]), sel.scores_)
_ = plt.xticks(range(data.data.shape[1]), data.feature_names)

在这里插入图片描述

利用线性模型

线性模型的coef_

from sklearn.svm import LinearSVR
from sklearn.feature_selection import SelectFromModel

lsvc = LinearSVR().fit(data.data, data.target)
print(data.feature_names)
print(lsvc.coef_)

plt.figure(figsize=(12, 6))
plt.bar(range(data.data.shape[1]), np.abs(lsvc.coef_))
_ = plt.xticks(range(data.data.shape[1]), data.feature_names)

在这里插入图片描述

迭代消除

from sklearn.ensemble import ExtraTreesRegressor
from sklearn.feature_selection import SelectFromModel
clf = ExtraTreesRegressor(n_estimators=50)
clf = clf.fit(data.data, data.target)

plt.figure(figsize=(12, 6))
plt.bar(range(data.data.shape[1]), clf.feature_importances_)
_ = plt.xticks(range(data.data.shape[1]), data.feature_names)

在这里插入图片描述

排列重要性(Permutation Importance)

from sklearn.ensemble import ExtraTreesRegressor
from sklearn.inspection import permutation_importance
clf = RandomForestRegressor().fit(data.data, data.target)
result = permutation_importance(clf, data.data, data.target, n_repeats=10,
                                random_state=0)
result.importances_mean

plt.figure(figsize=(12, 6))
plt.bar(range(data.data.shape[1]), result.importances_mean)
_ = plt.xticks(range(data.data.shape[1]), data.feature_names)

在这里插入图片描述

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

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

相关文章

MATLAB-RBF神经网络例1

采用所描述的系统中﹐假设真实质量为m2,在仿真中,初始值为,采用的自适应律为&#xff1a;设定参数为y0.5,10,25,6&#xff0c;分别设定参考位置为r(t)0,r(t )sin(4t) ,初始条件为&#xff0c;。图1.1和图1.2为指令r(t)0时控制效果,图1.3和图1.4为指令r(t)sin(4t )时的控制效果。…

verilog学习笔记- 12)触摸按键控制LED灯实验

目录 简介&#xff1a; 实验任务: 硬件设计: 程序设计: 下载验证&#xff1a; 简介&#xff1a; 触摸按键主要可分为四大类&#xff1a;电阻式、电容式、红外感应式以及表面声波式。根据其属性的不同&#xff0c;每种触摸按键都有其合适的使用领域。 电阻式触摸按键&#…

响应式与观察者模式

什么是响应式&#xff1f;响应式 是Vue 最独特的特性之一&#xff0c;是非侵入性的响应式系统。数据模型仅仅是普通的 JavaScript 对象。而当你修改它们时&#xff0c;视图会进行更新。我们也叫他双向绑定。如果想要更改视图&#xff0c;只要直接更改对应属性的值即可&#xff…

从隔壁老王开始的信号处理入门

诸神缄默不语-个人CSDN博文目录 我是从GNN被扔到NLP然后又做起了GNN现在又被喊去搞时间序列分类&#xff0c;所以现在才开始看信号处理&#xff08;因为我开始做GNN以来&#xff0c;GNN就以图域而非谱域为主了&#xff0c;所以那时我没怎么看过信号处理&#xff09;。 所以写个…

RabbitMQ消息队列(三):任务分发机制

在上篇文章中&#xff0c;我们解决了从发送端&#xff08;Producer&#xff09;向接收端&#xff08;Consumer&#xff09;发送“Hello World”的问题。在实际的应用场景中&#xff0c;这是远远不够的。从本篇文章开始&#xff0c;我们将结合更加实际的应用场景来讲解更多的高级…

jetson nano上编译与使用西门子PLC通讯库snap7

文章目录一.西门子snap7介绍二.西门子S7通讯介绍三.jetson nano编译snap7库四.Qt Cmake导入snap7库五.snap7主要函数说明1.与PLC建立连接2.读写PA区变量3.读写MK区变量六.通讯程序示例一.西门子snap7介绍 Snap7 是一个基于以太网与S7系列的西门子PLC通讯的开源库。支持包括S7系…

2023美赛数学建模ABCDEF题思路模型代码

占个位置吧&#xff0c;开始在本帖实时更新赛题思路代码&#xff0c;文章末尾获取&#xff01; 持续为更新参考思路 赛题思路 会持续进行思路模型分析&#xff0c;下自行获取。 A题思路&#xff1a; &#xff08;比赛开始后第一时间更新&#xff09; B题思路&#xff1a;…

《算法分析与设计》复习笔记

目录 一、算法的基本概念 1.1 算法的定义 1.2 算法的“好坏”如何衡量&#xff1f; 1.3 描述算法的时间复杂度 ⭐ 1.4 如何评价算法 二、 分治法 2.1 分治法的求解步骤 2.2 平衡的概念 2.3 递归式解法 2.3.1 主定理法 ⭐ 2.4 分治法的使用条件 2.5 分治法实例 2.5…

助力安全作业生产,基于轻量级YOLOv6s开发实践反光衣检测识别分析系统

在很多实际作业生产场景中&#xff0c;出于对安全的考虑&#xff0c;施工作业等操作都是要求穿戴反光衣的&#xff0c;这个主要是为了保护人身安全&#xff0c;但是很多时候工程作业场景下因为实际种种的原因工人实际作业操作的时候很多人并没有按照要求穿戴反光衣这就给安全生…

OPTEE安全存储

本文主要介绍OPTEE的安全存储技术&#xff0c;翻译自官方文档&#xff1a;Secure storage — OP-TEE documentation documentation (optee.readthedocs.io) 一、背景 OP-TEE中的安全存储是根据GlobalPlatform的TEE Internal Core API&#xff08;这里称为可信存储&#xff09;…

2023/1/13总结

今天学习了链式向前星和唯一分解定理&#xff08;数论&#xff09;。 链式向前星 链式向前星是一种存储图的方法&#xff0c;在此之前我们学到过存储图的方式&#xff1a;邻接表以及邻接矩阵&#xff0c;邻接矩阵浪费了很大的空间&#xff0c;而邻接表 写起来的代码有一点点…

微信小程序wxml的数据和事件的绑定,以及条件和列表的渲染

文章目录1.数据绑定的基本原则在data中定义页面的数据2.事件绑定bingtap的语法格式:在事件处理函数中为data中的数据赋值事件传参bindinput的语法格式实现文本框和data之间的数据同步1.定义数据2.渲染结构3.美化样式4.绑定input事件处理函数3.条件渲染hiddenwx:if与hidden的对比…

数据库 表设计 MySQL

表设计 约束 为了保证入库数据的合理性&#xff0c;添加的各种规则。 约束的分类 准备测试用的表格&#xff1a; CREATE TABLE emp ( id INT, -- 员工id&#xff0c;主键且自增长 ename VARCHAR(50), -- 员工姓名&#xff0c;非空且唯一 joindate DATE, -- 入职日期&…

【uniapp】渲染列表数据删除项导致每项数据重置的问题解决方案

开发uniapp项目&#xff0c;使用的是JavaScript Vue写法&#xff0c;操作wList数组列表更新的时候&#xff0c;如果每一项都带input 或 radio组件&#xff0c;要操作移除的话&#xff0c;那么组件的输入数据会被清除重置&#xff0c;若不希望这样&#xff0c;那应该怎么做才好呢…

设计模式相关内容介绍—软件设计原则(六个)

在软件开发中&#xff0c;为了提高软件系统的可维护性和可复用性&#xff0c;增加软件的可扩展性和灵活性&#xff0c;程员要尽量根据6条原则来开发程序&#xff0c;从而提高软件开发效率、节约软件开发成本和维护成本。 目录 1.开闭原则 2.里氏代替原则 3.依赖倒转原则 4.接…

dvwa中的文件包含攻击

环境&#xff1a;dvwa: 192.168.11.135 dvwa版本&#xff1a; Version 1.9 (Release date: 2015-09-19)kail机器&#xff1a;192.168.11.156一、什么是文件包含漏洞?为简化代码&#xff0c;会把重复的code内容单独写到一个页面文件&#xff0c;然后再需要调用重复内容的页面中…

C语言:初识C语言

目录前言1. 什么是c语言呢2. 第一个c语言程序2. 数据类型3. 变量和常量3.1 变量3.1.1 变量的定义3.1.2 变量的分类3.1.3 变量的使用3.1.4 变量的作用域和生命周期3.2 常量4. 字符串、转义字符、注释4.1 字符串4.2 转义字符4.3 注释5. 选择语句6. 循环语句7. 函数8. 数组9. 操作…

学习笔记——keep-alive缓存组件,再次返回组件data数据重置

前言&#xff1a;使用keep-alive缓存组件&#xff0c;当再次返回该组件后&#xff0c;希望其组件中的数据或状态&#xff0c;保持上次离开该组件时的情况。 一、当前组件树 希望缓存HomeMain组件的状态。 二、错误处理 我在HomeMain的祖先组件HomeLayout中&#xff0c;写了如下…

sqlplus 连接数据库

终端直连 Oracle 数据库 ORA-12162 错误 出于各种网络原因&#xff0c;无法直连数据库&#xff0c;但又必须查询数据库数据 我们只能选择直连数据库的服务器 然后通过 sqlplus 连接 Oracle 从配置文件里获取这样一段信息 urljdbc:oracle:thin:192.168.1.3:1521:testdb use…

【SpringCloud08】SpringCloud Consul服务注册与发现

1.Consul简介 1.1是什么 官网 Consul 是一套开源的分布式服务发现和配置管理系统&#xff0c;由 HashiCorp 公司用Go 语言开发 提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用&#xff0c;也可以一起使用以构建全方位…