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

文章目录

  • 概述
    • 二值化
      • 示例
    • 分段操作
      • 重要参数
      • 示例
  • 总结

概述

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

二值化

根据阈值,将数据划分为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()

机器学习中连续型特征的二值化与分段,一文读懂_第1张图片

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

机器学习中连续型特征的二值化与分段,一文读懂_第2张图片

分段操作

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

重要参数

参数 作用
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()

机器学习中连续型特征的二值化与分段,一文读懂_第3张图片

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

机器学习中连续型特征的二值化与分段,一文读懂_第4张图片
采用哑变量的方式分类后将结果与原数据进行拼接操作戳这里。

总结

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

你可能感兴趣的:(机器学习,#,sklearn,机器学习,python,人工智能,数据分析,经验分享)