前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >案例实操 | 利用Lambda函数来进行特征工程,超方便的!!

案例实操 | 利用Lambda函数来进行特征工程,超方便的!!

作者头像
用户6888863
发布2023-03-01 20:24:09
2420
发布2023-03-01 20:24:09
举报
文章被收录于专栏:AI篮球与生活AI篮球与生活

特征工程对于我们在机器学习的建模当中扮演着至关重要的角色,要是这一环节做得好,模型的准确率以及性能就被大大地被提升,今天小编就通过Python当中的lambda函数来对数据集进行一次特征工程的操作,生成一些有用的有价值的特征出来。

导入数据集

那么首先呢,我们先导入数据集,导入Pandas模块

代码语言:javascript
复制
import pandas as pd
import numpy as np
df=pd.read_csv(‘students_performance.csv’)
df

output

离散化处理

首先我们将写作这一列“writing score”的值做一个离散化处理,基于具体的写作的分数,将其分成是“Outstanding”和“Satisfactory”两种,代码如下

代码语言:javascript
复制
df["WritingCategory"] = df["writing score"].apply(lambda x: "Outstanding" if x >= 90 else "Satisfactory")
df.head()

output

数据聚合

我们还可以计算出总分,也就是把写作的分数、数学的分数以及阅读的分数加起来,求一个总和,代码如下

代码语言:javascript
复制
df1 = df.assign(Total_Score=lambda x: (x['math score'] + x['reading score'] + x['writing score']))
df1.head()

output

数据的过滤

数据的过滤我们也可以用到lambda函数,过滤出我们想要的数据,代码如下

代码语言:javascript
复制
filtered_greater_than_eighty = df1[df1.apply((lambda x: (x['Total_Score']/300 * 100)>80),axis=1)]
filtered_greater_than_eighty.head()

output

二进制编码处理

而针对“lunch”这一列当中的值,我们来进行二进制处理,通过调用map()函数以及lambda函数来完成,代码如下

代码语言:javascript
复制
df['lunch'] = df['lunch'].map(lambda x: '1' if x == 'standard' else '0')
df.head()

output

特征编码

对于“race/ethnicity”这一列,我们将离散型变量转换成连续型的数值,通过调用lambda函数,代码如下

代码语言:javascript
复制
categorical_encoding = df.assign(encoded_race = lambda x: (pd.factorize(df["race/ethnicity"])[0]))
categorical_encoding.head()

output

标准化处理

数据的标准化(normalization)是将数据按比例缩放,使之落入在一个小的特定区间,其中最典型的就是数据的归一化处理,即将数据统一映射到【0,1】区间上,常见的数据归一化的方法有

z-score 标准化

也叫标准化标准化,经过处理的数据符合标准正态分布,即均值为0,标准差为1,其转化函数是:

而调用lambda函数来进行转换的话,例如我们针对数学的分数“math score”来进行转换,代码如下

代码语言:javascript
复制
df['zscore_mathvalue'] = df.apply((lambda x: round((x['math score']-df['math score'].mean())/ 
                                                   df['math score'].std(), 2)), axis=1)
df.head()

Min-Max标准化

也叫做是离差标准化,是对原始数据的线性变换,使得结果落在【0,1】区间内,转换的函数如下:

其中max为样本数据的最大值,min为样本数据的最小值,当然这种方法存在着缺陷就是当有新数据加入时,可能导致maxmin的变化。我们针对阅读的分数“reading score”来进行标准化处理,代码如下

代码语言:javascript
复制
df['minmax_reading_score'] = df.apply((lambda x: round((x['writing score']-df['writing score'].min())/ 
                                                       (df['writing score'].max() - df['writing score'].min()), 2)), axis=1)
df.head()

output

IQR

通过四分位间距,我们可以找到哪些是极值。这里我们就那“writing score”也就是写作的分数举例子,代码如下

代码语言:javascript
复制
Q1 = df['writing score'].quantile(0.25)
Q3 = df['writing score'].quantile(0.75)

IQR = Q3 - Q1

df['writing score'].apply(lambda x: 'Outliers' if (x > Q3 + 1.5 * IQR) or 
                          (x < Q1 - 1.5 * IQR) else 'Normal')
df.head()

output

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-12-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 关于数据分析与可视化 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导入数据集
  • 离散化处理
  • 数据聚合
  • 数据的过滤
  • 二进制编码处理
  • 特征编码
  • 标准化处理
    • z-score 标准化
      • Min-Max标准化
      • IQR
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档