Python特征工程 — 1.1 特征二值化

目录

1 特征二值化

1.1 特征二值化简介

1.2 实验数据集 

2 阈值法

2.1 scikit-learn库实现阈值法二值化

2.2 pandas实现阈值法二值化

2.3 自定义函数实现阈值法二值化

3 其他方法实现二值化

3.1 中位数法

3.2 众数法

3.3 标准差法


1 特征二值化

1.1 特征二值化简介

特征二值化是一种数据预处理技术,特别是在处理分类问题时将特征值转换为二进制值,通常为0和1。这种转换可以简化模型的复杂性,提高计算效率,并在某些情况下提高模型的性能。

特征二值化常用方法有如下几种,中位数法、众数法、标准差法相当于是阈值法中阈值的特殊取值:

  1. 阈值法:选择一个阈值,将所有大于或等于阈值的特征值设置为1,小于阈值的设置为0。

  2. 中位数法:使用特征值的中位数作为分界点,将大于或等于中位数的值设置为1,小于中位数的值设置为0。

  3. 众数法:将特征值中出现次数最多的值作为1,其他值设置为0。

  4. 标准差法:如果特征值的绝对值大于其标准差的某个倍数,则将其设置为1,否则为0。

特征二值化的使用场景:特征二值化在某些算法中非常有用,比如决策树和随机森林,因为这些算法对于特征的数值大小不敏感,只关心特征值的分布。然而,在其他一些算法中,如线性回归或神经网络,特征的数值大小可能会影响模型的性能,因此在这些情况下可能不适合使用特征二值化。

1.2 实验数据集 

背景描述:本数据集汇集了某个电商平台的用户基本信息、行为习惯和互动数据。它包括用户的年龄、性别、居住地区、收入水平等基本属性,以及他们的兴趣偏好、登录频率、购买行为和平台互动等动态指标。

数据说明:

字段说明
User_ID每个用户的唯一标识符,便于追踪和分析。
Age用户的年龄,提供对人口统计偏好的洞察。
Gender用户的性别,使能性别特定的推荐和定位。
Location用户所在地区:郊区、农村、城市,影响偏好和购物习惯。
Income用户的收入水平,表明购买力和支付能力。
Interests用户的兴趣,如运动、时尚、技术等,指导内容和产品推荐。
Last_Login_Days_Ago用户上次登录以来的天数,反映参与频率。
Purchase_Frequency用户进行购买的频率,表明购物习惯和忠诚度。
Average_Order_Value用户下单的平均价值,对定价和促销策略至关重要。
Total_Spending用户消费的总金额,表明终身价值和购买行为。
Product_Category_Preference用户偏好的特定产品类别。
Time_Spent_on_Site_Minutes用户在电子商务平台上花费的时间,表明参与程度。
Pages_Viewed用户在访问期间浏览的页面数量,反映浏览活动和兴趣。
Newsletter_Subscription用户是否订阅了营销活动通知。

数据下载: 链接:https://pan.baidu.com/s/1yT1ct_ZM5uFLgcYsaBxnHg?pwd=czum  提取码:czum 

运行方法:将代码拷贝到jupyter中运行即可

阈值法

阈值法通过设定一个阈值,原字段大于阈值的被设定为1,否则为0,转换函数为:

实现目标:对于示例数据集当中的"Purchase_Frequency"字段是用户进行购买的频率,表明购物习惯和忠诚度。但购买频率达到一定数量时,认为是忠诚的,标记为1,否则标记为0。

2.1 scikit-learn库实现阈值法二值化

在scikit-learn的preprocessing中,使用Binarizer可以将字段二值化,示例如下:

from sklearn.preprocessing import Binarizer

# 创建Binarizer实例,设置阈值
binarizer = Binarizer(threshold=4)

# 直接使用Binarizer转换dataframe中的列
data['Purchase_Frequency_binarized'] = binarizer.fit_transform(data[['Purchase_Frequency']])

# 打印结果
data[['Purchase_Frequency', 'Purchase_Frequency_binarized']]

运行结果如下:

2.2 pandas实现阈值法二值化

除了使用Binarizer,在可以使用pandas.cut对数据进行离散化,这种方式通过传入一个用于表示阈值的"bins"参数,将数据进行分割,同样也可以实现上述功能。如下所示:

import pandas as pd

# 应用自定义函数到dataframe的列
data['Purchase_Frequency_binarized'] = pd.cut(data['Purchase_Frequency'], bins=[-float('inf'), 4, float('inf')], labels=[0, 1])
# 打印结果
data[['Purchase_Frequency', 'Purchase_Frequency_binarized']]

2.3 自定义函数实现阈值法二值化

import numpy as np

def binarize_by_threshold(data, threshold):
    return np.where(data >= threshold, 1, 0)

data['Purchase_Frequency_binarized'] =  binarize_by_threshold(data['Purchase_Frequency'], 4)
data[['Purchase_Frequency', 'Purchase_Frequency_binarized']]

3 其他方法实现二值化

中位数法、众数法、标准差法本质上是阈值法取特殊阈值

3.1 中位数法

中位数法:使用特征值的中位数作为分界点,将大于或等于中位数的值设置为1,小于中位数的值设置为0。

def binarize_by_median(data):
    median_value = np.median(data)
    return np.where(data >= median_value, 1, 0)

3.2 众数法

众数法:将特征值中出现次数最多的值作为1,其他值设置为0。

from scipy import stats

def binarize_by_mode(data):
    mode_value = stats.mode(data)[0][0]
    return np.where(data == mode_value, 1, 0)

3.3 标准差法

标准差法:如果特征值的绝对值大于其标准差的某个倍数,则将其设置为1,否则为0。

def binarize_by_std_dev(data, multiplier=1):
    mean = np.mean(data)
    std_dev = np.std(data)
    threshold = mean + multiplier * std_dev
    return np.where(data >= threshold, 1, 0)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

几度春风里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值