机器学习中连续型特征的二值化与分段,一文读懂

Posted iostreamzl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习中连续型特征的二值化与分段,一文读懂相关的知识,希望对你有一定的参考价值。

概述

现实中我们面临的数据有些是连续型的,比如我们的年龄。在预测中我们可能只关心年龄是否大于某个值,或者是年龄的分段情况,这样的情况我们就可以将年龄进行二值化与分段操作。

二值化

根据阈值,将数据划分为0或1;大于阈值为1,小于等于阈值为0

示例

import pandas as pd
import numpy as np
np.random.seed(1)
d = {
    'age' : np.random.randint(20, 40, size=(40,)),
    'id' : np.arange(1, 41)
}
df = pd.DataFrame(data=d)
df.head()

在这里插入图片描述

df2 = df.copy()
from sklearn.preprocessing import Binarizer
df2['age'] = Binarizer(threshold=29).fit_transform(df2['age'].values.reshape(-1, 1))
df2.head()

在这里插入图片描述

分段操作

将连续型变量划分为多个分类,分类之前会对特征中的数据进行排序。

重要参数

参数作用
n_bins默认为5,用于设置需要划分的类别数
encode设置编码方式,默认onehot
onehot:将每个分支制作哑变量,返回一个稀疏矩阵,可以通过toarray()方法查看具体分类情况
ordinal:每一个分类被编码为一个整数
onehot-dense做哑变量,相当于onehot结合toarray()操作
srategy用来定义每个类的数值的范围,默认为quantile
uniform:表示等宽分类,即每个类中最大值之间的差=(max-min) / n_bins
quantile:表示等长分类,即每个类中的样本数量相同
kmeans:按照聚类分类,

示例

df3 = df.copy()
from sklearn.preprocessing import KBinsDiscretizer
kbd = KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='uniform')
df3['age'] = kbd.fit_transform(df3['age'].values.reshape(-1, 1))
df3.head()

在这里插入图片描述

df4 = df.copy()
kbd = KBinsDiscretizer(n_bins=3, encode='onehot', strategy='quantile')
kbd.fit_transform(df4['age'].values.reshape(-1, 1)).toarray()

在这里插入图片描述
采用哑变量的方式分类后将结果与原数据进行拼接操作戳这里

总结

需要注意,这里的二值化与分类操作都是对特征进行操作,所以传入的数据必须是二维矩阵类型。

以上是关于机器学习中连续型特征的二值化与分段,一文读懂的主要内容,如果未能解决你的问题,请参考以下文章

机器学习实战基础:sklearn中的数据预处理和特征工程 数据预处理 Preprocessing & Impute 之 处理分类特征:处理连续性特征 二值化与分段

机器学习特征工程之连续变量离散化:连续变量二值化(Binarizer)

图像灰度化、二值化理解

OpenCV之图像二值化与去噪

OpenCV之图像二值化与去噪

OpenCV之图像二值化与去噪