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_cdf
和inverted_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
将值分箱为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)[源代码]#
拟合估计器。
- 参数:
- 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
将转换器拟合到X
和y
,并返回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_features
为None
,则使用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
配置
transform
和fit_transform
的输出。"default"
:转换器的默认输出格式"pandas"
:DataFrame 输出"polars"
:Polars 输出None
:转换配置未更改
在版本 1.4 中新增:添加了
"polars"
选项。
- 返回:
- self估计器实例
估计器实例。