机器学习中连续型特征的二值化与分段,一文读懂
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 之 处理分类特征:处理连续性特征 二值化与分段