KBinsDiscretizer#

class sklearn.preprocessing.KBinsDiscretizer(n_bins=5, *, encode='onehot', strategy='quantile', quantile_method='warn', dtype=None, subsample=200000, random_state=None)[源代码]#

将连续数据分箱到间隔中。

详情请参阅用户指南

在版本 0.20 中新增。

参数:
n_binsint 或 array-like,形状为 (n_features,),默认值=5

要生成的箱数。如果 n_bins < 2,则引发 ValueError。

encode{‘onehot’, ‘onehot-dense’, ‘ordinal’},默认值='onehot'

用于编码转换结果的方法。

  • ‘onehot’:使用独热编码对转换结果进行编码,并返回一个稀疏矩阵。被忽略的特征始终堆叠在右侧。

  • ‘onehot-dense’:使用独热编码对转换结果进行编码,并返回一个密集数组。被忽略的特征始终堆叠在右侧。

  • ‘ordinal’:返回编码为整数值的箱标识符。

strategy{‘uniform’, ‘quantile’, ‘kmeans’},默认值='quantile'

用于定义箱宽度的策略。

  • ‘uniform’:每个特征中的所有箱具有相同的宽度。

  • ‘quantile’:每个特征中的所有箱具有相同的点数。

  • ‘kmeans’:每个箱中的值具有一维 k-means 聚类的相同最近中心。

不同策略的示例请参阅:演示 KBinsDiscretizer 的不同策略

quantile_method{“inverted_cdf”, “averaged_inverted_cdf”,

“closest_observation”, “interpolated_inverted_cdf”, “hazen”, “weibull”, “linear”, “median_unbiased”, “normal_unbiased”},默认值=”linear” 在使用 strategy=”quantile” 时传递给 np.percentile 计算的方法。只有 averaged_inverted_cdfinverted_cdf 在未激活子采样时支持使用 sample_weight != None

在版本 1.7 中新增。

dtype{np.float32, np.float64},默认值=None

输出所需的数据类型。如果为 None,则输出数据类型与输入数据类型一致。仅支持 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_ndarray 的 ndarray,形状为 (n_features,)

每个箱的边界。包含不同形状的数组 (n_bins_, )。被忽略的特征将拥有空数组。

n_bins_ndarray,形状为 (n_features,),数据类型=np.int64

每个特征的箱数。宽度过小(即 <= 1e-8)的箱将被警告并移除。

n_features_in_int

fit 期间看到的特征数量。

在版本 0.24 中新增。

feature_names_in_ndarray,形状为 (n_features_in_,)

fit 期间看到的特征名称。仅当 X 的所有特征名称均为字符串时才定义。

在版本 1.0 中新增。

另请参阅

Binarizer

基于参数 threshold 将值分箱为 01 的类。

注意

有关不同数据集上离散化的可视化,请参阅 特征离散化。有关离散化对线性模型影响的说明,请参阅:使用 KBinsDiscretizer 离散化连续特征

在特征 i 的箱边界中,第一个和最后一个值仅用于 inverse_transform。在转换期间,箱边界扩展为

np.concatenate([-np.inf, bin_edges_[i][1:-1], np.inf])

如果您只想预处理部分特征,可以将 KBinsDiscretizerColumnTransformer 结合使用。

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)[源代码]#

拟合估计器。

参数:
Xarray-like,形状为 (n_samples, n_features)

要离散化的数据。

yNone

被忽略。此参数仅为与 Pipeline 兼容而存在。

sample_weightndarray,形状为 (n_samples,)

包含要与每个样本关联的权重值。

在版本 1.3 中新增。

在版本 1.7 中更改:增加了对 strategy=”uniform” 的支持。

返回:
self对象

返回实例本身。

fit_transform(X, y=None, **fit_params)[源代码]#

拟合数据,然后转换。

使用可选参数 fit_params 将转换器拟合到 Xy,并返回 X 的转换版本。

参数:
Xarray-like,形状为 (n_samples, n_features)

输入样本。

yarray-like,形状为 (n_samples,) 或 (n_samples, n_outputs),默认值=None

目标值(对于无监督转换,为 None)。

**fit_params字典

额外的拟合参数。

返回:
X_newndarray 数组,形状为 (n_samples, n_features_new)

转换后的数组。

get_feature_names_out(input_features=None)[源代码]#

获取输出特征名称。

参数:
input_featuresarray-like 的字符串或 None,默认值=None

输入特征。

  • 如果 input_featuresNone,则使用 feature_names_in_ 作为输入特征名称。如果未定义 feature_names_in_,则生成以下输入特征名称:["x0", "x1", ..., "x(n_features_in_ - 1)"]

  • 如果 input_features 是 array-like,则如果定义了 feature_names_in_input_features 必须与 feature_names_in_ 匹配。

返回:
feature_names_out字符串对象的 ndarray

转换后的特征名称。

get_metadata_routing()[源代码]#

获取此对象的元数据路由。

请查阅用户指南以了解路由机制的工作原理。

返回:
routingMetadataRequest

一个封装路由信息的 MetadataRequest

get_params(deep=True)[源代码]#

获取此估计器的参数。

参数:
deepbool,默认值=True

如果为 True,将返回此估计器及其包含的作为估计器的子对象的参数。

返回:
params字典

参数名称与其值之间的映射。

inverse_transform(X)[源代码]#

将离散化数据转换回原始特征空间。

请注意,由于离散化舍入,此函数不会重新生成原始数据。

参数:
Xarray-like,形状为 (n_samples, n_features)

箱形空间中的转换数据。

返回:
X_originalndarray,数据类型={np.float32, np.float64}

原始特征空间中的数据。

set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') KBinsDiscretizer[源代码]#

请求传递给 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)[源代码]#

设置输出容器。

有关如何使用 API 的示例,请参阅 介绍 set_output API

参数:
transform{“default”, “pandas”, “polars”},默认值=None

配置 transformfit_transform 的输出。

  • "default":转换器的默认输出格式

  • "pandas":DataFrame 输出

  • "polars":Polars 输出

  • None:转换配置未更改

在版本 1.4 中新增:添加了 "polars" 选项。

返回:
self估计器实例

估计器实例。

set_params(**params)[源代码]#

设置此估计器的参数。

此方法适用于简单估计器以及嵌套对象(例如 Pipeline)。后者具有 <component>__<parameter> 形式的参数,以便可以更新嵌套对象的每个组件。

参数:
**params字典

估计器参数。

返回:
self估计器实例

估计器实例。

transform(X)[源代码]#

离散化数据。

参数:
Xarray-like,形状为 (n_samples, n_features)

要离散化的数据。

返回:
Xt{ndarray, 稀疏矩阵},数据类型={np.float32, np.float64}

箱形空间中的数据。如果 self.encode='onehot',则为稀疏矩阵;否则为 ndarray。