K箱离散化器#
- class sklearn.preprocessing.KBinsDiscretizer(n_bins=5, *, encode='onehot', strategy='quantile', dtype=None, subsample=200000, random_state=None)[source]#
将连续数据划分为区间。
更多信息请参见 用户指南。
版本 0.20 中新增。
- 参数:
- n_binsint 或 array-like,shape (n_features,),默认为 5
要生成的箱数。如果
n_bins < 2
,则引发 ValueError。- encode{'onehot', 'onehot-dense', 'ordinal'},默认为 'onehot'
用于编码转换结果的方法。
‘onehot’:使用独热编码对转换结果进行编码并返回稀疏矩阵。被忽略的特征始终堆叠在右侧。
‘onehot-dense’:使用独热编码对转换后的结果进行编码,并返回一个稠密数组。被忽略的特征始终堆叠在右侧。
‘ordinal’:返回编码为整数值的箱标识符。
- strategy{‘uniform’, ‘quantile’, ‘kmeans’}, default=’quantile’
用于定义箱宽度的策略。
‘uniform’:每个特征中的所有箱具有相同的宽度。
‘quantile’:每个特征中的所有箱具有相同数量的点。
‘kmeans’:每个箱中的值具有相同的 1D k 均值聚类的最近中心。
有关不同策略的示例,请参见:KBinsDiscretizer的不同策略演示。
- dtype{np.float32, np.float64}, default=None
所需的输出数据类型。如果为 None,则输出 dtype 与输入 dtype 保持一致。仅支持 np.float32 和 np.float64。
0.24 版本中新增。
- subsampleint 或 None,默认值为 200_000
用于拟合模型的最大样本数,用于提高计算效率。
subsample=None
表示在计算确定分箱阈值的百分位数时使用所有训练样本。由于百分位数计算依赖于对X
的每一列进行排序,并且排序具有n log(n)
的时间复杂度,因此建议在具有大量样本的数据集上使用子采样。1.3 版本中的更改:当
strategy="quantile"
时,subsample
的默认值从None
更改为200_000
。1.5 版本中的更改:当
strategy="uniform"
或strategy="kmeans"
时,subsample
的默认值从None
更改为200_000
。- random_stateint、RandomState 实例或 None,默认为 None
确定子采样的随机数生成。传递一个整数以在多次函数调用中获得可重复的结果。有关更多详细信息,请参见
subsample
参数。参见 词汇表。1.1 版本中新增。
- 属性:
- bin_edges_形状为 (n_features,) 的 ndarray 数组
每个箱的边缘。包含形状
(n_bins_, )
各不相同的数组。被忽略的特征将具有空数组。- n_bins_形状为 (n_features,),dtype=np.int64 的 ndarray
每个特征的箱数。宽度太小的箱(即 <= 1e-8)将发出警告并被移除。
- n_features_in_int
在 拟合期间看到的特征数。
0.24 版本中新增。
- feature_names_in_形状为 (
n_features_in_
,) 的 ndarray 在 拟合期间看到的特征名称。仅当
X
具有全是字符串的特征名称时才定义。1.0 版本中新增。
另请参阅
二值化器
用于基于参数
threshold
将值分箱为0
或1
的类。
备注
有关在不同数据集上进行离散化的可视化,请参考 特征离散化。关于离散化对线性模型的影响,请参见:使用 KBinsDiscretizer 对连续特征进行离散化。
在特征
i
的箱边缘中,第一个和最后一个值仅用于inverse_transform
。在转换期间,箱边缘将扩展到np.concatenate([-np.inf, bin_edges_[i][1:-1], np.inf])
如果只想预处理部分特征,可以将
KBinsDiscretizer
与ColumnTransformer
结合使用。KBinsDiscretizer
可能会产生常数特征(例如,当encode = 'onehot'
并且某些箱不包含任何数据时)。可以使用特征选择算法(例如,VarianceThreshold
)去除这些特征。示例
>>> from sklearn.preprocessing import KBinsDiscretizer >>> X = [[-2, 1, -4, -1], ... [-1, 2, -3, -0.5], ... [ 0, 3, -2, 0.5], ... [ 1, 4, -1, 2]] >>> est = KBinsDiscretizer( ... n_bins=3, encode='ordinal', strategy='uniform' ... ) >>> est.fit(X) KBinsDiscretizer(...) >>> Xt = est.transform(X) >>> Xt array([[ 0., 0., 0., 0.], [ 1., 1., 1., 0.], [ 2., 2., 2., 1.], [ 2., 2., 2., 2.]])
有时可能需要将数据转换回原始特征空间。
inverse_transform
函数将分箱后的数据转换为原始特征空间。每个值将等于两个箱边缘的平均值。>>> est.bin_edges_[0] array([-2., -1., 0., 1.]) >>> est.inverse_transform(Xt) array([[-1.5, 1.5, -3.5, -0.5], [-0.5, 2.5, -2.5, -0.5], [ 0.5, 3.5, -1.5, 0.5], [ 0.5, 3.5, -1.5, 1.5]])
- fit(X, y=None, sample_weight=None)[source]#
拟合估计器。
- 参数:
- X形状为 (n_samples, n_features) 的类数组
要离散化的数据。
- yNone
忽略。此参数仅为了与
Pipeline
保持兼容性而存在。- sample_weight形状为 (n_samples,) 的 ndarray
包含要与每个样本关联的权重值。当
strategy
设置为"uniform"
时,不能使用。1.3 版本中新增。
- 返回:
- self对象
返回实例本身。
- fit_transform(X, y=None, **fit_params)[source]#
拟合数据,然后转换它。
将转换器拟合到
X
和y
,使用可选参数fit_params
,并返回X
的转换版本。- 参数:
- X形状为 (n_samples, n_features) 的类数组
输入样本。
- y形状为 (n_samples,) 或 (n_samples, n_outputs) 的类数组,默认为 None
目标值(对于无监督转换则为 None)。
- **fit_paramsdict
附加拟合参数。
- 返回:
- X_new形状为 (n_samples, n_features_new) 的ndarray 数组
转换后的数组。
- get_feature_names_out(input_features=None)[source]#
获取输出特征名称。
- 参数:
- input_featuresstr 类数组或 None,默认为 None
输入特征。
如果
input_features
为None
,则使用feature_names_in_
作为输入特征名称。如果feature_names_in_
未定义,则生成以下输入特征名称:["x0", "x1", ..., "x(n_features_in_ - 1)"]
。如果
input_features
是类数组,则如果feature_names_in_
已定义,input_features
必须与feature_names_in_
匹配。
- 返回:
- feature_names_outstr 对象的ndarray
转换后的特征名称。
- get_metadata_routing()[source]#
获取此对象的元数据路由。
请查看用户指南,了解路由机制的工作原理。
- 返回:
- routingMetadataRequest
一个
MetadataRequest
,封装了路由信息。
- get_params(deep=True)[source]#
获取此估计器的参数。
- 参数:
- deepbool,默认为 True
如果为 True,则将返回此估计器和作为估计器的包含子对象的参数。
- 返回:
- paramsdict
参数名称与其值的映射。
- inverse_transform(X=None, *, Xt=None)[source]#
将离散化数据转换回原始特征空间。
请注意,由于离散化舍入,此函数不会重新生成原始数据。
- 参数:
- X形状为 (n_samples, n_features) 的类数组
分箱空间中的转换数据。
- Xt形状为 (n_samples, n_features) 的类数组
分箱空间中的转换数据。
自版本 1.5 起已弃用:
Xt
在 1.5 中已弃用,将在 1.7 中移除。请改用X
。
- 返回:
- Xinvndarray,dtype={np.float32, np.float64}
原始特征空间中的数据。
- set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') KBinsDiscretizer [source]#
请求传递到
fit
方法的元数据。请注意,只有当
enable_metadata_routing=True
时(参见sklearn.set_config
),此方法才相关。请参阅用户指南,了解路由机制的工作原理。每个参数的选项为
True
:请求元数据,如果提供则传递给fit
。如果未提供元数据,则忽略请求。False
:不请求元数据,元估计器不会将其传递给fit
。None
:不请求元数据,如果用户提供元数据,元估计器将引发错误。str
:元数据应使用此给定的别名而不是原始名称传递给元估计器。
默认值(
sklearn.utils.metadata_routing.UNCHANGED
)保留现有的请求。这允许您更改某些参数的请求而不对其他参数进行更改。1.3 版本中新增。
注意
仅当将此估计器用作元估计器的子估计器时(例如,在
Pipeline
中使用)此方法才相关。否则,它无效。- 参数:
- sample_weightstr、True、False 或 None,默认为 sklearn.utils.metadata_routing.UNCHANGED
fit
中sample_weight
参数的元数据路由。
- 返回:
- self对象
更新后的对象。
- set_output(*, transform=None)[source]#
设置输出容器。
参见 set_output API 介绍,了解如何使用该 API 的示例。
- 参数:
- transform{“default”, “pandas”, “polars”}, default=None
配置
transform
和fit_transform
的输出。"default"
: 变换器的默认输出格式"pandas"
: DataFrame 输出"polars"
: Polars 输出None
: 变换配置不变
版本 1.4 中新增:
"polars"
选项已添加。
- 返回:
- self估计器实例
估计器实例。
图库示例#
使用 KBinsDiscretizer 对连续特征进行离散化