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

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

导入数据集

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

import pandas as pd
import numpy as np
df=pd.read_csv(‘students_performance.csv’)
df

output

70396e1d91d85f122aebc074c54a031e.png

离散化处理

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

df["WritingCategory"] = df["writing score"].apply(lambda x: "Outstanding" if x >= 90 else "Satisfactory")
df.head()

output

5fd60d31f6b66d48b0c5558edb898b4d.png

数据聚合

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

df1 = df.assign(Total_Score=lambda x: (x['math score'] + x['reading score'] + x['writing score']))
df1.head()

output

4a5c398b9578aaa9afc11d0d25932bbf.png

数据的过滤

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

filtered_greater_than_eighty = df1[df1.apply((lambda x: (x['Total_Score']/300 * 100)>80),axis=1)]
filtered_greater_than_eighty.head()

output

c104ca05f90b323b9638bf2777e1326b.png

二进制编码处理

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

df['lunch'] = df['lunch'].map(lambda x: '1' if x == 'standard' else '0')
df.head()

output

61400d80a0f9b90aa4e325815c702174.png

特征编码

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

categorical_encoding = df.assign(encoded_race = lambda x: (pd.factorize(df["race/ethnicity"])[0]))
categorical_encoding.head()

output

82733035b706f07b689793438f5bf1e4.png

标准化处理

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

z-score 标准化

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

2af4b7cbe30a53710a4df5f2642c4fd5.png

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

df['zscore_mathvalue'] = df.apply((lambda x: round((x['math score']-df['math score'].mean())/ 
                                                   df['math score'].std(), 2)), axis=1)
df.head()

cbc34888afa64a867d950efefff64dc7.png

Min-Max标准化

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

b5ee94123197a028ca1aff6483f3821d.png

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

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

a69c48f4ee340fb117d16851f043c7c4.png

IQR

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

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

598c84b43da3d2de8f71d62d0339c941.png

NO.1

往期推荐

Historical articles

Python数据清洗 & 预处理入门完整指南

案例实操|手把手教你搭建 RFM 客户价值分析模型

分享5个好用到爆的第三方Python模块

值得收藏的30道Python练手题(附详解)

分享、收藏、点赞、在看安排一下?

fb9f7d875632f468d9832f47a2599732.gif

9d6b39e77b7ea9864590bbc2b9ff6e91.gif

206271bc5371c63462e6c64bc2bfcd0a.gif

cf7b85011ede96b065d70bab0ddad2b5.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值